数据仓库,英文名称为Data Warehouse,可简写为DW或DWH。数据仓库,是为企业所有级别的决策制定过程,提供所有类型数据支持的战略集合。它是单个数据存储,出于分析性报告和决策支持目的而创建。 为需要业务智能的企业,提供指导业务流程改进、监视时间、成本、质量以及控制。
为什么要做数据分层?
清晰数据结构:每一个数据分层都有它的作用域和职责,在使用表的时候能更方便地定位和理解减少重复开发:规范数据分层,开发一些通用的中间层数据,能够减少极大的重复计算统一数据口径:通过数据分层,提供统一的数据出口,统一对外输出的数据口径复杂问题简单化:将一个复杂的任务分解成多个步骤来完成,每一层解决特定的问题数据分层设计
数据运营层:ODS(Operational Data Store)
功能: 数据仓库准备区为DWD层提供基础原始数据减少对业务系统影响 方式 离线或者准时接入的数据数据仓库层:DW(Data Warehouse) 数据仓库层是我们在做数据仓库时要核心设计的一层,在这里,从 ODS 层中获得的数据按照主题建立各种数据模型。
数据明细层:DWD(Data Warehouse Detail) 功能: 提供业务系统细节数据的长期沉淀为未来分析类需求的扩展提供历史数据支撑 方式 保持和ODS层粒度一致;指标事实与ODS基本保持一致。剔除异常数据拼接成宽表 数据中间层:DWM(Data WareHouse Middle) 功能: 提供常用维度的初步汇总数据提升公共指标的复用性 方式 对通用的核心指标做聚合,得出相应的统计指标 数据服务层:DWS(Data WareHouse Servce) 功能 集中维度,涵盖较多的业务内容 方式 在DWM的基础上再做二次聚合,保留更少的维度,计算更多的指标提供更多时间维度的数据数据应用层:APP(Application)
功能 对接数据分析需求,提供快速查询、支持 方式 面向业务、面向分析保持数据量小,快速查询、分析维表层:DIM(Dimension)
高基数维度数据:一般是用户资料表、商品资料表类似的资料表。数据量可能是千万级或者上亿级别。低基数维度数据:一般是配置表,比如枚举值对应的中文含义,或者日期维表。数据量可能是个位数或者几千几万。数据建设过程中,从表规范、编码规范来减低模型后续开发、维护成本。
表规范
表命名规范如下: (1) 表命名格式:[层次]_[主题]_[表内容]_[统计表规则]_[分区表规则]; (2) 临时表命名格式:[tmp]_[表内容]_[操作者]_[YYYYMMDD];表命名解释如下: (1) 层次:all_(ODS),dwd_(DWD),dwm_(DWM),dws_(DWS), [APP]_(例如apex_), dim_(DIM); (2) 表内容: 表名、视图名总长度不超过64字符;尽量详尽说明表具体内容。 (3) 分区表规则:*_dt (4) 统计表规则:日汇总ds,月汇总ms,日累计da,月累计ma。字段规范: (1) 命名规范 a) 必须使用小写字母,并采用下划线分割; b) 字段名禁止超过 32 个字符; c) 字段名必须见名知意。命名与业务、产品线等相关联; d) 字段名禁止使用 Maxcompute 保留字、Oracle 保留字。编码规范
程序代码:每层一个代码目录,用于存放对应层的模型开发工程。Maxcompute 代码: (1) 使用 left join 代替 in/not in; (2) join 时小表尽量放在左边 (3) 尽量使用静态分区,提升运行效率;例行补数建议使用动态分区简化代码; (4) 慎用笛卡尔积 join,卡历史数据建议使用日期维度表作笛卡尔积,以并行循环操作; (5) 尽量使用窗口函数、udf 简化 sql 逻辑,提升代码可读性; (6) join/group by/distinct 注意处理 NULL 值,尽量避免数据倾斜; (7) union 会去重, 不用去重时使用 union all; (8) 表查询如果是分区表, 加上分区限制。