目录
数据仓库在企业是处于非常重要的位置;往前接收经由埋点而获取的用户行为日志、拉取商家(报社、博主等内容发布方)和用户交互的业务数据;往后输出的数据可以给领导层提供决策、可以给用户构建画像系统、可以判断用户喜好等。
ODS(原始数据层):
- 用来存储最原始的数据(不对原始数据进行任何操作)
- 业务数据每天保留一个全量快照
- 行为日志保留每天新增的日志
- 使用分区和数据压缩的方式
DWD(明细数据层):
- 基于原始数据层进行脱敏、ETL、炸裂
- 行为数据是对ODS层的数据进行分模块处理,保存每天的增量数据
- 业务数据可以对ODS最新分区做一个保存
- 业务数据还可以对一些表进行轻聚合
DWM(数据中间层):
- 基于数据明细层挑选业务线,生成事实表
- 粒度和数据明细层中选择的主事实表一致,但是只保留当天新增(订单事实)、新增及变化(用户事实)、全量快照(购物车事实)即可
DIM(维度层):
- 保存维度数据,主要是对业务事实的描述信息,例如何人、何时、何地
DWS(数据服务层):
- 基于DWD层的事实表和DIM层的维度表进行轻度汇总
- 一般存放所有主题对象当天的汇总行为(近1天)
DWT(数据主题层):
- 基于DWS层的轻度汇总表和DIM层的维度表进行累积汇总
- 一般存放的是所有主题对象的累积行为(近1天、近1周、近1月、近1年)
ADS(数据应用层):
- 最终结果层,以DWS层、DWT层和DIM层为来源表,根据不同业务进行数据聚集,最终输出报表和数据协助所需要的数据
- ODS层命名为ods_表名
- DIM层命名为dim_表名
- DWD层命名为dwd_表名
- DWM层命名为dwm_表名
- DWS层命名为dws_表名
- DWT层命名为dwt_表名
- ADS层命名为ads_表名
- 临时表命名为tmp_表名
- 数量类型为bigint
- 金额类型为decimal(16, 2),表示:16位有效数字,其中小数部分2位
- 字符串(名字,描述信息等)类型为string
- 主键外键类型为string
- 时间戳类型为bigint
- 分区的日期格式统一用bigint(不管dt分区【8位】还是ht分区【10位】都能满足)
- 不管哪一层,昨天的数据统一用昨天的日期,比如因为专场日,需要早晨7点才能跑数,那ods层dwd层数据分区都是用昨天的日期,同时ads层(报表和数据协助历史数据保存)也用昨天的日期;注意:dt才使用这样的规范,ht按当前小时即可
环境变量名 | 描述 | 华为云配置 |
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")} |
注:其他 离线数仓 相关文章链接由此进 -> 离线数仓文章汇总