依存関係データベース:クロスデータベース参照の管理¶
|declarative-app-plural|を使用すると、プロバイダーはマニフェスト駆動型モデルを使用してデータ製品を共有できます。多くのアプリでは、セキュアビューは他のプロバイダーデータベースのオブジェクトを参照します。従来の安全な共有では、共有に参照される各データベースに対してあなた(プロバイダー)がREFERENCE_USAGEを付与します。|declarative-app-short-plural|では、:code:`required_databases`を使用してマニフェストでこれらの依存関係データベースを宣言します。これにより、特に他のリージョンでのインストールにおいて、データベース間の参照を確実に解決できます。これは、セマンティックビュー、ユーザー定義関数(UDFs)、またはセキュアビューで使用されるプロシージャにも適用されます。
required_databasesを使用するタイミング¶
:code:`shared_content`の共有オブジェクトが、:code:`shared_content/databases`にリストされていないデータベース内のオブジェクトを参照する場合は常に、そのデータベースを:code:`required_databases`に含める必要があります。これは、これらの依存関係の存在を想定できないクロスリージョンの展開において不可欠です。たとえば、次のような場合です。
他のプロバイダーデータベースのテーブルまたはビューからJOIN/SELECTを行う共有データベースのセキュアビュー
UDFsを参照しているビューまたは他のデータベースにあるプロシージャ
:code:`application_content`経由で含まれるノートブック(ノートブックのロジックやノートブックがクエリするビューが、他のデータベースのオブジェクトに依存している場合)
基礎となる物理テーブルやビューが別のデータベースにあるセマンティックビュー
クロスデータベースの依存関係は一般的です。外部データベースを明示的に宣言しない場合、アプリはプロバイダーのリージョンでは検証またはインストールが成功しても、他のリージョンでは必要な参照を解決できずに失敗する可能性があります。:code:`required_databases`は、アプリがビルド、リリース、インストールされるあらゆる場所で、存在し解決可能でなければならない依存関係データベースの宣言的リストを提供することによって、このあいまいさを防ぎます。
依存関係データベースが`required_databases`で明示的に宣言されていない場合、パッケージバージョンのリリースはブロックされます。.BUILD、COMMIT、RELEASEの時点でエラーメッセージが生成され、参照されるデータベースがマニフェストの`required_databases`セクションから欠落していることが具体的に示されます。
required_databasesを使用しない場合¶
:code:`required_databases`にデータベースを含めることは以下のケースには適用されません。
:code:`shared_content/databases`にリストされているデータベースに完全に含まれるオブジェクト
マニフェスト宣言ではなく権限の付与を使用した共有(REFERENCE_USAGEを含む)
複製の制限¶
`required_databases`でのデータベースの宣言では、これらのデータベースやそのコンテンツを複製しません。依存関係を登録し、フレームワークとリストのワークフローが参照を適切に準備および解決できるようにします。
マニフェストが`required_databases`を使用する際にクロスリージョンインストールとフェイルオーバーをサポートするには、次のようにします。
依存関係データベースを特定する。`shared_content.required_databases`の各エントリに対して、ソースアカウントでどのプロバイダーが所有するデータベースにマップされているかを確認します。
依存関係ごとに複製を構成します。アプリをビルド、リリース、インストールする予定のリージョンとアカウントに対し、すべての依存関係データベースについて、データベース(またはアカウント)の複製を設定します。このステップでは、標準のSnowflake複製機能を使用します。
名前を一貫性のあるものにします。ターゲットリージョンのデータベース名が、
required_databases.で宣言する名前と完全に一致していることを確認してください。名前の不一致があると、BUILD/COMMIT/RELEASE が失敗し、参照されているデータベースが`required_databases`から欠落していることを示すエラーが発生します。複製の完了後に検証します。最初の複製と後続の更新が完了したら、ターゲットリージョンでBUILD、COMMIT、またはRELEASEのコマンドを実行します。依存関係データベースについて、未解決または欠落に関するエラーが表示される場合は、次を確認してください。
データベースが複製され、ターゲットアカウントとリージョンで利用できるようになります。
データベース名は`required_databases`の値と一致します。
それらのデータベースが依存する連鎖依存関係も複製され、正しい名前が付けられます。
データベースとアカウントの複製を構成する際のエンドツーエンドのステップとオプションについては、:doc:`/user-guide/account-replication-intro`をご参照ください.