结合业务场景,阐述
1、维度建模以及事实表的基本及相关概念。
2、根据业务主题的总线矩阵图,梳理业务流程、指标以及对应的维度。
3、关于事实表的阐述。
4、企业层面的BI应用的框架以及组件,和实现所需的内容。
1、如何建立缓慢变化维表。
2、如何处理桥接表。
3、总结常用主题应用的维度建模知识。
4、kimball DW/BI设计以及实现方式。
5、总结在数仓建设中需要避免的常见错误。
1、选择业务过程
2、声明粒度
3、确定维度
4、确定事实
通过以上4个步骤,就可以画出总线矩阵图。
纵列标记过程、粒度以及事实。横排标记维度。
举个订单管理过程的总线矩阵行图的例子。
日期 | 客户 | 产品 | 代理销售 | 交易 | 仓库 | 运货商 | |
---|---|---|---|---|---|---|---|
报价 | × | × | × | × | × | ||
下订单 | × | × | × | × | × | ||
运输至客户 | × | × | × | × | × | × | × |
开具货运发票 | × | × | × | × | × | × | × |
接收付款 | × | × | × | ||||
客户退货 | × | × | × | × | × | × | × |
可加事实、半可加事实、不可加事实。
可加事实,就是指标正常求和之后,就是符合事实的总数。
半可加事实,就是表达事实当前状态的一个值。如温度、当前存款数量、当前库存水平等。
不可加事实,就是分母不同的百分比等。
事务事实表、周期快照事实表、累计快照事实表、无事务的事实表。
事务事实表又可以被分为单事务事实表和多事务事实表。多事务事实表一般是多个事情,维度一致。
周期快照事实表,就是每个一段时间或者一个时间,记录一次当前事务的状态。
累计快照事实表,就是一行数据记录一个事务的各个关键事务节点的时间以及对应的指标。一般记录流水线事件以及表中会存在多个时间点。
无事实的事实表,不记录指标。会记录某个状态所有可能发生的事件。然后事件发生了记为1,不发生记为0,于是就将不发生的事实记录了下来。
1)静止维度:地址、姓名、日期、客户层次、客户行为
2)维度内容变化:通过类型2的缓慢变化维度来处理
3)复杂的客户行为以及客户关系:通过桥接表来处理。
4)用户点击相关维度:网页、事件、会话、推荐维度。
1、企业层面的BI应用的框架以及组件,和实现所需的内容。
2、RDBMS与hadoop的不同。
主要讲了阿里的数据采集、数据整理、数据应用以及数据价值管理的全链路及平台的搭建与使用过程。
主要是日志采集,分为浏览器页面采集以及APP客户端数据采集。
APP又分为两种,纯APP内容以及有H5页面嵌入的APP。
H5基于浏览器页面的方式进行采集。纯APP基于SDK方式进行采集。
两种采集方式会互相跳转。
后续附上数据处理全链路图。
采集好的数据,分为离线和实时,数据流转处理器包括flume,kafka,clickhouse,同步到mysql等库。
然后mysql库的数据通过同步系统流转到其他库。
离线数主要基于平台开发。平台具有数据同步、脚本研发、测试、运维、数据管理、调度等多种功能。
此处注意maxcompute体系架构。
实时技术注意书中提到的流式技术框架图。数据采集kafka,流式数据计算flink,数据存储、数据服务以及流式数据模型(事实表、维表的关联)以及高峰时段的测试。
为了使得采集以及开发到的数据更高效地被整理和使用,建立了统一的数据服务层,OneService。这个平台需要关注它的组件的使用方式和场景。就是用户不需要关注数据是怎么采集到的,只需要关注可以获取的表字段以及字段含义。因为它对用户展示的是一张逻辑表。保证业务可以高效地应用数据。
提高数据地纯度,挖掘数据内部信息。阿里创建数据挖掘算法平台以及挖掘数据中台。优点是通过简易的操作将常见的算法应用于自己的业务中,并且管理好特征集和结果集,沉淀代表性场景的方法论以及实操模板。
选择以Kimball的维度建模为核心理念的模型方法论,构建阿里的公共层模型数据构架体系。
主要 解决数据存储和计算的共享问题。指导方法是’OneData’,包括一致性的指标定义体系、模型设计方法体系以及配套工具。
大数据建设的核心方法论是:从业务架构设计到模型设计,从数据研发到数据服务,做到数据可管理、可追溯、可规避重复建设。
注意图9.1体系架构图
包括名词术语解释,指标体系组成基本原则,通过平台对命名进行限制,避免命名重复或者歧义,保证指标的一致性。
操作细节以及其他规则说明。
遵循维度建模理论,将表数据模型分为3层,操作数据层,公共维度模型层以及应用数据层。其中公共数据层包括明细数据层以及汇总数据层。
注意:模型层次图
操作数据层数据增量或者全量同步,数据清洗。
在公共维度模型层,采用明细宽表,将维度退化至事实表中,减少数据扫描,且公共指标统一加工,建立逻辑汇总宽表,降低数据计算口径不统一的风险。
应用数据:个性化指标、复杂指标、大宽表集市,行转列等。
注意:模型架构图
高内聚低耦合,核心模型支持常用的核心业务,扩展模型含有个性化字段。公共逻辑下沉以及单一,成本与性能的平衡。数据可回滚,多次运行结果不变。数据一致性。命名清晰以及可理解。
注意图9.11实施工作流
数据调研,业务和需求调研。
架构设计:数据域划分、构建总线矩阵。
规范定义
模型设计
总结
维度是事件发生的环境,维度的作用一般是查询约束、分类汇总以及排序。
维度使用主键约束其唯一性,代理键和自然键。自然键具有业务含义,比如Id。保证维度的唯一性。
主维表以及相关维表的关联关系。
关于维度属性的几点提示:
(1) 尽可能生成丰富的维度属性
(2) 尽可能多地给出包括一些富有意义的文字性描述。
(3) 区分数值型属性和事实。
(4) 尽量沉淀出通用的维度属性。
维度的层次结构
上卷和下钻。
在实际使用时,用维表的空间来换取简明性和查询性能。
具有部分相同的维度的属性可以进行交叉探查。
命名规范统一。
字段类型统一。
公共代码及代码值统一。
业务含义相同的表的统一,垂直整合和水平整合,增加行和增加列的整合方式。
拆分依据,维度不同分类的属性差异情况,如公共属性以及特殊子属性。
根据业务的关联程度进行拆分。
根据来源表的产出时间,使用频率进行拆分。
建议解析数据库binlog日志,采用数据库变更日志的方式,获取数据的方式是通过增量merge全量的方式获取最新的全量数据。使用增量日志删除标志,作为前台数据归档的标志。
(1)重写维度值,不保留历史数据,商品不换自然键。
(2)插入新的维度行,保留历史数据,商品换新的自然键。
(3)添加维度列,旧类目,新类目。商品不换自然键。
将快照维表改为历史拉链存储的底表。然后将底表做成全量存储,不影响下游用户的使用。
(1)类目扁平化,类目回填。对于非平衡层次的结构,可以通过预留级别的方式来解决,但扩展性较差。
(2)桥接表,容易产生多对多的问题,不建议使用。
行为维度可以分为,另一个维度的过去行为、快照事实表行为、分组事实行为维度、复杂逻辑事实行为维度。
处理方式:冗余至现有维表、单独加工维表。
原则:避免维度过快增长、避免耦合度过高。
(1)降低事实表粒度
(2)采用多字段、多关联2-3次维表
(3)采用桥接表。桥接表同一个key,对应多个id。
(1)k-v存储
(2)多值属性,多次关联维度表。
(3)维度主键发生变化,数据记录多。
以订单Id为主键,生成杂项维度或者直接退化至事实表中。
事实表的基础,事实表获取业务过程的度量来表达业务过程,包含了引用维度和与业务相关的度量。事实表中一条记录所表达的业务细节程度被称为粒度。
事实一般分为可加的,半可加的(在某些维度可加)和不可加三种类型。
维度属性也可以存储到事实表中,这种存储到事实表中的维度列被称为退化维度。
事实表有三种类型,事务事实表,周期快照事实表,累计快照事实表。
原则1:尽可能包含所有与业务过程相关的事实。
原则2:只选择与业务过程相关的事实
原则3:分解不可加性事实为可加的组件
原则4:在选择维度和事实之前必须先声明粒度
原则5:在同一个事实表中不能有多种不同粒度的事实
原则6:事实的单位要保持一致
原则7:对事实的null要处理,建议用0填充
原则8:使用退化维度提高事实表的易用性。
第一步:选择业务过程及确定事实表类型
第二步:声明粒度
第三步:确定维度
第四步:确定事实
第五步:冗余维度(退化维度),方便上卷
事实表设计方法如3.3.1.3所示。单事务事实表和多事务事实表的比较。
父子事实可以将父订单的总额计入事务表,同时通过分摊父订单的金额将所有业务过程的度量全部代入淘宝交易的事务事实表中。将父子事实同时冗余到事务表中。
事实完整性、事实一致性、事实可加性。
快照事实表在确定的间隔内对实体的度量进行抽样,这样就可以很容易地研究实体的度量值,而不需要聚集长期的事务历史。可以通过事务事实表进行汇总
用快照采样状态。(我写的历年制理赔表就是周期快照表)
快照粒度,采用周期以及在什么维度下将被采样。
密度与稀疏性,即使状态不发生变更,也会被记录一行数据。因此周期性快照表是稠密的。
半可加性,可以计算周期内平均值,以及在除了时间之外的维度具有可加性。
事务与快照成对设计。
附加事实,一般会附加上一个采样周期的状态度量。
周期与日期度量,历史至今,自然年至今等度量,分别做表。
累积快照事实表用于研究事物之间间隔的需求。设计方法如3.3.1.3所示。
数据不断更新,多业务日期。
1、非线性过程
(1)业务过程统一
(2)针对业务关键里程碑构建全面的流程。
(3)循环流程的处理。
2、多源过程
主要考虑事实表的粒度问题。
3、业务过程取舍
选取关键的里程碑。
1、全量表形式,存储了大量不会更新的历史数据。
2、全量表变化形式,根据业务生命周期,全量存储近200天数据,200天之前的数据归档。
3、以实体业务的结束时间分区。每天存放当天结束的数据,设计一个时间非常大的分区,存放截至当前未结束的数据。
P227
为什么大部分表都有Update_time,按道理来说事务事实表和周期快照表都不应该有Update_time了。
不包含事实或度量的事实表称为‘无事实的事实表’
1、 记录事件的发生,发生了记为1。
2、 条件、范围或者资格类的、记录维度多对多之间的关系。
一致性、避免单一表设计、聚集粒度关心要查询的维度。
1、确定聚集维度
2、确定一致性上钻。
3、确定聚集事实。
1、基本原则
数据共用性、不跨数据域、区分统计周期。
3、 交易汇总表设计
聚集的粒度越细,记录的条数越多,就会越接近原始明细粒度的模型。
1、聚集是不跨越事实的
如果要跨越事实,先融合事实表,然后再生成聚集表。
2、聚集带来的问题
增加ETL维护的难度。一些维度的变化,会需要重新聚集数据。
元数据打通了源数据、数据仓库、数据应用,记录了数据从产生至消费的全过程。
元数据主要记录数据仓库中模型的定义、各层级间的映射关系、监控数据仓库的数据状态及ETL的任务运行状态。
元数据包括技术元数据以及业务元数据。
技术元数据包括;表的建表信息,作业运行信息,数据同步、计算任务、任务调度等信息、以及数据质量和运维相关的元数据。
业务元数据包括,OneData元数据,如维度及属性、业务过程、指标等的规范化定义,用于更好地管理和使用数据。
数据应用元数据,如数据报表、数据产品等地配置和运行元数据。就是数据报表用了哪些表以及报表运行时长,查看报表地Pv,uv。
统一元数据建设体系思路如图12.1所示。
核心思路是为纷繁复杂的数据建立一个脉络清晰的血缘图谱。为元数据‘画像’的任务。图12.2
前台实现找数据的需求,后台实现管理数据的需求。不需要人工维护。
主要通过统一的应用日志打点SDK来解决问题,可以做到配置化,应用无痕化。
通过下游所使用的元数据来指导并参考数据建模。
数据同步效率提升。图12.3
目标:减低计算资源的消耗,提高任务执行的性能,提升任务产出的时间。
任务执行历史+集群状态信息+优化规则
根据收集的信息选择来计算每种执行方式的代价,进而选择最优的执行方式。
Key作为分区,存放对应的Value,可能会出现部分key存储的Value过多。
读入文件分布不均匀,某个键对应的值很多,大表的数据打散。
(1)MapJOIN
某路输入较小处理,加上特殊字符之后,小表放在主表。
(2)join因为空值长尾
将空值处理成随机数
(3)Join因为热点值长尾
热点值与非热点值分开处理,然后再Union all
重视count distinct的问题
目标:有效降低存储资源消耗、节约存储成本。
数据存储治理流程图 14.2
表14.3生命周期管理矩阵
数据使用计费公平合理。计算、存储、扫描付费。
目标:保证数据仓库的数据质量
注重,完整性、准确性、一致性和及时性。
图15.2 数据质量建设方法
目的:让数据最大化的产生价值
介绍示例:数据产品平台
对外数据产品
图16.1生意参谋产品理念图
图16.2 功能架构
技术能力:看我情,看行情、看敌情。
基于各个业务打通数据。
对内数据产品
功能:数据获取、数据分析、数据应用的数据产品平台。
图16.3 阿里数据平台整体构架图
不仅可以做报表还可以做专题分析,赋能业务数据化运营。