この記事では、 LIVE 仮想スキーマ (レガシ発行モード) を使用するパイプラインを既定の発行モードに移行する方法について説明します。
既定の発行モードでは、1 つのパイプラインで複数のカタログとスキーマに書き込むことができます。また、パイプライン内のテーブルとビューを操作するための簡略化された構文が含まれています。 従来の発行モードは非推奨と見なされ、Databricks ではすべてのパイプラインを既定の発行モードに移行することをお勧めします。
移行はパイプラインのメタデータに影響しますが、データセットの読み取り、移動、または書き込みを行いません。
パイプラインでレガシ発行モードが使用されているかどうかを確認する方法
従来の発行モード パイプラインは、Lakeflow Spark 宣言パイプライン設定 UI の [概要 ] フィールドに示されます。
既定の発行モードへの移行に関する考慮事項
次の注意事項は、移行中に留意するのに役立ちます。
- パイプラインを既定の発行モードに移行した後、
LIVE仮想スキーマを使用するように戻すことはできません。 - 従来の発行モードと既定の発行モードの間の構文の変更に対処することで、移行のためのパイプラインの準備が必要になる場合があります。 ほとんどのパイプラインでは、変更は必要ありません。 詳細については、「 移行のためのパイプラインの準備」を参照してください。
- 移行はメタデータにのみ影響します。 データセットの読み取り、移動、書き込みは行われません。
- 既定の発行モードでは、具体化されたビューとストリーミング テーブルを作成後にスキーマ間で移動することはできません。
- 既定の発行モードには、Databricks CLI バージョン v0.230.0 以降が必要です。 「Databricks CLI のインストールまたは更新」を参照してください。
既定の発行モードに移行する
既定の発行モードに移行するには、次の手順に従います。
ワークスペースの左側のサイドバーから [ ジョブとパイプライン ] をクリックします。
一覧で移行するパイプラインの名前をクリックします。
更新を一時停止し、現在実行中のパイプラインを停止します。
移行を完了する前に、過去 60 日以内に少なくとも 1 つの更新プログラムが実行されている必要があります。 パイプラインがトリガーされている場合、または既に一時停止されている場合は、1 つの更新を手動で実行します。 パイプラインが連続している場合は、
RUNNING状態になる (または既に) ことを確認してから、一時停止します。必要に応じて、移行が必要になる可能性があるコードを準備します。
通常、既定の発行モードは従来の発行モードと下位互換性がありますが、アップグレード時にパイプライン コードが正しく実行されるように 、移行用 にパイプラインを適切に準備してください。 ほとんどのパイプラインでは、変更は必要ありません。
パイプライン の [設定:
pipelines.enableDPMForExistingPipeline] に構成を追加し、trueに設定します。手動更新を開始し、更新を完了します。
必要に応じて、パイプライン 設定で、
pipelines.enableDPMForExistingPipelineのパイプライン構成を削除します。 この設定は移行に使用され、移行が完了した後は必要ありません。必要に応じて、スケジュールを更新し、パイプラインの更新を有効にします。
パイプラインで既定の発行モードが有効になりました。 問題が発生した場合は、次のセクションを使用してトラブルシューティングを行います。 問題が解決しない場合は、Databricks アカウント マネージャーにお問い合わせください。
移行のためのパイプラインの準備
通常、既定の発行モードは従来の発行モードと下位互換性がありますが、一部のパイプラインを実行するには変更が必要になる場合があります。 次のメモは、移行のためのパイプラインの準備に役立ちます。
LIVE キーワード
レガシ発行モードの LIVE キーワードは、パイプラインの既定値でオブジェクトのカタログとスキーマを修飾します。 既定の発行モードでは、テーブルまたはビューを修飾するために LIVE キーワードが使用されなくなりました。
LIVE キーワードは無視され、パイプラインの既定のカタログとスキーマに置き換えられます。 通常、これは、後でパイプラインにLIVEまたはUSE CATALOGコマンドを追加しない限り、レガシ発行モードのUSE SCHEMA キーワードと同じ既定のカタログとスキーマを使用します。
従来の発行モードでは、 LIVE キーワードを使用しない部分的に修飾されたテーブルとビューの参照 ( table1 など) では、Spark の既定値が使用されます。 既定の発行モードでは、部分的に修飾された参照でパイプラインの既定値が使用されます。 Spark の既定値とパイプラインが異なる場合は、移行する前に、部分的に修飾されたテーブルまたはビューの名前を完全修飾する必要があります。
注
移行後、コードから LIVE キーワードを削除できます。 必要に応じて、 LIVE キーワードを完全修飾テーブル名またはビュー名に置き換えることができます。
LIVE キーワードを使用した列参照
LIVE キーワードを使用して、既定の発行モードで列を定義することはできません。 たとえば、次のコードを使用します。
CREATE OR REPLACE MATERIALIZED VIEW target AS SELECT LIVE.source.id FROM LIVE.source;
移行の前に、次のコードに置き換える必要があります。
CREATE OR REPLACE MATERIALIZED VIEW target AS SELECT source.id FROM LIVE.source;
このバージョンは、どちらの発行モードでも動作します。
flow_progress イベントの変更
パイプラインを移行すると、イベント ログ内の flow_progress イベントのデータセット名が変更されます。 このパイプラインのイベント ログに対するクエリがある場合は、クエリの更新が必要になることがあります。
従来の発行モードでは、データセット名は table 名です。 既定の発行モードでは、データセット名は完全修飾 catalog.schema.table 名です。
イベント ログの使用方法の詳細については、「 パイプライン イベント ログ」を参照してください。
警告とエラー
レガシ発行モードの一部の警告は、既定の発行モードのエラーに置き換えられました。
自己参照 自己参照 (または循環参照) は、既定の発行モードでは許可されません (レガシ発行モードでは結果が未定義でした)。 例えば次が挙げられます。
CREATE OR REPLACE MATERIALIZED VIEW table1 AS SELECT * FROM target_catalog.target_schema.table1;
は、レガシ発行モードで警告を生成します (結果は未定義です)。 既定の発行モードでは、エラーが生成されます。
マルチパート名 既定の発行モード (マルチパート名) では、名前にピリオドを使用できません。 たとえば、次の Python コードはレガシ モードでは有効ですが、既定のモードでは有効ではありません。
@dlt.view(name=”a.b.c”)
def transform():
return …
移行する前に、テーブルの名前をピリオド文字を含まない名前に変更します。
注
この例では、以前の構文 ( @dlt.view) も使用します。 Databricks では、パイプラインに @dp.temporary_view() を使用することをお勧めします。 詳細については、「Lakeflow Spark 宣言型パイプライン Python 言語リファレンス」を参照してください。
トラブルシューティング
次の表では、レガシ発行モードから移行するときに発生する可能性があるエラーについて説明します。
| エラー | Description |
|---|---|
CANNOT_MIGRATE_HMS_PIPELINE |
Hive メタストア パイプラインでは移行はサポートされていません。 別の方法として、移行前に Hive メタストアから Unity カタログにパイプラインを複製することもできます。 Hive メタストア パイプラインを複製して Unity カタログ パイプラインを作成する |
MISSING_EXPECTED_PROPERTY |
このエラーは、 pipelines.enableDPMForExistingPipeline 構成を追加する前に最新の更新プログラムを実行しなかったことを示します。 その構成を削除し、不足している場合は、 pipelines.setMigrationHints 構成を trueに設定して追加します。 更新プログラムを実行し、手順 3. から続行します。 |
PIPELINE_INCOMPATIBLE_WITH_DPM |
このエラーは、パイプライン コードが既定の発行モードと完全に互換性を持たないことを示します。 移行のためのパイプラインの準備を参照してください。 |