CONVERT TO DELTA
適用於:Databricks SQL Databricks Runtime
將現有的 Parquet table 就地轉換為 Delta table。 此命令會列出目錄中的所有檔案、建立追蹤這些檔案的 Delta Lake 事務歷史記錄,並藉由讀取所有 Parquet 檔案的頁尾自動推斷數據 schema。 轉換程式會收集統計數據,以改善已轉換之 Delta table的查詢效能。 如果您提供 table 名稱,中繼資料庫也會更新,以反映 table 現在是 Delta table。
此命令支援轉換其基礎檔案格式為 Parquet 的 Iceberg tables。 在此情況下,轉換器會根據 Iceberg table的原生檔案指令清單、schema 和分割資訊,產生 Delta Lake 事務歷史記錄。
語法
CONVERT TO DELTA table_name [ NO STATISTICS ] [ PARTITIONED BY clause ]
Parameters
-
可以是可選地限定的 table identifier,或指向
parquet
或iceberg
檔案目錄的路徑。 名稱不得包含 時態規格或選項規格。 對於 Iceberg tables,您只能使用路徑,因為不支援轉換受控冰山 tables。 NO STATISTICS
在轉換程式期間略過統計數據收集,並更快完成轉換。 將 table 轉換成 Delta Lake 之後,您可以使用
OPTIMIZE ZORDER BY
來重新組織數據配置和 generate 統計數據。-
Partition 由指定的 columns所建立的 table。 當
table_name
路徑時分割PARTITIONED BY
資料需要 。 當table_name
是合格的 tableidentifier時,PARTITIONED BY
子句是可選的,而且 partition 規格將從中繼存放區載入。 在任一種方法中,如果目錄結構不符合提供的或已載入PARTITIONED BY
的規格,轉換程式就會中止並擲回例外狀況。注意
在 Databricks Runtime 11.1 和以下,
PARTITIONED BY
是所有分割數據的必要自變數。
範例
注意
您不需要為註冊至中繼存放區的 Iceberg tables 或 tables 提供分割資訊。
CONVERT TO DELTA database_name.table_name; -- only for Parquet tables
CONVERT TO DELTA parquet.`abfss://container-name@storage-account-name.dfs.core.windows.net/path/to/table`
PARTITIONED BY (date DATE); -- if the table is partitioned
CONVERT TO DELTA iceberg.`abfss://container-name@storage-account-name.dfs.core.windows.net/path/to/table`; -- uses Iceberg manifest for metadata
警示
Delta Lake 未追蹤的任何檔案都是看不見的,而且可以在您執行 VACUUM
時刪除。 您應該避免在轉換程式期間更新或附加資料檔。 轉換 table 之後,請確定所有寫入都會經過 Delta Lake。
多個外部 tables 可以共用相同的基礎 Parquet 目錄。 在此情況下,如果您在其中一個外部 tables上執行 CONVERT
,您將無法存取其他外部 tables,因為其基礎目錄已從 Parquet 轉換成 Delta Lake。 若要再度查詢或寫入這些外部 tables,您也必須對其執行 CONVERT
。
CONVERT
會將 catalog 資訊,例如 schema 和 table 屬性填入 Delta Lake 事務歷史記錄。 如果基礎目錄已轉換成 Delta Lake,且其元數據與 catalog 元數據不同,則會擲回 convertMetastoreMetadataMismatchException
。
使用 Databricks Runtime 時,如果您想要 CONVERT
覆寫 Delta Lake 交易日誌中現有的元數據,請將 set SQL 組態 spark.databricks.delta.convert.metadataCheck.enabled
設定為 false。