# 一、问题背景
在电商的离线数仓搭建中,进行 dwd 层订单域的设计中,普遍会出现订单数据跨天的情况,对于边界数据该如何处理。
# 二、业务背景
业务表的关系如下图所示:
# 举例说明:
假设某用户在 2023-08-18 23:59 分下单,在 2023-08-19 0:01 完成支付。在业务系统的中数据的流转是:
- 下单会在 order_info【订单信息表】,order_detail【订单详情表】,order_detail_coupon【订单明细优惠券关联表】,order_detail_activity【订单明细活动关联表】会新增一条订单相关数据。
- order_info【订单信息表】是一张状态表,数据发生变化,会 update 相关数据,比如订单状态【从未支付到已支付】而 order_detail【订单详情表】只记录了订单的详细信息,基本上都是维度信息,不会发生变动。
- 我们搭建离线数仓中,增量数据同步使用的 maxwell,全量数据同步使用的是 datax,订单相关的表我们选择的是 maxwell,众所周知,maxwell 同步数据基本上分为两类,insert【新增的数据】和 update【更新的数据】。
- 现想要制作一张用户下单成功的事务事实表,由于用户订单成功状态是在 19 日更新的,所以计算该条下单成功是在 19 日,而订单的详细信息是 18 日的时候插入订单详细表中的,在数仓中数据 18 日的分区。
- 所以我们加工 19 日分区的下单成功表,需要关联的是 18 日,19 日的订单详情表。
- 一般数仓的加工是 T+1, 所以 2023-08-20 计算 2023-08-19 的数据,插入 2023-08-19 分区。 内部需要关联 2023-08-18,2023-08-19 的数据。、
# 问题总结
数仓中的业务过程要仔细理解,根据表的更新逻辑,数据同步的方式,选择出合理的数据加工方式。