Databricks - 如何更改现有 Delta table 的分区?

Databricks - How to change a partition of an existing Delta table?

我在 Databricks delta 中有一个 table,它被 transaction_date 分区。我想将分区列更改为 view_date。我尝试删除 table,然后使用 PARTITIONED BY (view_date) 使用新的分区列创建它。

但是我的尝试失败了,因为实际文件驻留在 S3 中,即使我删除了一个配置单元 table,分区仍然保持不变。 有什么方法可以更改现有 Delta table 的分区吗?或者唯一的解决方案是删除实际数据并使用新指示的分区列重新加载它?

实际上不需要删除 table 或删除文件。您需要做的就是读取当前 table,覆盖内容和 schema,然后更改分区列:

val input = spark.read.table("mytable")

input.write.format("delta")
  .mode("overwrite")
  .option("overwriteSchema", "true")
  .partitionBy("colB") // different column
  .saveAsTable("mytable")

更新:之前 time travel 存在错误,分区更改现已修复。