DM
名称:数据集市层 Data Market
功能:基于DWS层日统计宽表,上卷出周、月、年等统计宽表,即粗粒度汇总。
解释
从理论层面来说,数据集市是一个小型的部门或工作组级别的数据仓库。
一些公司早期的数据集市后期可能会演变成为数仓系统。
本项目中在数据集市层面主要进行粗粒度汇总,也可以将这些功能下放至DWS层完成。抛弃DM.
使用DataGrip在Hive中创建dm层
注意,对于建库建表操作,需直接使用Hive,因为Presto只是一个数据分析的引擎,其语法不一定支持直接在Hive中建库建表。
知识点03:DM层搭建--销售主题统计宽表--建模
概述
DM层销售主题宽表,基于DWS层销售主题日统计宽表的值,上卷统计出年、月、周的数据。
指标和DWS一致。
指标
销售收入、平台收入、配送成交额、小程序成交额、安卓APP成交额、苹果APP成交额、PC商城成交额、订单量、参评单量、差评单量、配送单量、退款单量、小程序订单量、安卓APP订单量、苹果APP订单量、PC商城订单量
维度
日期:天(已经统计过), 周, 月, 年
日期+城市
日期+商圈
日期+店铺
日期+品牌
日期+大类
日期+中类
日期+小类
建表
整个表和DWS层销售主题统计宽表dws_sale_daycount的区别就在于多了开头的时间粒度字段。
用于标识后面的指标是哪个时间粒度统计出来的指标。
知识点04:DM层搭建--销售主题统计宽表--表关系梳理
销售主题各种指标的数据支撑
dws_sale_daycount
时间粒度的数据支撑
dwd.dim_date 时间维表
企业中,时间维表数据是怎么维护的呢?
1、维护频率:一次性生成1年或者多年的时间数据。
2、使用java、Python代码实现数据的生成。
关联条件
yp_dws.dws_sale_daycount dc
left join yp_dwd.dim_date d on dc.dt = d.date_code
知识点05:DM层搭建--销售主题统计宽表--按年统计
在dws层已经统计出天的指标数据了,现在需要在其之上上卷计算出周、月、年的数据。
这里并不是简单的分组+sum求和即可,需要考虑到分组的类别。
step1:确定分组字段
年
年+城市
年+商圈
年+店铺
年+品牌
年+大类
年+中类
年+小类
(对于销售主题 在DM层 分析的维度不变 时间的粒度改变)
group by
grouping sets (
(d.year_code),
(d.year_code, city_id, city_name),
(d.year_code, city_id, city_name, trade_area_id, trade_area_name),
(d.year_code, city_id, city_name, trade_area_id, trade_area_name, store_id, store_name),
(d.year_code, brand_id, brand_name),
(d.year_code, max_class_id, max_class_name),
(d.year_code, max_class_id, max_class_name,mid_class_id, mid_class_name),
(d.year_code, max_class_id, max_class_name,mid_class_id, mid_class_name,min_class_id, min_class_name))
;
step2:分组聚合
-- 统计值
sum(dc.sale_amt) as sale_amt,
sum(dc.plat_amt) as plat_amt,
sum(dc.deliver_sale_amt) as deliver_sale_amt,
sum(dc.mini_app_sale_amt) as mini_app_sale_amt,
sum(dc.android_sale_amt) as android_sale_amt,
sum(dc.ios_sale_amt) as ios_sale_amt,
sum(dc.pcweb_sale_amt) as pcweb_sale_amt,
sum(dc.order_cnt) a