收集了各种公开非公开的资料,恶补一下。
Bill Inmon 提倡范式建模(ER 建模),站在企业角度自上而下进行数据模型构建。Ralph Kimball 提倡的维度建模方法,从业务需求出发自下而上构建数据模型。
业务全流程宽表
采用基于业务生产总线的设计方法,提炼各个节点发生的事实信息:
总线架构可以在模型中不断添加各个节点的核心信息,随着业务流程的推进,数据会出现拆分、汇聚。
数据拆分问题的解决方法:
下单节点数据是订单粒度,在支付节点可能发生数据拆分(譬如分两次支付,产生两个支付事实)解决方法是输出不同粒度的模型,既存在订单粒度的模型,也存在支付粒度的模型。
整合旅游、交通、酒店等各业务线与各业务节点信息的马蜂窝全流程订单模型:
业务流程:下单、支付、核账、履约、完成、结算。
维度:绿色的是通用的维度。
事实:最上方的各种流水是引用了维度的事实。
应用:最右侧是该模型在不同业务领域的应用。
整合各节点信息后,根据实际需要进一步扩展常用的分析维度,通过冗余维度信息,减少关联分析维度的资源消耗。
有赞数据仓库实践之路,主题域的划分经验:
在 Kimball 早期的理论中还会单独提及并解释落地层 (Staging Area) 的作用,在后期就只提到展现层,而将落地层弱化成为整个 ETL 的一部分。
1. 数仓层内的划分更应该符合使用者的思维习惯。 DW 内的分层没有最正确的,只有最适合你的
2. 承载一致性维度 (conformed dimension) 的维度层是独立于事实并贯穿于数仓层全局的
3. 提供了两种类型的事实表:明细表和聚合表,在我们的数仓层里,还会有明细层和聚合层
4. 明细层保留的关键字是 DWS (Data Warehouse Service),聚合层保留的关键字是 DWA (Date Warehouse Aggregation)
没有按照 Kimball 的理论,显性地将事实表按照事务 (Transaction)、周期快照 (Periodic Snapshot) 和累积快照 (Accumulating Snapshot) 三种类型来划分。尽管这三种类型普遍存在于我们的数据仓库内,但由于用户并不容易理解三种事实表类型的划分方式,因此按照明细表和聚合表的方式分层,更容易让用户找到需要的表
。
数仓系统的架构,通常采用分层的设计。
大数据环境下的数据仓库是指对全局数据(包含时间和空间:历史的以及所有业务部门的)的存储及使用的一整套方法论。
分为 3 层:ODS 落地层、DW 数据仓库层、DM 数据集市层。
ODS 层建设经验:
DW 数仓层建设经验:
DM 数据集市层:
提供了两种类型的事实表:明细表和聚合表,在我们的数仓层里,还会有明细层和聚合层。在我们生产明细表和聚合表的时候,不可避免地会产生许多中间结果。所有这些中间结果并不承担对外提供服务的职责——它们对数据仓库的使用者是不可见的。我们为此单独设计了一个临时层来存放数仓层加工过程中可能产生的各种结果。
命名规范:
整体架构与面向人群:
数仓内部分层设计:
近源数据层:导入业务层的数据
中间层:合并业务数据
宽表用途:
1. 统一数据口径
计算宽表的时候会根据业务需求生成很多冗余字段, 比如对于疑似刷单交易, 很多业务如果都实现一遍的话, 势必会导致口径问题, 在设计订单宽表的时候我们根据风控模型加入一个字段是否为空壳交易. 这样在统计时候各方的口径都会一致. 同样脏数据问题也是通过这种方式解决.
2. 多表 join 问题
订单宽表一定程度上聚合常用的字段, 满足 80% 的数据分析需求. 加上合理的分区设计, 基本上查询是非常快速的.
3. 没有为所有近源数据表都封装中间层
购物车信息我们就没有完全封装, 因为他们的分析不常用.
订单宽表的设计需要做一个折中. 一方面设计完备的数据仓库是不现实的, 另一方面订单宽表的前提是足够常用, 对于不常用的数据我们的数据平台是支持直接操作的. 这符合互联网设计产品的一般思路.
基础指标层:
在宽表的基础上提取出各种指标。
马蜂窝数据中台起步建设:数仓的架构、模型与应用 的分层设计方案:
业务数据层:STG(数据缓冲区)、ODS(操作数据层)
STG:缓存来自 DB 抽取、消息、日志解析落地的临时数据,结构与业务系统保持一致;负责对垃圾数据、不规范数据进行清洗转换;只为 ODS 层服务。
ODS:业务明细数据保留区,负责保留数据接入时点后历史变更数据,数据原则上全量保留
公共数据层:DWD(明细数据层)、DWS(汇总数据层)、DIM(公共维度层)
DWD:整合后的业务过程明细数据 DWS:按主题对共性维度指标数据进行轻度、高度聚合 DIM:对维度进行标准化定义,维度信息共享
应用数据层:
DWA:面向各产品线、业务线的数据加工。
层次设计:
*
有赞的分析工具层次:
3C类目
下的维权订单数
的历史趋势:
3~7月份
,不同地区
、不同支付方式
的订单数:
根据销量和维权数维度筛选出A(优质)/B(精品)/C(劣质)类商品,在 A 类中继续根据其它属性筛选。
GMV报表、店铺报表、每周订单数等
数据仓库充当业务数据层,以数据仓库为中心的架构:
有赞:
血缘:
有赞的数据地图:
数据知识:
有赞的数据字典