共用方式為


使用 Delta Lake 數據行對應重新命名和卸除數據行

Azure Databricks 支援 Delta Lake 數據表的數據行對應,這可讓僅限元數據的變更將數據行標示為已刪除或重新命名,而不需重寫數據檔。 它也允許使用者使用 Parquet 不允許的字元來命名 Delta 數據表數據行,例如空格,讓使用者可以直接將 CSV 或 JSON 數據擷取到 Delta,而不需要因為先前的字元條件約束而重新命名數據行。

重要

已啟用數據行對應的數據表只能在 Databricks Runtime 10.4 LTS 和更新版本讀取。

在數據表上啟用數據行對應可能會中斷依賴差異變更數據摘要的下游作業。 請參閱 變更已啟用數據行對應之數據表的數據摘要限制。

在數據表上啟用數據行對應可能會中斷從 Delta 數據表做為來源的串流讀取,包括在 Delta 實時數據表中。 請參閱使用資料行對應和結構描述變更進行串流

啟用數據行對應

資料行對應需要下列差異通訊協定:

  • 讀取器第 2 版或更新版本。
  • 寫入器第 5 版或更新版本。

針對具有必要通訊協定版本的 Delta 數據表,您可以將 設定 delta.columnMapping.modename來啟用資料行對應。

您可以使用下列命令來啟用資料列對應:

  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 命令從數據表移除數據行對應,並將數據表通訊協議降級。

命令 DROP FEATURE 需要較高的通訊協定版本。 您可以使用下列命令來升級資料表讀取器和寫入器版本,這可讓您卸載資料行對應並降級通訊協定:

  ALTER TABLE <table-name> SET TBLPROPERTIES (
    'delta.minReaderVersion' = '3',
    'delta.minWriterVersion' = '7'
  )

請參閱 卸除差異數據表功能