首页/数据/数据工程与 ETL 速查/增量抽取水位列与半开区间
本包目录(311 条)
管道基础52 条
Kafka64 条调度与编排40 条数仓建模52 条数据质量50 条CDC 与同步53 条

增量抽取水位列与半开区间

用更新时间列做水位是最常见的增量方式:记录上一次抽取到的高水位值,下次只取大于它的数据。用「大于等于左边界、小于右边界」的半开区间避免边界重复与丢失。

常用水位列updated_at、gmt_modified、自增 id
水位保存控制表、调度变量或参数文件
区间写法[last_watermark, now) 左闭右开

增量 SQL 模板

增量 SQL 模板
SELECT id, amount, updated_at
FROM source_order
WHERE updated_at >= :last_watermark
  AND updated_at <  :window_end
ORDER BY updated_at;

水位更新(控制表)

水位更新(控制表)
UPDATE etl_watermark
SET last_value = :window_end, updated_at = NOW()
WHERE job_name = 'order_incr';
用「大于」而非「大于等于」会在同一时间戳多条记录时丢数据;用半开区间并以窗口结束时间推进水位更稳。

易错点

  • 源端时间戳回拨或补录旧数据会漏采,需要定期对账与全量兜底
  • 水位推进早于任务成功提交,失败重跑时数据会永久丢失

数据来源与参考

  • 行业通用增量抽取模式(水印法)
  • 《Data Warehouse ETL Toolkit》增量加载实践
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌