1)数仓的分层原则
好的数仓分层并不是为了分层而分层,没有最好的只有更合适的,要考虑对下游及整个链路的影响
好的分层架构的要求
- 清晰的数据结构
- 数据血缘的追踪
- 减少重复的开发
- 数据关系的条理化
- 屏蔽对原始数据的影响
数据仓库的分层
ODS -> DW->DM->APP
ODS:数据源层 - Oprational Data Store
本层为数据源层,考虑到以后对数据源的追溯问题,不对业务数据进行处理,保持原有的数据,对一些数据的处理,比如去重、过滤空值等都放到DW层进行处理
DW:数据仓库层 - Data Warehouse
本层是数据仓库的核心层,对ODS的数据进行分主题域建模等
- DWD - Data WareHouse Detail
数据明细层:
- 保持和ODS的数据粒度,数据清理、整合、去重、规范化、脏数据状态定义不一致等
- **维度退化,将维度表退化至事实表中,减少事实表和维度表的关联**
- **将部分数据聚合,相同主题的数据整合到一张表中,提高数据的可用性**
- DWM - Data WareHouse Middle
数据中间层:
- 对核心维度进行轻度聚合,形成可复用的中间表的一些字段指标
- 形成的小的中间表可在DWS层中拼接成宽表
- 此层可根据具体业务省略,直接从DWD层-》DWS层
- DWS - Data WareHouse Service
数据服务层:
- 公共汇总层,进行轻粒度的汇总,粒度比DWM层粒度要粗一点
- 形成宽表数据,又叫数据集市,可以覆盖80%的业务场景
- 根据主题域的划分为宽表,此层字段会比较多,表会少一点
APP:数据应用层 - Application
提供数据给业务分析和数据产品使用
DM:维表层 - Dimension
如果维表过多,可以单独设计维表层
- 高基维度:一般为资料表,如果商品资料,用户资料表中,数据量较大(千万级,亿级)
- 低基维度:一般为配置表,千万级别,也有可能是个位数
2)主题域的划分原则
根据业务和业务过程划分(业务线)
业务: 业务模块,功能模块
业务过程:企业的活动事件,比如:下单 - 支付 - 退款等
按照数据域划分
指面向业务分析,将业务过程或者维度进行抽象的集合。其中,业务过 程可以概括为一个个不可拆分的行为事件,在业务过程下,可以定义指标,维度 是指度量的环境,如买家下单事件,买家是维度。为保障整个体系的生命力,数 据域是需要抽象提炼,并且长期维护和更新的,但不轻易变动。在划分数据域时, 既能涵盖当前所有的业务需求,又能在新业务进入时无影响地被包含进已有的数 据域中和扩展新的数据域
3)数据模型设计原则
- 高内聚低耦合:主题内部高内聚,主题之间低耦合
- 核心模型和扩展模型要分离:不能让扩展模型去影响核心模型
- 公共逻辑下沉及单一:像java的封装,不要让公共的逻辑暴露给应用层,抽取出来的公共层一定要单一
- 成本和性能平衡:适当的冗余可以增加查询性能,不可过度冗余和数据复制
- 数据回滚:处理逻辑不变,在不同时间多次运行数据结果确定不变