大数据分析案例(Hdaoop+Hive+FineBI)
【代码】大数据分析案例(Hdaoop+Hive+FineBI)
·
一、准备数据集
1.在MySQL中建对应表
CREATE TABLE orders (
id INT , -- 订单ID
order_status_code VARCHAR(255), -- 订单状态编码
order_status_name VARCHAR(255), -- 订单状态名称
match_status_name VARCHAR(255), -- 撮合状态名称
create_time DATETIME, -- 创建时间
update_time DATETIME, -- 最近更新时间
deal_time DATETIME, -- 成交时间
fulfillment_time DATETIME, -- 履约完成时间
total_quantity INT, -- 商品总数量
total_price DECIMAL(10, 2), -- 订单总价
purchase_unit_id INT, -- 采购单位ID
supplier_id INT, -- 供应商ID
creator_id INT, -- 创建人ID
region_code VARCHAR(255), -- 区划编码
product_id INT, -- 商品ID
product_name VARCHAR(255), -- 商品名称
category_id INT, -- 后台三级类目ID
brand_id INT, -- 商品品牌ID
brand_name VARCHAR(255), -- 商品品牌名称
model_name VARCHAR(255), -- 商品型号名称
quantity INT, -- 商品数量
unit_price DECIMAL(10, 2), -- 商品单价
product_total_price DECIMAL(10, 2), -- 商品总价
sku_number VARCHAR(255), -- SKU编号
business_instance_code VARCHAR(255), -- 业务实例编码
bidding_method_name VARCHAR(255), -- 竞价方式名称
source_system VARCHAR(255), -- 来源系统
business_instance_name VARCHAR(255), -- 业务实例名称
business_type_code VARCHAR(255), -- 业务类型编码
business_type_name VARCHAR(255), -- 业务类型名称
business_module VARCHAR(255), -- 业务模块
trade_module VARCHAR(255), -- 交易模块
purchaser_id INT, -- 采购人ID
shipping_fee DECIMAL(10, 2), -- 订单运费(分)
order_product_id INT, -- 订单商品ID
purchase_plan_source VARCHAR(255), -- 采购计划来源
has_accessories BOOLEAN, -- 是否含有配件
accessory_amount DECIMAL(10, 2), -- 配件金额
accessory_quantity INT, -- 配件数量
original_unit_price DECIMAL(10, 2), -- 商品原单价
third_level_category_name VARCHAR(255), -- 第三级分类名称
region_name VARCHAR(255), -- 地区名称
origin_cost DECIMAL(10, 2), -- 原产地费用
actual_cost DECIMAL(10, 2) -- 实际费用
);
2.将data.csv数据导入到MySQL中(HadoopTest数据库的orders表中)
在MySQL中执行以下指令
load data local infile '~/data.csv' # 文件路径
into table orders # 表名
character set utf8 # 编码
fields terminated by ',' # 分隔符
lines terminated by '\r\n'
ignore 1 lines; # 忽略第一行,因为表头已建好
效果图
查看导入是否乱码(有乱码看这里)
二、使用sqoop将数据从MySQL中导入到Hive,原文点这里
1. 在Hive里建立表,用来接收mysql表
CREATE TABLE orders (
id INT, -- 订单ID
order_status_code STRING, -- 订单状态编码
order_status_name STRING, -- 订单状态名称
match_status_name STRING, -- 撮合状态名称
create_time TIMESTAMP, -- 创建时间
update_time TIMESTAMP, -- 最近更新时间
deal_time TIMESTAMP, -- 成交时间
fulfillment_time TIMESTAMP, -- 履约完成时间
total_quantity INT, -- 商品总数量
total_price DECIMAL(10, 2), -- 订单总价
purchase_unit_id INT, -- 采购单位ID
supplier_id INT, -- 供应商ID
creator_id INT, -- 创建人ID
region_code STRING, -- 区划编码
product_id INT, -- 商品ID
product_name STRING, -- 商品名称
category_id INT, -- 后台三级类目ID
brand_id INT, -- 商品品牌ID
brand_name STRING, -- 商品品牌名称
model_name STRING, -- 商品型号名称
quantity INT, -- 商品数量
unit_price DECIMAL(10, 2), -- 商品单价
product_total_price DECIMAL(10, 2), -- 商品总价
sku_number STRING, -- SKU编号
business_instance_code STRING, -- 业务实例编码
bidding_method_name STRING, -- 竞价方式名称
source_system STRING, -- 来源系统
business_instance_name STRING, -- 业务实例名称
business_type_code STRING, -- 业务类型编码
business_type_name STRING, -- 业务类型名称
business_module STRING, -- 业务模块
trade_module STRING, -- 交易模块
purchaser_id INT, -- 采购人ID
shipping_fee DECIMAL(10, 2), -- 订单运费(分)
order_product_id INT, -- 订单商品ID
purchase_plan_source STRING, -- 采购计划来源
has_accessories BOOLEAN, -- 是否含有配件
accessory_amount DECIMAL(10, 2), -- 配件金额
accessory_quantity INT, -- 配件数量
original_unit_price DECIMAL(10, 2), -- 商品原单价
third_level_category_name STRING, -- 第三级分类名称
region_name STRING, -- 地区名称
origin_cost DECIMAL(10, 2), -- 原产地费用
actual_cost DECIMAL(10, 2) -- 实际费用
);
2. 在命令窗口使用下方命令(加粗部分改成自己的)
sqoop import --connect jdbc:mysql://192.168.10.102:3306/HadoopTest --username root --password 1111 --table orders --delete-target-dir --num-mappers 1 --hive-import --hive-database db_msg --hive-table orders
解释:将我ip地址为192.168.10.102的机子,mysql中的HadoopTest数据库中orders表导入到Hive的db_msg数据库的orders表
3.查看Hive中对应表是否有记录,是否乱码
4.问题-导入过程没报错,但是数据都是null
eg:
解决:导入语句中有 --fields-terminated-by ','(去掉这句)
5.问题-导入过去的数据被分开(“供应商同意取消订单,订单关闭”)
解决:
1.查看MySQL中的表,可能从csv导入到MySQL的过程中已经分开了(我就是)
2.可以将csv中逗号改成下划线
三、使用fineBI进行可视化
1.进行ETL(数据抽取、转换和加载)
筛选可用数据,拆分时间构建几个新属性
CREATE TABLE orders2 ( id INT, -- 订单ID order_status_name STRING, -- 订单状态名称 match_status_name STRING, -- 撮合状态名称 deal_time TIMESTAMP, -- 成交时间 total_quantity INT, -- 商品总数量 total_price DECIMAL(10, 2), -- 订单总价 brand_name STRING, -- 商品品牌名称 quantity INT, -- 商品数量 unit_price DECIMAL(10, 2), -- 商品单价 bidding_method_name STRING, -- 竞价方式名称 business_instance_name STRING, -- 业务实例名称 third_level_category_name STRING, -- 第三级分类名称 region_name STRING, -- 地区名称 actual_cost DECIMAL(10, 2) -- 实际费用 ,deal_day string ,--时间_天 deal_hour string--时间_小时 );
2.基于Hive完成需求的各个指标计算
2-1:计算每个时段交易数据
CREATE TABLE IF NOT EXISTS everyhour_trading COMMENT "每个时间段交易次数" AS SELECT orders2.deal_hour, count(*) as counts from orders2 where deal_hour is not null GROUP BY orders2.deal_hour; -- drop table everyhour_trading;
2-3:计算交易物品占比
CREATE TABLE IF NOT EXISTS item_ratio COMMENT "交易物品占比" AS SELECT orders2.third_level_category_name, count(*) as counts from orders2 where third_level_category_name !='' GROUP BY orders2.third_level_category_name ORDER BY counts DESC
2-4:计算交易情况比例
CREATE TABLE IF NOT EXISTS ok COMMENT "交易情况比例" AS SELECT orders2.order_status_name, count(*) as counts from orders2 where order_status_name !='' GROUP BY orders2.order_status_name ORDER BY counts DESC limit 5;
2-5:计算当天交易次数
CREATE TABLE IF NOT EXISTS total_jiaoyi_success COMMENT "交易成功次数" AS SELECT count(*) as total from orders2 where orders2.order_status_name = "已结算_交易完成";
2-6:计算 取消交易数
CREATE TABLE IF NOT EXISTS total_jiaoyi COMMENT "取消交易数" AS SELECT count(*) as total from orders2 where orders2.order_status_name!="已结算_交易完成";
3.连接fineBI
3-1:连接Hive后上传数据
3-2:选择自己建立的表
3-3:新建分析主题
3-4: 添加仪表板和组件
3-5:制作多个组件,选择合适的 图标类型
eg:
3-6:最后把所有组件放入仪表板,并排好格式
更多推荐
已为社区贡献1条内容
所有评论(0)