databricks 覆盖整个 table 而不是添加新分区

databricks overwriting entire table instead of adding new partition

我有这个table

CREATE TABLE `db`.`customer_history` (
  `name` STRING,
  `addrress` STRING, 
  `filename` STRING,
  `dt` DATE)
USING delta
PARTITIONED BY (dt)

当我用它加载一个分区数据到table

      df
    .write
    .partitionBy("dt")
    .mode("overwrite")
    .format("delta")
    .saveAsTable("db.customer_history")

出于某种原因,它覆盖了整个 table。我认为覆盖模式只会覆盖分区数据(如果存在)。我的理解正确吗?

为了覆盖单个分区,使用:

df
  .write 
  .format("delta") 
  .mode("overwrite") 
  .option("replaceWhere", "dt >= '2021-01-01'") 
  .save("data_path")

Delta 使用 replaceWhere 选项可以轻松更新某些磁盘分区。您可以像这样有选择地仅覆盖与分区列上的谓词匹配的数据,

dataset.write.repartition(1)\
       .format("delta")\
       .mode("overwrite")\
       .partitionBy('Year','Week')\
       .option("replaceWhere", "Year == '2019' AND Week >='01' AND Week <='02'")\ #to avoid overwriting Week3
       .save("\curataed\dataset")

注意:当您必须 运行 计算量大的算法时,replaceWhere 特别有用,但仅限于某些分区'

您可以参考:link