维度模型- 迟到的事实or被修改的历史事实

一. 问题

一个订单表,  小概率进行历史订单补录和订单金额修正。

怎么进行明细数据的处理和后面汇总数据的处理?

先说补录吧, 修改比补录还麻烦。

下面的讨论是基于hive, hive 的特征是只能全分区 insert overwrite。

虽然可以insert ,但是不具有幂等性,尽量不用。

二. 迟到的事实:全量事实表

1. 全量抽取事实表

2.根据时间戳增量抽取事实表,然后和之前数据合并最新的全量事实表快照。

优点: 简单, 根本不用考虑迟不迟到

缺点:数据很大时,性能不好。

三. 迟到的事实:按处理时间分区存储

按时间戳增量抽取数据,然后按处理时间分区存储明细数据。

优点: 简单, 但是要注意时间戳别重叠和出现空隙,导致数据重复和丢

缺点:   想通业务日期的订单, 不一定在相同的分区里。使用时得跨分区查询。

汇总处理:

1. 按处理时间分区,按业务日期分组进行汇总

优点: 数据准确

缺点: 相同的处理时间分区内, 可能有多个业务日期的数据。

2. 按业务日期进行分区分组进行汇总

优点:有了后面的缺点,就没有点了。

缺点:延迟的汇总结果, 会覆盖之前历史分区,导致数据不准。

结论: 不能这么搞。

3. 按业务日期进行增量计算,然后合并之前的数据再按业务日期分区。

优点:实现了按业务日期分区

缺点: 脆弱复杂, 出点问题,就得久远的日期之前开始重新计算。 可以结合下面的全量方式处理。

4. 全量计算,按业务日期存储

优点: 简单, 而且数据按业务日期存储

缺点: 数据大时,性能不好。 可以 全量初始化,然后增量计算 , 并定时全量比对修正的方式。

四 . 迟到的事实: 按业务时间分区处理

优点: 相同业务日期的数据,都在一个分区

缺点: 很难很危险

1. 直接把增量数据按业务日期insert overwrite。

延迟数据会把以前的历史分区覆盖

2. 直接把增量数据按业务日期insert into

不具有幂等性, 不确定哪天要重跑调度,会出问题。

3. 增量数据,合并以前历史分区数据,然后insert overwrite

性能很差, 然后 依赖的汇总表也得刷。

五. 总结

各有优缺点

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值