|
| 1 | +# 数仓分层和数仓建模 |
| 2 | + |
| 3 | +## 1 什么是数仓 |
| 4 | + |
| 5 | +数仓是为企业所有决策制定过程,提供所有系统数据支持的战略集合。通过对数据仓库中数据的分析,可以帮助企业改进业务流程、控制成本、提高产品质量等。数据仓库并不是数据的最终目的地,而是为数据最终的目的地做好准备。这些准备包括对数据的清洗、转义、分类、重组、合并、拆分、统计等。 |
| 6 | + |
| 7 | +数仓的: |
| 8 | + |
| 9 | +- 输入系统,埋点产生的用户行为数据、JavaEE 后台产生的业务数据、爬虫数据 |
| 10 | +- 输出系统,报表系统、用户画像系统、风控系统、推荐系统、机器学习等 |
| 11 | + |
| 12 | +## 2 数仓分层 |
| 13 | + |
| 14 | +### 2.1 ODS(Operation Data Store)原始数据层 |
| 15 | + |
| 16 | +存放未经过处理的原始数据,结构上与源系统保持一致,是数据仓库的数据准备区。 |
| 17 | + |
| 18 | +ODS表命名规范:`ods_表名_单分区增量全量标识(inc/full)` |
| 19 | + |
| 20 | +主要是存储近期的原始事务数据,以便进一步的处理和分析。 |
| 21 | + |
| 22 | +1. **保持数据原貌,不做任何修改**:ODS数据通常是未经处理的原始数据,直接从源系统导入,保留数据的原始状态,包括所有历史记录和细节,以便数据审计和完整性分析。 |
| 23 | +2. **压缩采用 LZO,压缩比是 100g 数据压缩完 10g 左右**:为减少存储空间和优化I/O性能。LZO是一种可以提高数据读取速度的压缩算法,在Hadoop生态系统中使用较广。虽然10:1压缩比例是一个大概的参考,实际的压缩比率会根据数据的类型和特性而有所不同。 |
| 24 | +3. **创建分区表**:在数据仓库中创建分区表是为了优化查询性能。通过将表中的数据分为较小的部分(分区),可以减少查询时需要扫描的数据量,特别是在大量数据的环境中,分区可以显著提高性能。 |
| 25 | + |
| 26 | +ODS的设计确实是为了确保数据可以迅速被引入数据仓库系统,并为之后的ETL(Extract, Transform, Load)操作、数据清洗、维度建模以及事实表的生成做准备。在维护数据的准确性和一致性的同时,也要考虑存储和查询性能的优化。 |
| 27 | + |
| 28 | +#### 具体工作 |
| 29 | + |
| 30 | +比如就是利用 Hive 去映射 HDFS 中的数据,将其制作成表。 |
| 31 | + |
| 32 | +### 2.2 DWD(Data Warehouse Detail) 明细数据层 |
| 33 | + |
| 34 | +也称为数据清洗层或数据准备层,主要负责对ODS层中的原始数据进行清洗和转换,使数据更加适合于分析。基于维度建模理论来构建,存放维度模型中的事实表,保存各业务过程最小粒度的操作记录。各指标都在该层。 |
| 35 | + |
| 36 | +1. **数据清洗**: |
| 37 | + - **空值去除**:清除那些空值记录,保证数据的完整性。 |
| 38 | + - **过滤无意义的数据**:比如,去掉订单ID、支付ID为空的记录,确保核心业务字段的准确性。 |
| 39 | + - **数据一致性处理**:对用户行为宽表和业务表进行匹配和整合,保证数据在各表之间的一致性。 |
| 40 | +2. **清洗的手段**: |
| 41 | + - 使用 SQL 进行结构化数据查询和清洗。 |
| 42 | + - MapReduce(MR)、Resilient Distributed Dataset(RDD)等大数据处理技术用于处理大规模数据集。 |
| 43 | + - Kettle、Python 等工具可进行数据转换、迁移和清洗。 |
| 44 | +3. **清洗数据量的合理范围**: |
| 45 | + - 清洗数据的比例取决于数据质量和业务要求,通常没有固定的标准。在某些情况下,例如1万条数据中清洗掉1条可能是合理的,但这需要根据实际情况分析。 |
| 46 | +4. **数据脱敏**: |
| 47 | + - 对敏感数据,如手机号、身份证号等信息进行脱敏处理,以保护用户隐私。 |
| 48 | +5. **维度退化**: |
| 49 | + - 简化数据模型,减少复杂的多维结构,例如将商品分类合并成一个字段,或将省市县地址合并,以提升查询效率和简化分析过程。 |
| 50 | +6. **LZO压缩**: |
| 51 | + - 对数据进行LZO压缩,以节省存储空间并优化读取性能。 |
| 52 | +7. **列式存储 Parquet**: |
| 53 | + - 利用列式存储格式如Parquet,可以优化分析查询的性能,特别是对于只需要访问表的某几列数据的场景。 |
| 54 | + |
| 55 | +综上,DWD目标是确保数据在质量、安全性、效率和可用性方面都满足数据仓库和业务分析的需求。通过DWD层的处理,数据将被准备好供下一层(数据应用层、数据分析层等)使用。 |
| 56 | + |
| 57 | +### 2.3 DIM(Dimension)公共维度层 |
| 58 | + |
| 59 | +基于维度建模理论来构建,存放维度模型中的维度表保存一致性维度信息。 |
| 60 | + |
| 61 | +通常存储维度信息的部分,它用于分类、描绘或者给基础数据(事实数据)添加上下文。维度表通常包含描述性属性(称为维度),这些信息用于事务数据分析的参照基础。 |
| 62 | + |
| 63 | +在事物发生时,维度数据能够提供以下环境信息: |
| 64 | + |
| 65 | +1. **描述性元素**: |
| 66 | + 维度数据包括用于描述或分类主要事务(如销售、事件)的属性,比如产品维度可以包含产品名称、类别、品牌、供应商等描述产品的信息。 |
| 67 | +2. **层次结构信息**: |
| 68 | + 维度通常包含一些层次性信息,支持按不同层级对数据进行汇总。例如,时间维度可能包括年、季度、月、周、日等层次。 |
| 69 | +3. **分析维度**: |
| 70 | + 维度数据使得用户能够从各个不同角度分析事务数据。例如,顾客维度可以使企业按客户地区、客户类型等粒度来分析营销效果。 |
| 71 | +4. **历史变更跟踪**: |
| 72 | + 在某些维度设计中,可以追踪并记录随时间变化的属性值,以保持数据在特定时期的视图,这在做趋势分析或历史数据比对时特别有用。 |
| 73 | +5. **参照规范化**: |
| 74 | + 维度表可以应用标准化参照,确保数据整洁并易于理解,并减少数据重复储存。 |
| 75 | + |
| 76 | +在数据仓库的“星型模式”或“雪花模式”设计中,DIM 层的维度表围绕事实表进行组织,事实表存储量化的业务数据(如销售总额、交易次数)。通过事实表与一个或多个维度表的关联查询,可以有效地分析和汇总业务数据。 |
| 77 | + |
| 78 | +总的来说,DIM 层(维度层)为事务数据提供有价值的环境信息,并且在数据仓库中起着至关重要的作用,使得复杂的数据分析变得可能。 |
| 79 | + |
| 80 | +### 2.4 DWS(Data Warehouse Summary )汇总数据层 |
| 81 | + |
| 82 | +基于上层的指标需求,以分析的主题对象作为建模驱动,构建公共统计粒度的汇总表。读取业务主题明细表,计算出各业务主题关心的通用维度和指标,并存储到自研的wtable(分布式KV、klist 存储系统 ) |
| 83 | + |
| 84 | +### 2.5 ADS(Application Data Service)数据应用层 |
| 85 | + |
| 86 | +存放各项统计指标结果。提供 ad-hoc 查询和实时大盘服务,ad-hoc查询指通过 Flink 将主题明细宽表实时导入ck,为分析师和产品提供 ad-hoc 查询;实时大盘主要读取 wtable 中存储的DWS多维汇总指标来提供。 |
| 87 | + |
| 88 | +### 2.6 DWT(主题数据层,可有可无) |
| 89 | + |
| 90 | +做了哪些事。既然可有可无,就不要它,将其也放入 DWS。 |
| 91 | + |
| 92 | +参考: |
| 93 | + |
| 94 | +- https://blog.csdn.net/wjt199866/article/details/115184169 |
0 commit comments