Delta Lake への変換
CONVERT TO DELTA
SQL コマンドは、Parquet テーブルと Iceberg テーブルから Delta Lake テーブルへの 1 回限りの変換を実行します。Parquet または Iceberg テーブルから Delta Lake への増分変換については、「 Parquet テーブルと Iceberg テーブルを Delta Lake に段階的に複製する」を参照してください。
Unity Catalog は、 Unity Catalog によって管理される外部ロケーションに格納されている Parquet テーブルと Iceberg テーブルに対して CONVERT TO DELTA
SQL コマンドをサポートしています。
既存の Parquet データ ファイルを Unity Catalog の外部テーブルとして構成し、それらを Delta Lake に変換して、Databricks レイクハウスのすべての機能のロックを解除できます。
技術ドキュメントについては、「 CONVERT TO DELTA」を参照してください。
外部ロケーションにある Parquet ファイルまたは Iceberg ファイルのディレクトリを Delta Lakeに変換する
注:
Iceberg テーブルの変換は パブリック プレビュー段階です。
Iceberg テーブルの変換は、Databricks Runtime 10.4 LTS 以降でサポートされています。
Iceberg メタストア テーブルの変換はサポートされていません。
パーティションの進化が発生した Iceberg テーブルの変換はサポートされていません。
更新、削除、またはマージが発生した Iceberg マージ・オン・リード・テーブルの変換はサポートされていません。
以下は、切り捨てられたカラムに定義されたパーティションを持つ Iceberg テーブルを変換する場合の制限事項です。
Databricks Runtime 12.2 LTS 以下では、切り捨てられる列の種類は
string
のみです。Databricks Runtime 13.3 LTS 以降では、
string
、long
、またはint
型の切り捨てられた列を操作できます。Databricks は、
decimal
型の切り捨てられた列の操作をサポートしていません。
Parquet データ ファイルのディレクトリを Delta Lake テーブルに変換できるのは、ストレージの場所に対する書き込みアクセス権がある場合です。 Unity Catalogを使用したアクセスの設定に関する情報については、「Unity Catalogを使用してクラウド オブジェクト ストレージとサービスに接続する」を参照してください。
CONVERT TO DELTA parquet.`s3://my-bucket/parquet-data`;
CONVERT TO DELTA iceberg.`s3://my-bucket/iceberg-data`;
変換されたテーブルを外部テーブルとして Unity Catalogにロードするには、外部ロケーションに対するCREATE EXTERNAL TABLE
権限が必要です。
注:
Databricks Runtime 11.3 LTS 以降の場合、CONVERT TO DELTA
は Hive metastoreに登録されているテーブルのパーティショニング情報を自動的に推論します。Unity Catalog の外部テーブルのパーティション分割情報を指定する必要があります。
マネージドテーブルと外部テーブルを Unity Catalog 上の Delta Lake に変換する
CONVERT TO DELTA
構文は、Unity Catalog の外部テーブルを作成する場合にのみ使用できます。 CTAS
Hive metastoreParquetステートメントを使用して、レガシーUnity CatalogDelta Lake HiveUnity Catalogマネージ テーブルをマネージ テーブルに直接変換するCREATE TABLE (「 AS SELECT を使用した テーブルを マネージドテーブルにアップグレードする 」を参照してください。
外部 Parquet テーブルを Unity Catalog 外部テーブルにアップグレードするには、「 アップグレード ウィザードを使用して 1 つの Hive テーブルを Unity Catalog 外部テーブルにアップグレードする」を参照してください。
外部 Parquet テーブルを Unity Catalog に登録したら、それを外部 Delta Lake テーブルに変換できます。 Parquet テーブルがパーティション分割されている場合は、パーティション分割情報を指定する必要があります。
CONVERT TO DELTA catalog_name.database_name.table_name;
CONVERT TO DELTA catalog_name.database_name.table_name PARTITIONED BY (date_updated DATE);