アプリ仕様でデータ共有をリクエストする¶
このトピックでは、Snowflake Native App の仕様を構成して、リストを介してプロバイダーまたはサードパーティとのデータ共有許可をリクエストする方法について説明します。これにより、コンプライアンスレポート、テレメトリー共有、データ前処理などのユースケースが可能になります。
データ共有のためのアプリ仕様ワークフロー¶
リストを使用してデータを共有するようにアプリを構成するには、次の一般的なワークフローに従います。
プロバイダーは、アプリの :doc:` 権限の自動付与 <requesting-auto-privs>` 構成します。これにより、コンシューマーはアプリに共有やリストを作成する権限を与えることができます。
注釈
アプリの仕様ではマニフェストファイルに
manifest_version = 2を設定する必要があります。プロバイダーは CREATESHARE および CREATELISTING 権限 マニフェストファイルに追加します。
プロバイダーが追加 必要に応じて、次のオブジェクトを作成するためにセットアップスクリプトに SQL のステートメントを実行します。
セットアップスクリプトは、アプリがインストールまたはアップグレードされたときに共有とリストを作成します。アプリの仕様は、セットアップ中に作成することも、実行時にストアドプロシージャを通じて作成することもできます。
アプリを構成する場合、コンシューマーはリストのターゲットアカウントと自動フルフィルメントの設定を確認して承認します。自動フルフィルメントの設定は、クロスリージョンの共有にのみ適用されます。コンシューマーがアプリ仕様を表示し、承認する方法については、 アプリの仕様を使用した外部リソースへの接続の承認 をご参照ください。
データ共有のためのアプリ仕様定義¶
タイプ LISTING のアプリ仕様の場合、アプリ仕様定義には以下のエントリが含まれます。
TARGET_ACCOUNTS:データ共有するターゲットアカウントのコンマ区切りリスト(一重引用符で囲む)。各アカウントはOrgName.AccountNameの形式で指定する必要があります。例:'ProviderOrg.ProviderAccount,PartnerOrg.PartnerAccount'LISTING:アプリによって作成されたリストオブジェクトの識別子。AUTO_FULFILLMENT_REFRESH_SCHEDULE:オプション。クロスリージョンデータ共有のリフレッシュスケジュール。<num>MINUTEまたはUSINGCRON<expression>として指定可能です。
注釈
アプリ仕様のリスト名は、アプリによって作成された既存のリストと一致する必要があります。これが設定されると、リスト名を変更できません。
マニフェストファイルのバージョンを指定します。¶
アプリに対する権限の自動付与を有効にするには、次の例に示すように、マニフェストファイルの先頭でバージョンを設定します。
manifest_version: 2
外部リストを作成する¶
共有に添付された外部リストを作成するには、次の例に示すように CREATE LISTING コマンドをセットアップスクリプトに追加します。
CREATE EXTERNAL LISTING compliance_listing SHARE compliance_share AS $$ title: "Compliance Data Share" subtitle: "Regulatory compliance reporting data" description: "Share compliance and audit data with authorized accounts" listing_terms: type: "OFFLINE" $$ PUBLISH = FALSE REVIEW = FALSE;
注釈
アプリは、アプリケーションパッケージではなく、共有のみをリストに添付できます。
アプリは、ターゲットアカウントや自動フルフィルメント構成をリストに直接追加することはできません。
リストマニフェストには、title、subtitle、description、listing_termsのプロパティのみを含めることができます。
すべての新しいリストは、PUBLISH および REVIEW の両方を FALSE に設定して、未公開の状態で作成する必要があります。
リストのタイトルと説明は、コンシューマー情報に基づいてカスタマイズできるため、プロバイダーはデータソースを区別できます。
リストのアプリ仕様の作成¶
リストのアプリ仕様を作成するには、この例に従います。
ALTER APPLICATION SET SPECIFICATION shareback_spec TYPE = LISTING LABEL = 'Compliance Data Sharing' DESCRIPTION = 'Share compliance data with provider for regulatory reporting' TARGET_ACCOUNTS = 'ProviderOrg.ProviderAccount,AuditorOrg.AuditorAccount' LISTING = compliance_listing AUTO_FULFILLMENT_REFRESH_SCHEDULE = '720 MINUTE';このコマンドは、指定されたターゲットアカウントとデータを共有する許可をリクエストする
shareback_specという名前のアプリ仕様を作成します。
クロスリージョンの共有の場合
AUTO_FULFILLMENT_REFRESH_SCHEDULEパラメーターは必須です。次のいずれかの値に設定できます。'<num> MINUTE':分数(最低10分)最大8日間または11520分(8日間)
'USING CRON <expression> <time_zone>':タイムゾーン付きCRON式
注釈
アプリは、リストと共有オブジェクトが存在した後にのみアプリ仕様を作成する必要があります。
各リストには、関連するアプリ仕様を1つだけ指定できます。
ターゲットアカウントを更新すると、コンシューマーの承認を得るために新しい保留中のリクエストが作成されます。
リスト構成の検証¶
アプリは、以下のコマンドを実行することで、承認後にリストが適切に構成されたことを検証できます。
-- Check if the app specification is approved:
SHOW APPROVED SPECIFICATIONS IN APPLICATION;
-- Validate the listing configuration:
DESC LISTING compliance_listing;
コンシューマー承認ワークフロー¶
LISTING アプリ仕様のコンシューマー承認がこのワークフローをトリガーします。
Snowflakeは、ターゲットアカウントを自動的にリストに追加します。
指定された場合、Snowflakeは自動フルフィルメントの更新スケジュールを構成します。
リストはターゲットアカウントに表示されます。
リストに添付されたデータは、承認されたアカウントからクエリできます。
LISTING アプリ仕様のコンシューマーによる拒否がこのワークフローをトリガーします。
リストは非公開になり、既存のターゲットアカウントはリストから削除されます。
自動フルフィルメントが無効になっています。
リストは、ターゲットアカウントには表示されなくなります。
LISTING アプリ仕様を使用するためのベストプラクティス¶
アプリの仕様を介してデータ共有を実装する場合は、次のベストプラクティスを考慮します。
共有の整合性: Snowflakeは、アプリケーションによって作成された共有をコンシューマーが変更することを防ぐことはできません。その結果、プロバイダーは、基礎となる共有データの整合性を保護するための対策を実施する責任があります。
エラー処理: アプリ仕様が却下された場合や、まだ承認されていない場合に、適切なエラー処理を実装します。
クロスリージョンの考慮事項: アプリのプロバイダーは、データの鮮度要件とコスト考慮のバランスをとるリフレッシュスケジュールを設定する責任があります。リストの自動フルフィルメントのコストはアプリのコンシューマーに請求されますが、アプリのコンシューマーの不要なコストを最小限に抑えるために、プロバイダーはコストを認識してスケジュールを選択する必要があります。
コンプライアンス: アプリ仕様の説明に、共有するデータと共有する理由を明確に文書化します。
LISTING アプリ仕様でのコールバック関数の使用¶
アプリは、マニフェストファイルに以下のコードを追加することで、ライフサイクルコールバックを使用して、コンシューマーがリスト仕様を承認または却下した場合に応答することができます。
lifecycle_callbacks:
specification_action: callbacks.on_spec_update
セットアップスクリプトで、次のコールバックストアドプロシージャを追加します。
CREATE OR REPLACE PROCEDURE callbacks.on_spec_update (
name STRING,
status STRING,
payload STRING)
RETURNS STRING
LANGUAGE SQL
AS
$$
BEGIN
IF (name = 'shareback_spec' AND status = 'APPROVED') THEN
-- Start populating shared tables
CALL populate_compliance_data();
ELSEIF (name = 'shareback_spec' AND status = 'DECLINED') THEN
-- Clean up or notify provider
CALL cleanup_share_data();
END IF;
RETURN 'Processed specification update';
END;
$$;
プロシージャにより、アプリはアプリのデータ共有リクエストに関するコンシューマーの決定に適切に対応することができます。
制限事項¶
このセクションでは、アプリ仕様を使用する際の制限について説明します。
- 監査
Snowflakeは、アプリがプロバイダーと共有するデータに対する組み込みの監査を提供していません。コンシューマーに監査追跡を含むコンプライアンスまたは規制要件がある場合は、プロバイダーと直接調整して、独自の個別のモニターソリューションを実装する必要があります。
- アプリケーション内からの共有
リストの自動フルフィルメントはこの方法で共有されるデータでは現在サポートされていないため、Snowflakeはアプリケーション内から直接プロバイダーとのデータ共有を推奨しません。