使用 Delta Lake 欄位對應重新命名和移除欄位
Azure Databricks 支援 Delta Lake 數據表的數據行對應,這可讓僅限元數據的變更將數據行標示為已刪除或重新命名,而不需重寫數據檔。 它也允許使用者使用 Parquet 不允許的字元來命名 Delta 數據表數據行,例如空格,讓使用者可以直接將 CSV 或 JSON 數據擷取到 Delta,而不需要因為先前的字元條件約束而重新命名數據行。
重要
已啟用數據行對應的數據表只能在 Databricks Runtime 10.4 LTS 和更新版本讀取。
已啟用欄位映射的分割表會使用隨機前置詞,而非分區目錄的欄位名稱。 請參閱 Delta Lake 和 Parquet 是否共用分割策略?。
在資料表上啟用欄位對應可能會中斷依賴 Delta 變更數據反饋的下游作業。 請參閱 變更已啟用欄位對應之資料表的資料饋送限制。
在表格上啟用欄位對應可能會中斷從 Delta 表格作為來源的串流讀取,包括在 DLT 中。 請參閱使用欄位對應和結構變更進行串流。
啟用數據行對應
欄位對應需要下列 Delta 協議:
- 讀取器第 2 版或更新版本。
- Writer 軟體 5 版或以上版本。
針對具有必要協定版本的 Delta 表格,您可以透過將 delta.columnMapping.mode
設為 name
來啟用欄位對應。
您可以使用下列命令來啟用欄位對應:
ALTER TABLE <table-name> SET TBLPROPERTIES (
'delta.columnMapping.mode' = 'name'
)
請參閱 停用欄對應。
重新命名資料行
注意
可在 Databricks Runtime 10.4 LTS 和更新版本中使用。
針對 Delta 資料表啟用資料行對應時,您可以重新命名資料行:
ALTER TABLE <table-name> RENAME COLUMN old_col_name TO new_col_name
如需更多範例,請參閱 更新 Delta Lake 數據表架構。
刪除欄位
注意
在 Databricks Runtime 11.3 LTS 和更新版本中可用。
針對 Delta 資料表啟用資料行對應時,您可以刪除一或多個資料行:
ALTER TABLE table_name DROP COLUMN col_name
ALTER TABLE table_name DROP COLUMNS (col_name_1, col_name_2, ...)
如需詳細資訊,請參閱 更新 Delta Lake 數據表架構。
欄位名稱中支援的字元
針對 Delta 資料表啟用資料行對應時,您可以在資料表的數據行名稱中包含空格和其中任何字元: ,;{}()\n\t=
。
使用欄位對應和模式變更進行串流
重要
這項功能在 Databricks Runtime 13.3 LTS 和更新版本中處於公開預覽狀態。
您可以提供一個架構追蹤位置,以啟用從 Delta 資料表進行具有欄位映射功能的串流。 這克服了非加總架構變更可能會導致數據流中斷的問題。
針對數據源讀取的每個串流都必須有自己的 schemaTrackingLocation
指定。 指定的 schemaTrackingLocation
必須包含在針對 checkpointLocation
數據流寫入之目標數據表 的 所指定的目錄中。
注意
針對結合多個來源 Delta 數據表數據的串流工作負載,您必須為每個源數據表指定 內 checkpointLocation
的唯一目錄。
選項 schemaTrackingLocation
可用來指定架構追蹤的路徑,如下列程式代碼範例所示:
checkpoint_path = "/path/to/checkpointLocation"
(spark.readStream
.option("schemaTrackingLocation", checkpoint_path)
.table("delta_source_table")
.writeStream
.option("checkpointLocation", checkpoint_path)
.toTable("output_table")
)
停用數據行對應
在 Databricks Runtime 15.3 和更新版本中,您可以使用 DROP FEATURE
命令從數據表移除數據行對應,並將數據表通訊協議降級。
請參閱刪除 Delta 資料表功能。