大量のデータを移動する必要がある場合、Delta Lake テーブルをボーダレスな Lakehouse に移行するのは複雑で費用がかかる可能性があります。Dataflow ジョブビルダーは、Cloud Storage Delta Lake テーブルを Lakehouse に直接インポートするためのローコードまたはノーコードのインターフェースを提供します。既存のデータは、データの量に基づいて自動スケーリングする Dataflow ジョブを使用して、Delta Lake テーブルからターゲット Lakehouse テーブルにコピーされます。
新しいテーブルの場合、Dataflow はスキーマを自動的に作成します。既存のテーブルの場合、スキーマは変更されないため、ジョブを成功させるには、宛先テーブルのスキーマがコピー元 Delta Lake テーブルに正しくマッピングされている必要があります。
次の接続の詳細を使用して、Cloud Storage に保存されている Delta Lake テーブルからデータをインポートします。
このデータをインポートした後、継続的移行を有効にすることができます。
始める前に
Delta Lake テーブルのデータをインポートするには、次のものが必要です。
Dataflow API、BigQuery API、Lakehouse API が有効になっていない場合は、有効にします。
API を有効にするために必要なロール
API を有効にするには、
serviceusage.services.enable権限が必要です。プロジェクトを作成した場合は、オーナーロール(roles/owner)を介してこの権限がすでに付与されている可能性があります。それ以外の場合は、Service Usage 管理者ロール(roles/serviceusage.serviceUsageAdmin)を介してこの権限を取得できます。ロールを付与する方法を確認する。リソースの作成に必要な権限を取得するには、プロジェクトに必要な Identity and Access Management(IAM)ロールを付与するよう管理者に依頼してください。
Cloud Storage バケットに保存されている既存の Delta Lake テーブル。テーブル ディレクトリは、Parquet データファイルと
_delta_log/トランザクション ログ ディレクトリを含む有効な Delta Lake テーブルのルートである必要があります。データをインポートする Lakehouse Iceberg カタログ、名前空間、テーブル。
サポートと制限事項
Dataflow を使用して Delta Lake テーブルデータを Lakehouse にインポートする場合、次の制限があります。
- この機能を使用するには、バッチ パイプライン ジョブを使用する必要があります。
- 既存の宛先テーブルの場合、スキーマは変更されません。宛先テーブルのスキーマは、ソースの Delta Lake テーブルのスキーマに正しくマッピングされている必要があります。
- ソースデータは、Cloud Storage に保存されている有効な Delta Lake テーブルである必要があります。テーブルのルート ディレクトリには、Delta Lake によって作成された Parquet データファイルと
_delta_log/トランザクション ログ ディレクトリ(JSON または Parquet ログファイルを含む)が含まれている必要があります。 - Amazon S3 は Delta Lake テーブルソースではサポートされていません。
Delta Lake テーブルをインポートする
Delta Lake テーブルを Lakehouse にインポートするには、次の操作を行います。
Google Cloud コンソールで、[Lakehouse ランタイム カタログ] ページに移動します。
データをインポートするカタログ、名前空間、テーブルを選択します。
[テーブルの詳細] ページで、 [テーブルをインポート] をクリックし、[Delta Lake から(バッチ)] を選択します。
Dataflow の [ジョブビルダー] ページが開き、Delta Lake から Lakehouse へのブループリントが読み込まれます。
[ソース] セクションで、次の操作を行います。
[ReadFromDeltaLake Delta Lake テーブル] ソースパネルを開くには、展開矢印 をクリックします。
[テーブルパス] フィールドに、Delta Lake テーブルのルート ディレクトリ(データファイルと
_delta_log/ディレクトリを含むディレクトリ)の Cloud Storage URI を入力します。例:gs://BUCKET_NAME/tables/TABLE_NAME省略可: [Hadoop 構成プロパティ] フィールドで、Cloud Storage からの読み取りに必要な追加の Hadoop 構成プロパティを構成します。例:
fs.gs.impl=com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem。[完了] をクリックします。
[シンク] セクションで、次の操作を行います。
省略可: WriteToIceberg Lakehouse テーブル シンクパネルを確認します。通常、このパネルの情報(Lakehouse テーブル、カタログ名、ウェアハウスの場所など)は事前入力されています。
[完了] をクリックします。
[Dataflow オプション] セクションで、[ジョブを実行] をクリックします。
Delta Lake テーブルのインポートに使用される Dataflow パイプラインをさらにカスタマイズする必要がある場合は、ジョブビルダー フォームまたは YAML エディタを使用してカスタマイズできます。
ジョブの出力を調べる
ジョブが完了したら、BigQuery でクエリを実行して、データが Lakehouse テーブルにコピーされたことを確認できます。
Dataflow ジョブのリストで、ジョブのステータスが [成功] であることを確認します。
ジョブが失敗した場合やエラーが発生した場合は、ジョブログまたはワーカーログで詳細を確認します。
Google Cloud コンソールで、BigQuery Studio ページに移動します。
クエリエディタで、テーブルを検査する SQL クエリを入力します。
PROJECT_ID.CATALOG.NAMESPACE.TABLE_NAME規約を使用して、次のクエリを実行できます。SELECT * FROM `PROJECT_ID`.`CATALOG`.`NAMESPACE`.`TABLE_NAME` LIMIT 10;(実行)をクリックします。
クエリ結果を確認して、データが正しく処理されたことを確認します。
省略可。継続的移行を有効にする
Delta Lake から Lakehouse へのエンドツーエンドの継続的移行を設定するには、次の操作を順に行います。
- 入力 Delta Lake テーブルで
delta.enableChangeDataFeedプロパティを有効にします。 delta.enableChangeDataFeedプロパティを設定した後、commit ID またはタイムスタンプにテーブルの初期移行を行います。- ワークロードの要件に合わせて選択した頻度(コミット ID またはタイムスタンプ範囲)を使用して、後続のデータの CDC ジョブをスケジュール設定して実行します。
詳細については、Dataflow を使用して Delta Lake の変更データ キャプチャ(CDC)データを Lakehouse に移行するをご覧ください。
次のステップ
- 詳細については、BigQuery 内の Apache Iceberg 用 Lakehouse テーブルの概要をご覧ください。
- Delta Lake CDC データを Lakehouse に定期的に移行する方法について学習する。
- Lakehouse での変更データ キャプチャの取り込みについて学習する。
- ジョブビルダー UI を使用してカスタムジョブを作成する方法を確認する。