这次还是聊聊数仓分层(新思路)

有同学问语兴,目前最新设计的数仓是几层都在做什么?

目前语兴对数仓分层采用ods Dwd dwm Dws ads(大宽表 小宽表)可以说5层也可以说6层。

ODS(接入层)

接入层,可拆解为ori 板块和ods板块,都可以叫ods,也可以分开起名,ori主要做json等消息存储,ods则是存放解析json成各类字段后的数据,如从mysql等数据库抽取的数据则字段与数据源保持一致,数据类型整型使用bigint string double/decimal等。

命名:ods_库名_表名_df/ods_topic_df。

DWD(明细层)

明细层,主要做数据清洗(test、异常等数据),转换(将code值转化成name,建议做一张手动code和name映射的维度表方便维护管理),关联(按照相同数据域进行关联组合),同时采用模型5要素(数据域、维度(可不做到dwd 不一定需要维度退化)、度量、颗粒度(买家id 卖家id)、事实)。Di/df需要考量你的数据量级,分区(可按照业务进行二级分区划分),以及数据本身形态(例如日志数据每天不一样的数据情况)。数据域:按照业务流程拆解,如没有业务流程可按照产品分类 业务类型分,例如招聘这个大业务面试(一级域)拆解成 投递、面试评价 面试流程 面试结果、背调、offer 这里有同学会想到为啥这里不退化维度,1同数据域维度重复2刷新维度代价高。

命名:dwd_一级数据域_二级数据域_xx_detail_df/di。

DWM(明细宽表层)

明细宽表层,通过业务流程起始id进行关联其他表,例如应聘表的应聘id关联面试明细、面试结果表,直到关联到最后业务背调,这里我们进行维度退化(就是事实表left join 维度表 把右表维度字段带入到dwm),把维度带入明细宽表中更方便维护,同时也可以给业务方提供明细宽表方便查数,包括后续做Dws ads都可以使用dwm表,数据域保持一致。

命名:dwm_一级域_xx_detail_df/di。

DWS(轻度汇总层)

轻度汇总层,首先统一指标口径先确定指标,其次按照周期(最近30 60 90天),颗粒度完成指标聚合。

目前语兴新的建模办法:dws 按照周期加颗粒度汇总,举例dws 交易域最近30天用户指标,where datediff (t-1,create time)<=30 group by user id就行,去做派生指标。

命名:Dws_一级域_二级域(可去掉)_聚合的颗粒度_xx_target_30d

ADS(应用层)

应用层,可分为应用大宽表和应用小宽表模式支持业务使用

大宽表:根据业务划分主题域(例如员工管理),更多是围绕业务分析视角去分析,大宽表则建议做成标签表,可以是不同维度作为颗粒度的标签表,也可以是用户标签表,再或者主题域与数据域再一致去做标签,举例子员工招聘标签表,以员工维度为主表对dwm、dws进行关联去做标签(dim_emp表 left join 其他dws、dwm表)这里一定要确定颗粒度, 可关联dwm dws形成标签表,所以大家会发现这里我直接用员工id关联员工id因为我dws 只group by一个颗粒度字段保持唯一且好用,同时大宽表可以为很多专项提供服务(例如不同看板)。

最后全部做成标签宽表,下游分析使用时候只需要在取数平台 或者可视化平台拉拽维度和标签就行,也可以用于人群圈选,1举2得。

小宽表:小宽表的意义更多在于单独去做某个专题,例如员工离职动因分析,leader分析等,很多标签都要复用大宽表,基于大宽表再去定制开发,所以大宽表要做的更通用一些。

命名:ads_一级主题域_二级主题域(可去掉)_颗粒度_xx_d。

#牛客创作赏金赛##数据人的面试交流地##数据分析##大数据##数据开发工程师#
全部评论

相关推荐

10-09 09:39
门头沟学院 C++
HHHHaos:这也太虚了,工资就一半是真的
点赞 评论 收藏
分享
4 11 评论
分享
牛客网
牛客企业服务