需求
业务中的订单表不可避免地,每一日都是有增量的,而且旧的订单状态也可能被更新。于是我们找到了拉链表这个媒介来来保存订单的历史,更新、添加增量,既节省了空间,又可以很直观地过滤出每一天的数据状态(历史)。
建表&模型设计
订单拉链表
create table dwd.mall_order_zip(
id bigint
,amt decimal(10,2)
,status int
,user_id bigint
,create_time string
,modify_time string
,start_dt string
,end_dt string
)
partitioned by (dt string)
stored as orc
tblproperties('orc.compress'='snappy')
;
数据来源和逻辑
使用区别于之前的拉链表更新逻辑,当然也可以用以前的更新逻辑
数据来源是拉链表T-1日分区和订单业务表T日的增量数据,订单业务表T日的增量数据挂上T日作为start_dt,9999-12-31作为end_dt后 union all 拉链表T-1日分区。再依据条件更改开始和结束时间
以id划窗口并且倒序排列,并用row number标号,标号为2的且end_dt为9999-12-31的,需要把end_dt更新为T日。