千万级产品库存表能否只跑新增数据避免全量ETL耗时?

产品库存表有1000多万条,每次全量跑ETL要两个多小时,生产上能不能只跑新增数据?

5 个赞

可以用基于时间戳的CDC(变更数据捕获)方案。

首先需要在库里建一张cdc_time表,用来记录每次ETL任务的开始和结束时间。然后在ETL作业里按这个流程来设计三个连续的转换:
第一个转换(初始化时间戳): 获取当前系统时间,写入cdc_time表的current_load字段。
第二个转换(抽取增量数据): 先从一个表输入步骤读取cdc_time表中的last_load(上次执行时间)和current_load(本次执行时间),把这两个时间传给第二个表输入步骤的参数。

第二个表输入步骤从源表中筛选出 create_date 或 last_update 字段落在两个时间戳之间的数据,这就是增量数据。
第三个转换(更新时间戳): 执行成功后,用SQL脚本更新cdc_time表,把current_load的值赋给last_load,作为下次任务的上次执行时间。