CONVERT TO DELTA

適用対象:「はい」のチェック マーク Databricks SQL 「はい」のチェック マーク Databricks Runtime

既存の Parquet テーブルを Delta テーブルにインプレース変換します。 このコマンドでは、ディレクトリ内のすべてのファイルが一覧表示され、これらのファイルを追跡する Delta Lake トランザクション ログが作成されます。また、すべての Parquet ファイルのフッターが読み取られ、データ スキーマが自動的に推論されます。 変換プロセスでは、変換された Delta テーブルのクエリ パフォーマンスを向上させるために統計情報が収集されます。 テーブル名を指定した場合は、メタストアも更新され、テーブルが Delta テーブルになります。

このコマンドでは、基になるファイル形式が Parquet である Iceberg テーブルの変換がサポートされています。 この場合、コンバーターによって、Iceberg テーブルのネイティブ ファイル マニフェスト、スキーマ、およびパーティション情報に基づいて DeltaLake トランザクション ログが生成されます。

構文

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

パラメーター

  • table_name

    必要に応じて修飾されたテーブル識別子、あるいは parquet または iceberg ファイル ディレクトリへのパス。 この名前には、テンポラル仕様を含めることはできません。 Iceberg テーブルの場合、マネージド 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 ディレクトリが共有されている可能性があります。 この場合、外部テーブルの 1 つで CONVERT を実行すると、基になるディレクトリが Parquet から Delta Lake に変換されているため、他の外部テーブルにアクセスできなくなります。 これらの外部テーブルに対してクエリや書き込みを再度実行するには、それらに対しても CONVERT を実行する必要があります。

CONVERT では、スキーマやテーブルのプロパティといったカタログ情報が Delta Lake トランザクション ログに入力されます。 基になるディレクトリが既に Delta Lake に変換されており、そのメタデータがカタログ メタデータと異なる場合は、convertMetastoreMetadataMismatchException がスローされます。

Databricks Runtime を使用しているときに、CONVERT によって Delta Lake トランザクション ログ内の既存のメタデータが上書きされるようにする場合は、SQL 構成 spark.databricks.delta.convert.metadataCheck.enabled を false に設定します。

変換を元に戻す

データ ファイルを変更する可能性がある DELETEOPTIMIZE などの Delta Lake 操作を実行した場合:

  1. ガベージ コレクション用の次のコマンドを実行します。
VACUUM delta.`<path-to-table>` RETAIN 0 HOURS
  1. <path-to-table>/_delta_log ディレクトリを削除します。