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

Posted

技术标签:

【中文标题】Databricks - 如何更改现有 Delta 表的分区?【英文标题】:Databricks - How to change a partition of an existing Delta table? 【发布时间】:2019-03-04 18:12:27 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

以上是关于Databricks - 如何更改现有 Delta 表的分区?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 QlikView 连接到 Databricks Delta 表?

DataBricks - 将更改保存回 DataLake (ADLS Gen2)

databricks delta 格式文件无法读取

Databricks 正在“更新 Delta 表的状态”

使用 SSMS 从 Delta Lake Databricks 进行突触查询

添加新分区的 Databricks Delta 文件导致旧分区不可读