我發現了一個問題:
定義為一個表和一個標識列。
重命名表列時,使用這種方法,身份定義將被刪除。
這意味著使用一個標識列在一個表中需要額外的注意檢查標識列是否還在,和當前的種子值。
代碼示例
spark.read.table \ (…)
.withColumnRenamed (“dateOfBirth”、“生日”)\
.write \
.format \(“δ”)
.mode \(“覆蓋”)
.option (“overwriteSchema”,“真正的”)\
.saveAsTable (…)
https://docs.www.eheci.com/delta/delta-batch.html explicit-schema-update
一個表包含一個標識列的示例
創建表table_with_identity_col (
RowKey bigint not null生成默認為身份(從1增加1)評論“身份”,
用戶名的字符串
使用δ);
@lizou、身份id存儲在模式和使用overwriteSchema肯定會殺死它;(
盡量避免重載表,我發現我們可以升級表版本,並使用命令重命名列
ALTER TABLE test_id2 TBLPROPERTIES (
“delta.columnMapping。模式”=“名稱”,
“三角洲。minReaderVersion ' = ' 2 ',
“三角洲。minWriterVersion ' = ' 6 ')
ALTER TABLE test_id2 a1重命名列;
最後一個問題看起來沒有辦法避免重新創建表如果我們需要改變分區。改變分區需要重置標識列,生成總是選擇,這不是理想如果列是一個關鍵維度和被引用其他表。