Hive学习笔记(5)——数仓建模
维度建模
事实表和维度表
- 事实表:业务过程中所有度量在维度建模中都是存储在事实表中的。按照粒度的角色划分,可以分为:
- 事务事实表:用于承载事务数据,粒度比较低;
- 周期快照事实表:粒度比较粗事务事实表的定期快照;
- 累计快照事实表:存储事务数据的快照信息。
- 维度表:包含事实表记录的业务过程度量的上下文和环境,如When、Where、What、Who、Why、How及一些描述字段和标签字段。
- 维度属性是查询约束条件(
WHERE
查询条件)、分组(GROUP BY
分组条件)与报表标签生成的基本来源。
星型架构、雪花架构、星座架构
- 星形架构:所有维度表直接连接到事实表,称为星形架构,其数据存储存在冗余。
- 雪花架构:一个或多个维度表通过其他维度表连接到事实表,称为雪花架构,去除了数据冗余,节省了部分存储,但使用上比较复杂,实际上较少使用。
- 星座架构:基于星型架构的扩展,多张事实表共享维度表。
- 大多数情况下使用星形架构,只有在必须使用桥接表的情况下必须使用雪花架构。
数据模型建设的意义
- 进行全面的业务梳理,改进业务流程;
- 建立全方位的数据视角,消灭信息孤岛和数据差异;
- 解决业务的变动和数据仓库的灵活性;
- 帮助数据仓库系统本身的建设。
Kimball维度建模过程
- 选择业务过程:业务过程是业务执行的活动,与之相关的维度描述业务过程事件关联的描述性环境,如竞价、展现、点击。
- 定义粒度:粒度是事实表度量的细节级别,如客户单次点击搜索。
- 确定维度:维度表示承担每个度量环境中所有可能的单值描述符,如5W1H。
- 确定事实:不同粒度的事实必须放在不同的事实表中;查询操作主要是基于事实表展开计算和聚合。
维度一致性
- 如果两个维度有关系,要么就是完全一样的,要么就是一个维度在数学意义上是另一个维度的子集。
- 必须保证维度一致性,避免孤立数据集市的出现。
- 非完全独立的维度应该合并为一个维度,将同一层次的元素标示为事实表中的不同维度会增加查询和存储负担。
维度建模缺点
- 维度建模之前需要大量的数据预处理。
- 业务发生变化时,往往需要重新整理维度数据。
- 维度建模主要适用于数据集市层,在数据仓库的底层,不能保证数据来源的一致性和准确性。
Hadoop数据仓库架构设计
数据仓库分层
对数据仓库分层的主要原因:
- 在管理数据时,对数据有更清晰的把控;
- 明确数据来源,快速精准定位问题;
- 减少重复开发;
- 将复杂的任务分解成多个简单的任务完成;
- 屏蔽原始数据的异常。
数据落地层ODS
对源数据表原封不动地存储一份,是后续数据仓库层加工数据的来源。
数据仓库层DW
数据仓库层是Hadoop数据平台的主体内容,其数据是ODS层数据经过ETL清洗、转换、加载生成的。又细分为DWD
、DWM
、DWS
层。
- 数据明细层(
DWD
)一般保持和ODS层一样的数据粒度,并且提供一定的数据质量保证。该层采用一些维度退化手法,减少事实表和维度表的关联,提高明细表的易用性。 - 数据中间层(
DWM
)对数据做轻度的聚合,生成一系列中间表。 - 数据服务层(
DWS
)又称数据集市或宽表,按照业务划分,生成字段比较多的宽表,用于提供后续业务查询、OLAP分析、数据分发等。
数据应用层ADS
提供数据产品和数据分析使用的数据,主要面向前端展现。
维表层DIM
- 高维度数据:一般是用户资料表、商品资料表等,数据量可能是上亿级别。
- 低维度数据:一般是配置表,比如枚举值对应的含义,或日期维表。