ODS即数仓中的贴源层,用于当前、历史及其他细节查询。存储在ODS中的数据需要进行基本的数据清洗,包括不合规的、错误的和重复的数据,但是不对数据做过多的聚合操作。
ODS表设计方法
存储方式
为了满足历史数据分析要求,需要在ODS中甲时间维度,即分区字段(ds、pt等)
1.增量存储
业务日期作为分区,每个分区存放日增量的业务数据。
2. 全量存储
业务日期作为分区,每个分区存放截止业务日期的全量业务数据。
这样的存储方式类似维度模型的周期性快照处理手法,是消耗存储成本来换取易用性,所以这类存储方式较适用小型维度数据。
3. 历史拉链存储
利用维度中的缓慢变化维,需要新增两个时间戳字段(start_ds,end_ds),同时也是分区字段,记录天粒度的变更数据。这样下游可以通过限制两个时间戳获取历史数据,弊端是对于不理解维度模型的用户来说,具有较高的理解难度,开发人员面临较大的解释成本。另外两个字段分区,会导致数量膨胀。
比较
存储方式 | 存储成本 | 计算成本 | 局限性 | 适用场景举例 |
---|---|---|---|---|
增量 | 高 | 低 | 源表更新不能满足全局数据获取的需求 | 比如交易、日志表。一方面数据量大不适合全量存储,一方面下游不太需要访问历史全量数据,或者增量union起来就是全量了。 |
全量 | 高 | 低 | 存储成本太高,下游使用效率低 | 比如商品类目。小数据量的缓慢变化的维度数据。 |
历史拉链 | 低 | 较高 | 计算成本、维护成本高,只适用缓慢变化的表 | 比如用户、商品。大数据量的缓慢变化的维度数据。 |