パイプライン間での DLT テーブルの移動
この機能は パブリック プレビュー 段階であり、現時点では参加している顧客のみが利用できます。 この機能プレビューに参加する場合は、Databricks アカウント マネージャーに連絡して、ワークスペースで有効にしてください。
この記事では、ストリーミングテーブルとマテリアライズドビューをパイプライン間で移動する方法について説明します。 新しいパイプラインでは、ソース テーブルではなくテーブルが更新されます。これは、次のような多くのシナリオで役立ちます。
- 大きなパイプラインを小さなパイプラインに分割します。
- 複数のパイプラインを 1 つの大きなパイプラインにマージします。
- パイプライン内の一部のテーブルの更新頻度を変更します。
- テーブルを従来の LIVE スキーマから新しいデフォルトの公開モードに移動します。LIVE スキーマ (レガシー)を参照してください。
必要条件
パイプライン間でテーブルを移動するための前提条件を次に示します。
-
必要な
ALTER TABLE
コマンドを実行するときは、Databricks Runtime 16.3 以降を使用する必要があります。 -
ソース パイプラインと宛先パイプラインの両方が次の条件を満たしている必要があります。
- Unity Catalog パイプライン (Hive metastore パイプラインはサポートされていません)
- 同じワークスペース内
- 操作を実行している Databricks ユーザー アカウントまたはサービスプリンシパルが所有しています
-
テーブルを移動する前に、宛先パイプラインを少なくとも 1 回実行する必要があります。
-
デフォルトの公開モードを使用するように送信先パイプラインを設定しておく必要があります。これにより、テーブルを複数のカタログとスキーマに公開できます。それ以外の場合は、両方のパイプラインで従来の発行モードを使用し、設定でカタログとターゲットの値が両方とも同じである必要があります。
この機能は、デフォルトの公開モードを使用するパイプラインを従来の公開モードを使用するパイプラインに移動することをサポートしていません。
パイプライン間でテーブルを移動する
次の手順では、ストリーミングテーブルまたはマテリアライズドビューを 1 つのパイプラインから別のパイプラインに移動する方法について説明します。
-
ソース パイプラインが実行されている場合は停止します。完全に停止するまで待ちます。
-
ソース パイプラインのノートブックまたはファイルからテーブルの定義を削除し、後で参照できるようにどこかに保存します。
パイプラインを正しく実行するために必要なサポート クエリまたはコードを含めます。
-
ノートブックまたは SQL エディタから、次の SQL コマンドを実行して、ソース パイプラインからレプリケート先パイプラインにテーブルを再割り当てします。
SQLALTER [MATERIALIZED VIEW | STREAMING TABLE] <table-name>
SET TBLPROPERTIES("pipelines.pipelineId"="<destination-pipeline-id>");たとえば、
sales
という名前のストリーミングテーブルを ID がabcd1234-ef56-ab78-cd90-1234efab5678
のパイプラインに移動する場合は、次のコマンドを実行します。SQLALTER STREAMING TABLE sales
SET TBLPROPERTIES("pipelines.pipelineId"="abcd1234-ef56-ab78-cd90-1234efab5678"); -
テーブルの定義を宛先パイプラインのノートブック/ファイルに追加します。
カタログまたはターゲットスキーマがソースとコピー先で異なる場合、クエリを正確にコピーできない可能性があります。定義内の部分的に修飾されたテーブルは、異なる方法で解決される場合があります。移動中に定義を更新する必要がある場合があります。
移動が完了しました。これで、ソース パイプラインと宛先パイプラインの両方を実行できます。宛先パイプラインはテーブルを更新します。
トラブルシューティング
次の表では、パイプライン間でテーブルを移動するときに発生する可能性のあるエラーについて説明します。
エラー | 説明 |
---|---|
DESTINATION_PIPELINE_NOT_IN_DIRECT_PUBLISHING_MODE | ソース パイプラインはデフォルトのパブリッシュ モードであり、宛先は LIVE スキーマ (レガシ) モードを使用します。これはサポートされていません。ソースがデフォルトの公開モードを使用している場合は、送信先もそうする必要があります。 |
CHANGE_PIPELINE_ID_OF_TABLE_NOT_SUPPORTED | この機能はパブリック プレビュー段階であり、ワークスペースでは有効になっていない可能性があります。Databricks アカウント マネージャーに連絡して、ワークスペースで有効にしてください。 |
PIPELINE_TYPE_NOT_WORKSPACE_PIPELINE_TYPE | ETL パイプライン間でのテーブルの移動のみがサポートされます。Databricks SQLで作成されたストリーミングテーブルのパイプラインとマテリアライズドビューはサポートされていません。 |
移動後、移動先でテーブルの更新に失敗します。 | この場合を迅速に軽減するには、同じ手順に従ってテーブルをソース パイプラインに戻します。その後、アカウント マネージャーに問題のトラブルシューティングを行うか、問題を提起できます。 |
制限
パイプライン間でテーブルを移動する場合の制限事項を次に示します。
- Databricks SQLで作成されたマテリアライズドビューとストリーミングテーブルはサポートされていません。
- プライベート・テーブルまたはビューはサポートされていません。
- ソースと宛先のパイプラインは、Unity Catalog で管理されているパイプラインである必要があります。Hive metastore パイプラインはサポートされていません。
- ソース パイプラインと宛先パイプラインの両方が同じワークスペースに存在する必要があります。
- ソース パイプラインと destination パイプラインはどちらも、移動操作を実行しているユーザーが所有している必要があります。
- ソース パイプラインがデフォルト パブリッシング モードを使用する場合、デスティネーション パイプラインもデフォルト パブリッシング モードを使用している必要があります。 デフォルトの発行モードを使用するパイプラインから、LIVE スキーマ (レガシ) を使用するパイプラインにテーブルを移動することはできません。LIVE スキーマ (レガシー)を参照してください。
- ソース パイプラインと宛先パイプラインの両方が LIVE スキーマ (レガシ) を使用している場合は、設定で同じ
catalog
値とtarget
値を持つ必要があります。