1.数据仓库分层模型设计
数据平台将数据分为操作数据层(ODS)、公共维度模型层(CDM)(其中公共维度模型层包括明细数据层(DWD)和汇总数据层(DWS))、应用数据层(ADS)
分层设计的好处:
对数据进行分层的一个主要原因就是希望在管理数据的时候,能对数据有一个更加清晰的掌控,详细来讲,主要有下面几个原因:
- 清晰数据结构:每一个数据分层都有它的作用域,这样我们在使用表的时候能更方便地定位和理解。
- 数据血缘追踪:简单来讲可以这样理解,我们最终给业务呈现的是一张能直接使用的张业务表,但是它的来源有很多,如果有一张来源表出问题了,我们希望能够快速准确地定位到问题,并清楚它的危害范围。
- 减少重复开发:规范数据分层,开发一些通用的中间层数据,能够减少极大的重复计算。
- 把复杂问题简单化:将一个复杂的任务分解成多个步骤来完成,每一层只处理单一的步骤,比较简单和容易理解。而且便于维护数据的准确性,当数据出现问题之后,可以不用修复所有的数据,只需要从有问题的步骤开始修复。
- 屏蔽原始数据的异常:屏蔽业务的影响,不必改一次业务就需要重新接入数据。
下面讲解每个分层作用:
### 1.1 ODS层
把来源于其他系统的数据几乎无处理地存放在数据仓库中。主要功能:
- 数据同步:结构化数据增量或全量同步到数据计算平台;
- 结构化:非结构化(日志)结构化处理并存储到数据计算平台;
- 累积历史、清洗:根据数据业务需求及稽核和审计要求保存历史数据、数据清洗;
### 1.2 CDM层
存放明细事实数据、维表数据及公共指标汇总数据。
CDM层又细分为DWD层和DWS层,分别是明细宽表层和公共汇总数据层,采取维度模型方法基础,更多采用一些维度退化手法,减少事实表和维度表的关联,容易维度到事实表强化明细事实表的易用性;同时在汇总数据层,加强指标的维度退化,采取更多宽表化的手段构建公共指标数据层,提升公共指标的复用性,减少重复的加工。
- 组合相关和相似数据:采用明细宽表,复用关联计算,减少数据扫描。
- 公共指标统一加工:基于统一的体系构建命名规范、口径一致和算法统一的统计指标;建立逻辑汇总宽表。
- 建立一致性维度:建立一致的数据分析维表,降低数据计算口径不统一的风险
### 1.3 ADS层
存放数据产品个性化的统计指标数据,根据CDM层和ODS层加工生成。
- 个性化指标加工:不公用性、复杂性(指数型、比值型、排名型等)
- 基于应用的数据组装:大宽表集市、横表转纵表、趋势指标串
## 2 数据规范定义设计
规范定义是指以维度建模作为理论基础,构建总线矩阵,划分和定义数据域、业务过程、维度、度量/原子指标、修饰类型、修饰词、时间周期、衍生指标等。一般指标组成体系可以划分为:原子指标、衍生指标、修饰类型、修饰词、时间周期
例如:*支付订单金额+最近7天+门店POS销售=最近7天门店的成交*
### 2.1 表命名规范
#### 表命名规范:
ODS:ods[业务库名]{业务库原始表名}[_delta]
示例:
- 记录用户详细信息:ods_s_users_delta。
- 记录新增的商品成交订单信息:ods_s_biz_order_delta。
- 记录新增的物流订单信息:ods_s_logistics_order_delta。
- 记录新增的支付订单信息:ods_s_pay_order_delta。
外表映射命名:
ods[业务库名]{业务库原始表名}[_delta_mapping]
示例:
- 记录新增的支付订单信息:ods_s_pay_order_delta_mapping。
DWD:dwd{主题缩写}{业务过程缩写}[自定义标签缩写]{单分区增量全量标识}
示例:
- 交易商品信息事实表:dwd_asale_trd_itm_di。
- 交易会员信息事实表:ods_asale_trd_mbr_di。
- 交易订单信息事实表:dwd_asale_trd_ord_di
DWS:dws{数据域缩写}[自定义标签缩写]_{刷新周期标识}
示例:
- dws_asale_trd_byr_subpay_1d(买家粒度交易分阶段付款一日汇总事实表)
- dws_asale_trd_byr_subpay_td(买家粒度分阶段付款截至当日汇总表)
- dws_asale_trd_byr_cod_nd(买家粒度货到付款交易汇总事实表)
- dws_asale_itm_slr_td(卖家粒度商品截至当日存量汇总表)
- dws_asale_itm_slr_hh(卖家粒度商品小时汇总表)—维度为小时
- dws_asale_itm_slr_mm(卖家粒度商品分钟汇总表)—维度为分钟
DIM:dim_{维度定义}
示例:
- 公共区域维表dim_pub_area
- 销售板块的商品全量表dim_asale_item
#### 通用规范
- 表名、字段名采用一个下划线分隔词根(示例:salebilltype->sale_bill_ype)。
- 每部分使用小写英文单词,属于通用字段的必须满足通用字段信息的定义。
- 表名、字段名需以字母为开头。
- 表名、字段名最长不超过64个英文字符。
- 优先使用词根中已有关键字(数仓标准配置中的词根管理),定期Review新增命名的不合理性。
- 在表名自定义部分禁止采用非标准的缩写
### 2.2 在Doris数仓中外表映射原则
- 直接使用业务库外表映射的表类型应该是频繁修改的维度表数据
- 数据量在十万级别的,大于这个级别的数据不允许采用外表映射使用,应该将该表通过Mysql binlog方式将数据接入过来,采用UNIQUE KEY模型,允许数据修改,
- 公共维度表外表映射表应归到DIM层,公共维度层
## 3 数据模型设计
维度建模是专门用于分析型数据库、数据仓库、数据集市建模的方法,维度建模以分析决策的需求出发构建模型,构建的数据模型为分析需求服务,因此它重点解决用户如何更快速完成分析需求,同时还有较好的大规模复杂查询的响应性能。
### 3.1 维度表
表示对分析主题所属类型的描述。比如”昨天早上张三在淘宝花费200元购买了一个皮包”。那么以购买为主题进行分析,可从这段信息中提取三个维度:时间维度(昨天早上),地点维度(淘宝), 商品维度(皮包)。通常来说维度表信息比较固定,且数据量小。
### 3.2 事实表
表示对分析主题的度量。事实表包含了与各维度表相关联的外码,并通过JOIN方式与维度表关联。事实表的度量通常是数值类型,且记录数会不断增加,表规模迅速增长。
维度建模常见的由星型模型、雪花模型和星座模型三种,数据平台设计一般采用星型模型
## 4 数据流向
稳定业务按照标准的数据流向进行开发,即ODS–>DWD–>DWS–>ADS。非稳定业务或探索性需求,可以遵循ODS->DWD->ADS或者ODS->DWD->DWT->ADS两个模型数据流。在保障了数据链路的合理性之后,又在此基础上确认了模型分层引用原则:
- 正常流向:ODS>DWD->DWT->DWS->ADS,当出现ODS >DWD->DWS->ADS这种关系时,说明主题域未覆盖全。应将DWD数据落到DWT中,对于使用频度非常低的表允许DWD->DWS。
- 尽量避免出现DWS宽表中使用DWD又使用(该DWD所归属主题域)DWT的表。
- 同一主题域内对于DWT生成DWT的表,原则上要尽量避免,否则会影响ETL的效率。
- DWT、DWS和ADS中禁止直接使用ODS的表, ODS的表只能被DWD引用。
- 禁止出现反向依赖,例如DWT的表依赖DWS的表