Apache Spark 动态分区 OverWrite 问题

1、问题:spark Dataframe :

partition_day.write.partitionBy("day").mode(SaveMode.Overwrite).format("orc")

.saveAsTable("test.partition_day")

现象:历史数据会被删除,插入新数据。


2、解决方案:

从 Spark 2.3 开始,Spark 给我们提供了名为 spark.sql.sources.partitionOverwriteMode 的参数,它有两个值:STATIC 和 DYNAMIC。默认值是 STATIC,也就是默认会删除所有分区或者部分分区,这个是为了兼容 Spark 2.3 之前的行为。关于这个 ISSUE 可以参见 SPARK-20236,对应的 Patch 为 这里。

spark.conf.set("spark.sql.sources.partitionOverwriteMode","dynamic")

或者使用hive sql  

INSERT OVERWRITE TABLE ctest.partition_dayPARTITION (`day`) --修改分区

你可能感兴趣的:(Apache Spark 动态分区 OverWrite 问题)