轉換為 DELTA

適用于:核取標示為是 Databricks SQL 檢查標示為是 Databricks Runtime

將現有的 Parquet 資料表轉換成就地差異資料表。 此命令會列出目錄中的所有檔案、建立 Delta Lake 交易記錄來追蹤這些檔案,並藉由讀取所有 Parquet 檔案的頁尾自動推斷資料架構。 轉換程式會收集統計資料,以改善已轉換 Delta 資料表的查詢效能。 如果您提供資料表名稱,中繼存放區也會更新,以反映資料表現在是 Delta 資料表。

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

語法

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

參數

  • table_name

    選擇性的資料表識別碼或 或 檔案 iceberg 目錄的路徑 parquet 。 名稱不得包含 時態規格。 對於 Iceberg 資料表,您只能使用路徑,因為不支援轉換 Managed iceberg 資料表。

  • NO STATISTICS

    在轉換程式期間略過統計資料收集,並更快完成轉換。 將資料表轉換成 Delta Lake 之後,您可以使用 OPTIMIZE ZORDER 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。

復原轉換

如果您已執行 Delta Lake 作業,例如 DELETEOPTIMIZE 可以變更資料檔案:

  1. 執行下列命令以進行垃圾收集:
VACUUM delta.`<path-to-table>` RETAIN 0 HOURS
  1. <path-to-table>/_delta_log刪除目錄。