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
我有这个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