产品库存表有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,作为下次任务的上次执行时间。