[英]Schema change in Delta table - How to remove a partition from the table schema without overwriting?
給定一個 Delta 表:
CREATE TABLE IF NOT EXISTS mytable (
...
)
USING DELTA
PARTITIONED BY part_a, part_b, part_c
LOCATION '/some/path/'
該表已經有大量數據。 但是,所需的架構是:
CREATE TABLE IF NOT EXISTS mytable (
...
)
USING DELTA
PARTITIONED BY part_a, part_b -- <<-- ONLY part_a and part_b for partitions, ie, removing part_c
LOCATION '/some/path/'
如何實現這種模式變化?
我最終采取了以下方法:
我選擇了這種方法,所以我不需要更改原始數據位置。
詳細信息: 1. 備份原始表以確保安全因為這是在 Databricks 上,所以我可以使用他們專有的deep clone
功能:
create table mydb.mytable_backup_before_schema_migration_v1
deep clone mydb.mytable
location 'dbfs:/mnt/defaultDatalake/backups/zones/mydb/mytable_backup_before_schema_migration_v1'
如果您不在 Databricks 中並且無權訪問其deep clone
,您仍然可以通過將副本讀寫到另一個地方來備份表。
2. 讀取和 3. 用新模式覆蓋
val df = spark.read.format("delta").table("mydb.mytable")
df
.write
.format("delta")
.mode("overwrite")
.partitionBy("part_a", "part_b")
.option("overwriteSchema", "true")
.saveAsTable("mydb.mytable") // same table, same location, but different data physical organization because partition changes
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.