INSERT OVERWRITE TABLE dwd_order_hour PARTITION (dt='2026-03-01', hr='10') SELECT ...; SELECT dt, hr, COUNT(*) FROM dwd_order_hour WHERE dt='2026-03-01' GROUP BY dt, hr;
3 月 1 日 10 点任务失败后重跑,11 点报表 GMV 从 84 万变成 168 万,下游对账直接报警。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。
追下去是这么回事:写分区用的是 append 模式,同一天同一小时跑了两次就有两份数据。调度器重试没有先删目标分区,任务本身也不是幂等。下游按分区求和,自然翻倍。
「重跑追加分区」排查到最后往往是很小的一处差异,前面那些复杂猜测可以先放一放。权限不要一口气开到最大,先加到够用再往上试,范围小才好收。
把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。
处理上按这个顺序:写入改成 overwrite 动态分区 覆盖同一小时;重跑前先删目标分区 或按主键 merge;给任务加运行批次标记 重复批次直接跳过;手动重跑一次 对比重跑前后的分区行数。
确认没问题再收工,重跑后 10 点分区行数不变,11 点报表 GMV 仍是 84 万。
