数据集市
深刻理解数据集市概念
数据集市,存在于数仓之中,可以理解为是数仓的一个分层,市面上数仓分层繁多,大致为 ODS层镜像层,DWD明细层,DWS宽表层,DIM维度层,ADS指标体系层,APP应用层,DM数据集市层。
除去ODS层,APP、ADS层,中间的DWD、DWS统称为中间层,在数仓中,有个规定,就是中间层不可跨域,而DM层,是凌驾于ADS层,更贴近应用的层级,而这一层,是可以跨域的,并且可以理解成,是可跨域的宽表层。
该层主要是加工多维度冗余的宽表,解决什么问题呢?解决复杂的查询问题,多角度分析的汇总表。
面向用户、面向多个不同场景使用,以方便使用为准,将业务相近,或者相关的,粒度相同的APP层应用表,或者没有APP,但是频繁查询的数据,整合到一张宽表中,方便用户能够快速查询,不需要再进行多次JOIN操作,减少MR底层Shuffle的一个过程。结合数仓中,高内聚,低耦合的思想。宽表,主要考虑高内聚,放松低耦合的要求。深刻理解:数据集市,是比ADS、APP层,更加贴合应用的一个层面。
具体表结构 CASE :
字段英文名 | 字段中文名 |
---|---|
pro_id | 省份ID |
pro_name | 省份名称 |
gop_name | 后端汇总品类 |
lev1_goods_id | 后端一级类目ID |
lev2_goods_id | 后端二级类目ID |
lev3_goods_id | 后端三级类目ID |
lev4_goods_id | 后端四级类目ID |
lev1_goods_name | 后端一级类目name |
lev2_goods_name | 后端二级类目name |
lev3_goods_name | 后端三级类目name |
lev4_goods_name | 后端四级类目name |
sale_cnt | 中台订单销量 |
gmv | 中台GMV |
all_sale_cnt | 对角巷销量 |
all_sale_gmv | 对角巷GMV |
mr_sale_cnt | 仓销量 |
mr_sale_gmv | 仓GMV |
CASE 解析:
维度不做解释,其中指标可以看出来自不同的域,比如订单来自交易域,对角巷来自交易域,而仓,却来自仓储域,那么针对这种跨域的指标,合成的表,我们就放到数据集市中。可以深刻理解为,数据集市,更加贴合应用。
伪代码实现
-- 代码均为伪代码
-- set mapreduce.input.fileinputformat.split.maxsize = 10485760 --10M/TASK 读取
insert overwrite table dm_jc_di partition(dt = '当前时间')
select
nvl(pro_id,-999999) pro_id
,nvl(city_id,-999999) city_id
,nvl(gop_name,-999999) gop_name
,nvl(lev1_goods_id,-999999) lev1_goods_id
,nvl(lev2_goods_id,-999999) lev2_goods_id
,nvl(lev3_goods_id,-999999) lev3_goods_id
,nvl(lev4_goods_id,-999999) lev4_goods_id
,nvl(lev1_goods_name,-999999) lev1_goods_name
,nvl(lev2_goods_name,-999999) lev2_goods_name
,nvl(lev3_goods_name,-999999) lev3_goods_name
,nvl(lev4_goods_name,-999999) lev4_goods_name
,sum(zt_sale_cnt) zt_sale_cnt
,sum(zt_price_amt) zt_price_amt
,sum(dj_sale_cnt) dj_sale_cnt
,sum(dj_price_amt) dj_price_amt
,sum(c_sale_