离线数仓(2):数据仓库相关架构和规范
数据仓库在企业是处于非常重要的位置;往前接收经由埋点而获取的用户行为日志、拉取商家(报社、博主等内容发布方)和用户交互的业务数据;往后输出的数据可以给领导层提供决策、可以给用户构建画像系统、可以判断用户喜好等。其他 离线数仓 相关文章链接由此进 ->........................
目录
0. 相关文章链接
1. 数据仓库在整个应用中的位置

数据仓库在企业是处于非常重要的位置;往前接收经由埋点而获取的用户行为日志、拉取商家(报社、博主等内容发布方)和用户交互的业务数据;往后输出的数据可以给领导层提供决策、可以给用户构建画像系统、可以判断用户喜好等。
2. 此次重构的数据仓库具体分层架构

ODS(原始数据层):
- 用来存储最原始的数据(不对原始数据进行任何操作)
- 业务数据每天保留一个全量快照
- 行为日志保留每天新增的日志
- 使用分区和数据压缩的方式
DWD(明细数据层):
- 基于原始数据层进行脱敏、ETL、炸裂
- 行为数据是对ODS层的数据进行分模块处理,保存每天的增量数据
- 业务数据可以对ODS最新分区做一个保存
- 业务数据还可以对一些表进行轻聚合
DWM(数据中间层):
- 基于数据明细层挑选业务线,生成事实表
- 粒度和数据明细层中选择的主事实表一致,但是只保留当天新增(订单事实)、新增及变化(用户事实)、全量快照(购物车事实)即可
DIM(维度层):
- 保存维度数据,主要是对业务事实的描述信息,例如何人、何时、何地
DWS(数据服务层):
- 基于DWD层的事实表和DIM层的维度表进行轻度汇总
- 一般存放所有主题对象当天的汇总行为(近1天)
DWT(数据主题层):
- 基于DWS层的轻度汇总表和DIM层的维度表进行累积汇总
- 一般存放的是所有主题对象的累积行为(近1天、近1周、近1月、近1年)
ADS(数据应用层):
- 最终结果层,以DWS层、DWT层和DIM层为来源表,根据不同业务进行数据聚集,最终输出报表和数据协助所需要的数据
3. 数据仓库为什么要分层
- 把复杂问题简单化: 将复杂的任务分解成多层来完成,每一层只处理简单的任务,方便定位问题。
- 减少重复开发:规范数据分层,通过的中间层数据,能够减少极大的重复计算,增加一次计算结果的复用性。
- 隔离原始数据:不论是数据的异常还是数据的敏感性,使真实数据与统计数据解耦开。
4. 此次重构的数据仓库命名规范
4.1. 表命名
ODS层命名为ods_表名
DIM层命名为dim_表名
DWD层命名为dwd_表名
DWM层命名为dwm_表名
DWS层命名为dws_表名
DWT层命名为dwt_表名
ADS层命名为ads_表名
临时表命名为tmp_表名
4.2. 表字段类型
数量类型为bigint
金额类型为decimal(16, 2),表示:16位有效数字,其中小数部分2位
字符串(名字,描述信息等)类型为string
主键外键类型为string
时间戳类型为bigint
4.3. 日期划分
- 分区的日期格式统一用bigint(不管dt分区【8位】还是ht分区【10位】都能满足)
- 不管哪一层,昨天的数据统一用昨天的日期,比如因为专场日,需要早晨7点才能跑数,那ods层dwd层数据分区都是用昨天的日期,同时ads层(报表和数据协助历史数据保存)也用昨天的日期;注意:dt才使用这样的规范,ht按当前小时即可
4.4. 环境变量规范
|
环境变量名 |
描述 |
华为云配置 |
|
today |
今天(8位年月日,yyyyMMdd) |
#{DateUtil.format(Job.planTime,"yyyyMMdd")} |
|
one_day_ago |
昨天(8位年月日,yyyyMMdd) |
#{DateUtil.format(DateUtil.addDays(Job.planTime,-1),"yyyyMMdd")} |
|
two_day_ago |
前天(8位年月日,yyyyMMdd) |
#{DateUtil.format(DateUtil.addDays(Job.planTime,-2),"yyyyMMdd")} |
|
three_day_ago |
大前天(8位年月日,yyyyMMdd) |
#{DateUtil.format(DateUtil.addDays(Job.planTime,-3),"yyyyMMdd")} |
|
today_time |
今天(14位年月日时分秒,yyyyMMddHHmmss) |
#{DateUtil.format(Job.planTime,"yyyyMMddHHmmss")} |
|
one_day_ago_time |
昨天(14位年月日时分秒,yyyyMMddHHmmss) |
#{DateUtil.format(DateUtil.addDays(Job.planTime,-1),"yyyyMMddHHmmss")} |
|
two_day_ago_time |
前天(14位年月日时分秒,yyyyMMddHHmmss) |
#{DateUtil.format(DateUtil.addDays(Job.planTime,-2),"yyyyMMddHHmmss")} |
|
three_day_ago_time |
大前天(14位年月日时分秒,yyyyMMddHHmmss) |
#{DateUtil.format(DateUtil.addDays(Job.planTime,-3),"yyyyMMddHHmmss")} |
注:其他 离线数仓 相关文章链接由此进 -> 离线数仓文章汇总
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)