首页/数据/数据工程与 ETL 速查/幂等写入与 Upsert 落库
本包目录(311 条)
管道基础52 条
Kafka64 条调度与编排40 条数仓建模52 条数据质量50 条CDC 与同步53 条

幂等写入与 Upsert 落库

重跑任务时结果不产生重复或错误累计,就是幂等。常见做法:按业务主键 upsert、按分区覆盖写入、写临时表后原子替换。

目标同一批数据重跑多次结果一致
手段upsert、分区覆盖、临时表切换
前提有稳定主键或分区键

MySQL 幂等写入

MySQL 幂等写入
INSERT INTO dwd_order (order_id, amount, updated_at)
VALUES (%s, %s, %s)
ON DUPLICATE KEY UPDATE amount = VALUES(amount), updated_at = VALUES(updated_at);

Hive/Spark 分区覆盖

Hive/Spark 分区覆盖
INSERT OVERWRITE TABLE dwd_order PARTITION (dt = '2026-10-11')
SELECT ... FROM ods_order WHERE dt = '2026-10-11';
不带分区的 INSERT OVERWRITE 会清空整表重建,误用一次就是全量事故。

易错点

  • 只按当前分区覆盖、但源端会补改历史日期时,必须重刷受影响的历史分区
  • 幂等键选错(如用自增 ID)会让重跑产生重复行

数据来源与参考

  • MySQL 8.0 Reference Manual: INSERT ... ON DUPLICATE KEY UPDATE
  • Apache Hive LanguageManual DML
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌