累积快照事实表
首先我们要考虑,为什么要做累积快照的事实表,事实表就不做解释了,要理解为什么要做累积快照。
累计快照事实表用于跟踪业务事实的变化。例如,数据仓库中可能需要累积或者存储订单从下订单开始,到订单的完结。中间整条的链路是什么样子的呢?
case :
订单的创建时间、订单修改时间、订单关闭时间(用户取消或者超时)、实际下单时间、支付完成时间、预期发货时间、确认收货时间。这是一张订单表中,该有的时间。根据时间节点,来跟踪订单生命周期的进展情况。当这个业务过程进行的时候,事实表的记录也要不断的更新。但是由于数据体量非常大,所以我们需要对脚本进行优化,防止破基线,这个时候,我们需要做的工作,不仅仅限于简简单单的写出SQL,将功能实现,这么简单。首先我们会先将功能实现。采用动态回刷分区的方式,将累积快照完全落地。
制作CASE (伪代码):
set hive.exec.dynamic.patition.mode = nonstrict;
-- 更新未完成分区
insert overwrite table dwd_order_di partition(dt)
select
nvl(new_tab.id,old_tab.id)
,'9999-99-99' as dt
from (
select
*
from dwd_order_di
where dt = '9999-99-99'
) old_tab
full join(
-- 做一个月的快照
select
*
from dwd_order_detail_di
where dt between date_sub(