验证 Spark 2.4 动态分区 INSERT OVERWRITE 的默认行为,影响 ods 调度幂等性。
cd /home/bigdata/release/poyee-data-warehouse
python3 bin/spark-sql-starter.py -f tests/integration/spark/idempotence/partition_overwrite_default.sql -dt 20260507
-dt 只是占位(SQL 不依赖 ${dt}),随便填一天。
关注点 A(初始 SHOW PARTITIONS):应输出 5 行,dt=20260501 到 dt=20260505
关注点 B(跑完动态分区 INSERT OVERWRITE 后 SHOW PARTITIONS):
关注点 C(SELECT *):
(1, init-501, 01) (2, init-502, 02) (99, rewritten-503, 03) (100, rewritten-504, 04) (5, init-505, 05) 共 5 行(99, rewritten-503, 03) (100, rewritten-504, 04) 共 2 行把关注点 B + C 的输出贴回,依此决定 ods 调度是否需要显式 set DYNAMIC。
环境:Spark 2.4 + CDH 6.3.2 + Hive ORC EXTERNAL TABLE,不显式设置 spark.sql.sources.partitionOverwriteMode。
(1, init-501, 20260501) 保留(2, init-502, 20260502) 保留(99, rewritten-503, 20260503) 被覆盖(100, rewritten-504, 20260504) 被覆盖(5, init-505, 20260505) 保留结论:本环境默认即 DYNAMIC,ods 调度无需显式设置 partitionOverwriteMode。Spark / Hive 升级或 CDH 配置变更可能改变默认行为,回归靠重跑此测试。