一、背景介绍
Adventure Works Cycle是国内一家制造公司,该公司生产和销售金属和复合材料自行车在全国各个市场。销售方式主要有两种,前期主要是分销商模式,但是2018年公司实现财政收入目标后,后续就开始通过公司自有网站获取线上商户进一步扩大市场。现数据部门需为业务部门的精细化运营提供数据支持,能精准的定位目标客户群体。
二.项目任务
随着线上业务的开展,需要增强公司数据化方面的治理,让前线的业务同学能够实现自主分析从而能实现对市场的快速判断。
业务需求:查看最新的销量,销售额趋势以及自行车的占比,获取当天,前一天,当月,当季,当年的各区域各城市销量销售额,以及同比数据
三.项目过程
准备工作:mysql 数据源,Hive数据库,Sqoop,Power BI,服务器:linux
1.观察数据:
mysql数据库中一共有26张表,根据和业务部门的需求,最终确定需要用到的3张表;
ods_sales_orders(订单明细表):时间_地区_产品聚合表——用于从整体、地域和产品维度反映销售概况。
dim_date_df(日期维度表):每日新增用户表——用于形成用户画像。
ods_customer(每日新增用户表):订单明细表——用于用户行为分析。
数据字典:
2.通过Sqoop将Mysql数据导入Hive
考虑到数据量较大,使用mysql处理数据速度较慢,因此采用Hive来处理数据,提升运行速度。通过Sqoop先将Mysql数据导入Hive中,代码如下:
语句用法:sqoop import \ #'\'符号前面空格,后面不能加空格
--hive-import \
--connect "jdbc:mysql://IP地址:端口/mysql数据库?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&tinyInt1isBit=false&dontTrackOpenResources=true&defaultFetchSize=50000&useCursorFetch=true" \
--driver com.mysql.jdbc.Driver \
--username mysql 用户名 \
--password 密码 \
--query \
'select * from dim_date_df where $CONDITIONS' \ #原始表
--fetch-size 50000 \
--hive-table ods_zxk.dim_date_df \ #目标表
--hive-drop-import-delims \
--delete-target-dir \
--target-dir /user/hadoop/sqoop/dim_date_df \
-m 1
将上述的代码包装成sqoop_dim_date_df.sh文件,随后导入另外两张表sqoop_ods_sales_orders.sh,
sqoop_ods_customer.sh。
3.数据处理
数据导入完成后,根据业务需求,最终确定需要生成的三张目标表:dw_customer_order(时间_地区_产品聚合表),dw_amount_diff(当日维度表),dw_order_by_day(每日环比表);
生成流程如下:
在linux里编写数据处理代码,并包装成.sh格式文件:
按照这种思路,完成3张表的代码。并分别包装成create_dw_order_by_day_zxk.sh,create_dw_customer_order_zxk.sh,create_dw_amount_diff_zxk.sh文件,以备后续在linux上部署自动化语句使用。
4.sqoop把处理好之后的目标表导出到mysql
导出前,需要在mysql中建表。最好是根据hive中的目标表建表,保持两边的字段统一。在Hive中输入show create table dw_order_by_day_zxk;
根据上述建表语句在mysql中建表,在导出语句中写入文件存储位置
分别将三张表的导出语句包装成sh文件。
5.linux上做定时部署
linux的定时任务使用crontab文件来实现
(1)编写shedule.sh文件,按执行顺序添加文件
(2)添加定时任务,设定每天早上6点执行
编辑crontab 文件 :vi /etc/crontab
添加定时任务:0 6 * * * /home/frog005/adventure_zxk/schedule.sh
6.power bi 展示
根据业务需求,链接mysql数据库,展示业务数据。