共用方式為


CONVERT TO DELTA

適用於:核取記號為「是」Databricks SQL 核取記號為「是」Databricks Runtime

將現有的 Parquet 資料表就地轉換為 Delta 資料表。 此命令會列出目錄中的所有檔案、建立 Delta Lake 事務歷史記錄來追蹤這些檔案,並藉由讀取所有 Parquet 檔案的頁尾自動推斷數據架構。 轉換程式會收集統計數據,以改善已轉換之 Delta 數據表的查詢效能。 如果您提供數據表名稱,中繼資料儲存庫也會更新,以顯示該數據表現在是 Delta 表格。

此命令支援轉換基礎檔格式為 Parquet 的 Iceberg 資料表。 在此情況下,轉換器會根據 Iceberg 數據表的原生檔案指令清單、架構和數據分割資訊,產生 Delta Lake 事務歷史記錄。

語法

CONVERT TO DELTA table_name [ NO STATISTICS ] [ PARTITIONED BY clause ]

參數

  • table_name

    一個帶有選擇性限定的 數據表標識子 或一個指向 parqueticeberg 檔案目錄的路徑。 名稱不得包含 時態規格或選項規格。 對於 Iceberg 數據表,您只能使用路徑,因為不支援轉換 Managed Iceberg 數據表。

  • NO STATISTICS

    在轉換程式期間略過統計數據收集,並更快完成轉換。 將數據表轉換成 Delta Lake 之後,您可以使用 OPTIMIZE ZORDER BY 來重新組織數據配置並產生統計數據。

  • PARTITIONED BY

    依指定的數據行分割所建立的數據表。 當 table_name 路徑時分割 PARTITIONED BY 資料需要 。 當 table_name 是合格的數據表標識符時,PARTITIONED BY 子句是選擇性的,而且會從中繼存放區載入分割區規格。 在任一種方法中,如果目錄結構不符合提供的或已載入 PARTITIONED BY 的規格,轉換程式就會中止並擲回例外狀況。

    注意

    在 Databricks Runtime 11.1 和以下, PARTITIONED BY 是所有分割數據的必要自變數。

範例

注意

您不需要為 Iceberg 資料表或註冊到中繼存放區的資料表提供分區資訊。

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時刪除。 您應該避免在轉換程式期間更新或附加資料檔。 轉換數據表之後,請確定所有寫入都會經過 Delta Lake。

多個外部數據表有可能共用相同的基礎 Parquet 目錄。 在此情況下,如果您在其中一個外部數據表上執行 CONVERT,您將無法存取其他外部數據表,因為其基礎目錄已從 Parquet 轉換成 Delta Lake。 若要再次查詢或寫入這些外部數據表,您也必須對其執行 CONVERT

CONVERT 在 Delta Lake 事務歷史記錄中填入目錄資訊,例如架構和數據表屬性。 如果基礎目錄已轉換成 Delta Lake,且其元數據與目錄元數據不同,則會擲回 convertMetastoreMetadataMismatchException

使用 Databricks Runtime 時,如果您想要 CONVERT 覆寫 Delta Lake 事務歷史記錄中現有的元數據,請將 SQL 組態 spark.databricks.delta.convert.metadataCheck.enabled 設為 false。