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 ]
パラメーター
-
必要に応じて修飾されたテーブル識別子、あるいは
parquet
またはiceberg
ファイル ディレクトリへのパス。 この名前には、テンポラル仕様を含めることはできません。 Iceberg テーブルの場合、マネージド 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 ディレクトリが共有されている可能性があります。 この場合、外部テーブルの 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 に設定します。