本项目课程是一门极具综合性和完整性的大型大数据项目实战课程,课程项目的业务背景源自各类互联网公司对海量用户浏览行为数据和业务数据分析的需求及企业数据管理、数据运营需求。
学完本课程,你将很容易就拿到大数据数仓建设或用户画像建设等岗位的OFFER
本课程项目涵盖数据采集与预处理、数据仓库体系建设、用户画像系统建设、数据治理(元数据管理、数据质量管理)、任务调度系统、数据服务层建设、OLAP即席分析系统建设等大量模块,力求原汁原味重现一个完备的企业级大型数据运营系统。
跟随项目课程,历经接近100+小时的时间,从需求分析开始,到数据埋点采集,到预处理程序代码编写,到数仓体系搭建…逐渐展开整个项目的宏大视图,构建起整个项目的摩天大厦。
多易教育,专注大数据培训; 课程引领市场,就业乘风破浪
多易教育官网地址
www.51doit.cn
业务数据是存储在业务系统的联机事务处理数据库(业务库)中
而要做数据分析,不可能直接在业务系统的数据库上进行,应该将数据导入数仓中再行分析!
导入数据的技术手段:
用navicat一类的mysql客户端工具手动导入
用java、python、scala、shell写程序来导入
用spark、mr等分布式运算程序开发框架写程序来导入
数据从业务系统中导入数仓,有两种导入策略
1)增量导入
① 每天只导入变化的或新增的数据
② 好处:可以记住每条数据的每次变化状态,且比较节省数仓中的存储空间
③ 弊端:每天的导入结果,只是源表的一部分数据,对后续的数据分析带来更大的复杂度
2)全量导入
① 每天将业务表中的数据完整全部导入一遍
② 好处:可以记住每条数据的每次变化状态,且后续数据分析也比较方便
③ 弊端:每天的导入结果都包含业务表的全部,而其中大部分数据是没变的,带来了大量的冗余存储,比较浪费数仓的存储空间!
具体用哪个策略,看场景:
场景1: x表数据量很小 —》 全量
场景2: x表数据量很大,老数据更新频率很低 --》 增量
场景3: x表数据量很大,老数据更新频繁 --》全量
而且大数据技术所构建的数仓,不太在意空间,能用全量就用全量!
业务数据,就是公司的业务系统(javaee系统)在业务数据中产生的数据,对于电商来说,数据主要涉及以下模块:
1).商品信息(主要信息、详情信息、类目信息、属性信息)
2).用户信息(主要信息、附加信息、会员等级信息)
3).订单信息(主要信息、详情信息、物流信息、评论信息)
4).购物车信息
5).内容管理(话题,文章,评论)
6).营销管理(优惠券、代金券、活动规则、主题推荐)
-- 购物车表ods_b2c_cart
drop table if exists ods_b2c_cart;
create table ods_b2c_cart(
id bigint ,-- ID
session_id string ,-- session_id
user_id bigint ,-- 用户id
goods_id bigint ,-- 商品ID
number bigint ,-- 商品数量
cancel_time string ,-- 商品取消时间
submit_time string ,-- 商品提交时间
dw_date string ,-- 数仓计算日期
)
----------------------------------------------------------------
1,s01,u001,g013,4,null,null,2019-06-17
2,s01,u001,g020,2,null,null,2019-06-17
3,s02,u001,g021,2,null,null,2019-06-17
4,s12,u002,g018,1,null,null,2019-06-17
一张大宽表,是通过关联大量有关商品信息的业务表所得!商品基本信息、类目表、仓储表、折扣表、商品属性表…
-- 商品信息表 dwd_b2c_goods
drop table if exists dwd_b2c_goods;
create table dwd_b2c_goods(
sku_id bigint ,--SKU编号
sku_name string ,--SKU名称 小米8少女粉128G尊享版
spu_id bigint ,--商品编号
spu_no string ,--商品货号
spu_sn string ,--商品条码
spu_name string ,--商品名称 小米8
size_id bigint ,--尺码编号
size_name string ,--尺码名称
colour_id bigint ,--颜色ID
shop_id bigint ,--店铺编号
shop_name string ,--店铺名称
curr_price double ,--售卖价格
market_price double ,--市场价格
discount double ,--折扣比例
cost_price double ,--成本价格
cost_type string ,--成本类型
warehouse string ,--所在仓库
stock_cnt bigint ,--进货数量
stock_amt double ,--进货货值
first_cat bigint ,--1级分类ID
first_cat_name string ,--1级分类名称
second_cat bigint ,--2级分类ID
second_cat_name string ,--2级分类名称
third_cat bigint ,--3级分类ID
third_cat_name string ,--3级分类名称
brand_id string ,-- 品牌id
brand_name string , --品牌名称
dw_date string
)
(“导入时建议用增量策略”)
-- 订单主要信息 ods_b2c_orders
drop table if exists ods_b2c_orders;
create table ods_b2c_orders(
order_id bigint ,--订单ID
order_no string ,--订单号
order_date timestamp ,--订单日期
user_id bigint ,--用户ID
user_name string ,--登录名
order_money double ,--订单金额(应付金额)
order_type string ,--订单类型 0->正常订单;1->秒杀订单
--订单状态: 0->待付款;1->待发货;2->已发货;3->已完成;4->已关闭;5->无效订单;6->退货;7-》拒收
order_status string ,--订单状态
-- 1->支付宝;2->微信
pay_type string ,--支付类型
-- 0->未支付;1->支付已完成 ; 2->支付失败
pay_status string ,--支付状态
-- 0->PC订单;1->app订单 ; 2->微信订单
order_source string ,--订单来源
last_update_time timestamp ,--订单最后修改时间
dw_date timestamp
)
partitioned by
(dt string)
;
-- 订单的详细信息 ods_b2c_orders_desc
drop table if exists ods_b2c_orders_desc;
create table ods_b2c_orders_desc(
order_id bigint ,-- 订单ID
order_no string ,-- 订单号
consignee string ,-- 收货人姓名
area_id bigint ,-- 收货人地址ID
area_name string ,-- 地址ID对应地址段(粒度到县区,有些做得好的做到镇)
address string ,-- 收货人地址(收货人手工填的地址)
mobilephone string ,-- 收货人手机号
telephone string ,-- 收货人电话
coupon_id bigint ,-- 使用代金券ID
coupon_money double ,-- 使用代金券金额
carriage_money double ,-- 运费
create_time string ,-- 创建时间
last_update_time string ,-- 最后修改时间
dw_date string
)
partitioned by (dt string)
location ''
;
drop table if exists ods_b2c_orders_goods;
create table ods_b2c_orders_goods(
order_id bigint ,-- 订单ID
goods_id bigint ,-- 商品ID
cat_id bigint ,-- 类目ID
cat_name string ,-- 3级类目名称
size_id bigint ,-- 条码ID
goods_price double ,-- 订单商品价格
goods_amount bigint ,-- 数量
create_time string ,-- 创建日期
last_update_time string ,-- 最后修改日期
dw_date string
)
partitioned by (dt string)
location ''
;
GMV:总成交金额(包含支付的订单,未支付的订单,退货的订单,拒收的订单,取消的订单)
具体需求:
1).计算当日的GMV,按各种维度进行统计: 品牌,品类
2).计算销售额(品牌、品类)排行榜top10
3).按品类、品牌维度计算客单价: 总成交额/总客户数
《详见项目代码》
复购,就是重复购买!
复购率,就是产生重复购买行为的人,占所有购买人的比例
复购率,一定要限定在一定维度之中才有意义!
比如:
某段时间范围内的 ==》 某个品类的复购率; 某个品牌的复购率;
需求举例:
当日,各个品类的复购率!
计算逻辑:
所谓购买次数,一个订单就是一次购买!
订单主要信息表 ods_b2c_orders
order_id, user_id
o1,u1
o2,u1
o3,u1
o4,u2
o5,u2
订单商品信息表 ods_b2c_orders_goods 一个订单有多个商品,在本表中就有多条记录
order_id, goods_id, cat3
o1 , g1 , c01
o1 , g2 , c01
o1 , g4 , c03
o2 , g3 , c04
o2 , g2 , c01
o2 , g5 , c06
o3 , g1 , c01
o3 , g2 , c01
o4 , g6 , c05
o4 , g3 , c04
o5 , g2 , c01
o5 , g3 , c04
给用户打上一些订单相关(下单、退货、金额、客单价)的统计数据标签
drop table if exists ads_user_order_tag;
create table ads_user_order_tag(
user_id bigint ,--用户
first_order_time string ,--第一次消费时间
last_order_time string ,--最近一次消费时间
first_order_ago bigint ,--首单距今时间
last_order_ago bigint ,--尾单距今时间
month1_order_cnt bigint ,--近30天购买次数
month1_order_amt double ,--近30天购买金额
month2_order_cnt bigint ,--近60天购买次数
month2_order_amt double ,--近60天购买金额
month3_order_cnt bigint ,--近90天购买次数
month3_order_amt double ,--近90天购买金额
max_order_amt double ,--最大消费金额
min_order_amt double ,--最小消费金额
total_order_cnt bigint ,--累计消费次数(不含退拒)
total_order_amt double ,--累计消费金额(不含退拒)
total_coupon_amt double ,--累计使用代金券金额
user_avg_order_amt double ,--平均订单金额(含退拒)
month3_user_avg_amt double ,--近90天平均订单金额(含退拒)
common_address string ,--常用收货地址
common_paytype string ,--常用支付方式
month1_cart_cnt_30 bigint ,--最近30天加购次数
month1_cart_goods_cnt_30 bigint ,--最近30天加购商品件数
month1_cart_submit_cnt_30 bigint ,--最近30天提交件数
month1_cart_submit_rate double , --最近30天商品提交占比
month1_cart_cancel_cnt bigint ,--最近30天取消商品件数
dw_date string ,计算日期
) partitioned by
(dt string)
;
《详见项目代码》
drop table if exists dm_user_goods_amt;
create table dm_user_goods_amt(
user_id bigint ,-- 用户
p_sales_cnt bigint ,-- 不含退拒商品销售数量
p_sales_amt double ,-- 不含退拒商品销售金额
p_sales_cut_amt double ,-- 不含退拒销售金额(扣促销减免)
h_sales_cnt bigint ,-- 含退拒销售数量
h_sales_amt double ,-- 含退拒销售金额
h_sales_cut_amt double ,-- 含退拒销售金额(扣促销减免)
return_cnt bigint ,-- 退货商品数量
return_amt double ,-- 退货商品金额
reject_cnt bigint ,-- 拒收商品数量
reject_amt double ,-- 拒收商品金额
common_first_cat bigint ,-- 最常购买商品一级类目名称
common_second_cat bigint ,-- 最常购买商品二级类目名称
common_third_cat bigint ,-- 最常购买商品三级类目名称
common_brand_id bigint , -- 最常购买的品牌
dw_date bigint
) partitioned by (dt string)
stored as parquet
;
计算源表: dm_orders_goods 订单与商品信息综合宽表
《详见项目代码》
本项目教程笔记源自多易教育《Titan综合数据仓库与数据运营系统》,在CSDN学院有相关视频教程购买链接,大数据企业级项目实战–Titan大型数据运营系统
本项目课程是一门极具综合性和完整性的大型大数据项目实战课程,课程项目的业务背景源自各类互联网公司对海量用户浏览行为数据和业务数据分析的需求及企业数据管理、数据运营需求。
学完本课程,你将很容易就拿到大数据数仓建设或用户画像建设等岗位的OFFER
本课程项目涵盖数据采集与预处理、数据仓库体系建设、用户画像系统建设、数据治理(元数据管理、数据质量管理)、任务调度系统、数据服务层建设、OLAP即席分析系统建设等大量模块,力求原汁原味重现一个完备的企业级大型数据运营系统。
跟随项目课程,历经接近100+小时的时间,从需求分析开始,到数据埋点采集,到预处理程序代码编写,到数仓体系搭建…逐渐展开整个项目的宏大视图,构建起整个项目的摩天大厦。
多易教育,专注大数据培训; 课程引领市场,就业乘风破浪
多易教育官网地址
www.51doit.cn