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

全量抽取与增量抽取

全量每次覆盖整表、逻辑简单但源端压力大;增量只取变化数据、成本低但依赖可靠的变更标识。常见组合是首次全量、后续增量、定期全量对账。

全量每次抽整表,天然覆盖删除与历史修正
增量只抽变化行,依赖更新时间列或 CDC
混合首次全量 + 每日增量 + 周期性全量校验

全量覆盖

全量覆盖
-- 每天重刷当日快照(维表常用)
INSERT OVERWRITE TABLE dim_user
SELECT * FROM ods_user_full WHERE dt = '2026-10-11';

增量合并

增量合并
-- 以主键合并增量(upsert 语义)
MERGE INTO dwd_order t USING ods_order_delta s
  ON t.order_id = s.order_id
WHEN MATCHED THEN UPDATE SET t.amount = s.amount, t.updated_at = s.updated_at
WHEN NOT MATCHED THEN INSERT (order_id, amount, updated_at)
  VALUES (s.order_id, s.amount, s.updated_at);
增量抽取无法感知物理删除,除非使用 CDC 或周期性全量比对补 delete。

易错点

  • 源表 updated_at 被业务批量重写(如数据修复)时会漏掉历史修正,需要定期全量核对
  • 增量任务把水位保存在脚本本地文件,换机器就丢失,应放在控制表或调度变量里

数据来源与参考

  • Kimball《The Data Warehouse Toolkit》ETL 子系统:增量抽取
  • Apache Hive LanguageManual DML
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌