Parquet テーブルと Iceberg テーブルを Delta Lake に増分複製する

Azure Databricks の複製機能を使用して、Parquet または Iceberg データ ソースからマネージド テーブルまたは外部 Delta テーブルにデータを増分変換できます。

Parquet および Iceberg 用の Azure Databricks 複製では、Delta テーブルの複製と、Delta Lake へのテーブルの変換に使用される機能が組み合わされています。 この記事では、この機能のユース ケースと制限事項について説明し、例を示します。

重要

この機能はパブリック プレビュー段階にあります。

Note

この機能を使用するには、Databricks Runtime 11.3 以上が必要です。

複製を使用して Parquet または Iceberg データの増分インジェストを行う状況

Azure Databricks には、レイクハウスにデータを取り込むためのさまざまなオプションが用意されています。 Databricks では、以下の状況では複製を使用して Parquet または Iceberg データを取り込むことを推奨しています。

注意

ソース テーブルとは、複製されるテーブル ファイルとデータ ファイルのことです。ターゲット テーブルは、操作によって作成または更新される Delta テーブルです。

  • Parquet または Iceberg から Delta Lake に移行するが、ソース テーブルは引き続き使用する必要がある。
  • ターゲット テーブルと、追加、更新、削除が反映される運用環境のソース テーブルの間でインジェストのみの同期を維持する必要がある。
  • レポート、機械学習、またはバッチ ETL のために、ソース データの ACID 準拠スナップショットを作成したいと考えている。

複製のための構文

Parquet および Iceberg 用の複製では、Delta テーブルの複製に使用されるのと同じ基本構文が使用され、シャロー複製とディープ複製がサポートされます。 詳細については、「複製の種類」を参照してください。

Databricks では、ほとんどのワークロードに対して複製を段階的に使用することを推奨しています。 Parquet および Iceberg 用の複製サポートでは、SQL 構文が使用されます。

注意

Parquet および Iceberg 用の複製では、要件または保証は Delta への複製または変換と異なります。 「Parquet テーブルと Iceberg テーブルを複製するための要件と制限事項」を参照してください。

ファイル パスを使用して Parquet または Iceberg テーブルをディープ複製するには、次の構文を使用します。

CREATE OR REPLACE TABLE <target-table-name> CLONE parquet.`/path/to/data`;

CREATE OR REPLACE TABLE <target-table-name> CLONE iceberg.`/path/to/data`;

ファイル パスを使用して Parquet または Iceberg テーブルをシャロー複製するには、次の構文を使用します。

CREATE OR REPLACE TABLE <target-table-name> SHALLOW CLONE parquet.`/path/to/data`;

CREATE OR REPLACE TABLE <target-table-name> SHALLOW CLONE iceberg.`/path/to/data`;

次の例に示すように、メタストアに登録された Parquet テーブルのディープ複製またはシャロー複製も作成できます。

CREATE OR REPLACE TABLE <target-table-name> CLONE <source-table-name>;

CREATE OR REPLACE TABLE <target-table-name> SHALLOW CLONE <source-table-name>;

Parquet テーブルと Iceberg テーブルを複製するための要件と制限事項

ディープ複製とシャロー複製のどちらを使用する場合でも、複製の実行後にターゲット テーブルに適用された変更はソース テーブルに同期できません。 複製を使用した増分同期は一方向であり、ソース テーブルの変更をターゲットの Delta テーブルに自動的に適用できます。

Parquet テーブルと Iceberg テーブルで複製を使用する場合は、次の追加の制限が適用されます。

  • 複製を作成したり、テーブル名を使用してソース テーブルを識別したりする前に、パーティションを含む Parquet テーブルを Hive メタストアなどのカタログに登録する必要があります。 パーティションを含む Parquet テーブルには、パスベースの複製構文を使用できません。
  • パーティションの進化歴がある Iceberg テーブルは複製できません。
  • 更新、削除、またはマージが発生した Iceberg の読み取り時マージ テーブルを複製することはできません。
  • 切り捨てられた列でパーティションが定義されている Iceberg テーブルを複製する場合の制限事項を次に示します。
    • Databricks Runtime 12.2 LTS 以前では、唯一サポートされている切り捨てられた列は string 型です。
    • Databricks Runtime 13.3 LTS 以降では、stringlongまたは int 型の切り捨てられた列を扱うことができます。
    • Azure Databricks では、decimal 型の切り捨てられた列の処理はサポートされていません。
  • 増分複製では、ソース テーブルからのスキーマの変更とプロパティが同期され、複製されたテーブルにローカルに書き込まれたスキーマ変更とデータ ファイルがオーバーライドされます。
  • Unity Catalog では、シャロー複製はサポートされていません。

注意

Databricks Runtime 11.3 では、この操作ではファイル レベルの統計情報は収集されません。 そのため、ターゲット テーブルは Delta Lake のデータ スキップの恩恵を受けられません。 ファイル レベルの統計情報は、Databricks Runtime 12.2 LTS 以降で収集されます。