Snowflake Data Clean Rooms 開発者ガイド

このページでは、Snowflakeでclean roomやテンプレートを作成または管理するプログラムを作成する必要のあるユーザー向けのガイドラインを示します。

Snowflakeは、clean roomを作成または制御するアプリケーションの開発を可能にするストアドプロシージャを公開しています。これらのストアドプロシージャは、Snowsightノートブックやワークシート、 Snowflake CLI など、clean room環境に関連付けられたSnowflakeアカウントへのアクセスが可能なインターフェイスで実行されます。これらのプロシージャは、 SQL、またはSnowflakeインターフェイスがサポートする任意の言語で呼び出すことができます。

環境のセットアップ

開発ツール

clean room用の主な開発ツールを以下に示します:

  • コーディング環境: Snowflakeアカウントでストアドプロシージャを実行できる環境であれば、どのようなコーディング環境でもかまいません。ほとんどの開発者は、Snowsight(ブラウザベースのツール)または Snowflake CLI を使用しています。

  • clean room UI: clean room UI を使用して、clean roomの構成、管理、作成を行います。ほとんどのclean roomアナリストは、コードではなく UI を使用しています。したがって、 UI でclean roomの使用感を確認し、テストすることをお勧めします。また、 clean room UI でのみ使用できる機能 もいくつかあります。

  • Snowsight は、データベースやその他のオブジェクトを探索したり、検索したりするのに便利です。

コーディング設定

必要なロールとウェアハウス

clean room API には、 API にフルにアクセスするための SAMOOHA_APP_ROLE ロールが必要です。clean room管理者に、 API へのフルアクセスを許可するよう依頼してください。

Clean roomは、 API プロシージャのサブセットへのアクセスを持つロールの作成 もサポートしています。

SAMOOHA_APP_ROLE を使用できるウェアハウスでクリーンルーム API を使用する必要があります。app_wh は API へのアクセス権がある 多くのウェアハウス のうちのひとつです。ニーズに合わせて適切なウェアハウスを選択してください。

-- Set up environment.
USE ROLE samooha_app_role;
USE WAREHOUSE app_wh;

-- Call your clean rooms API functions.
...
Copy

他のウェアハウスを使用する場合は、必ずそのウェアハウスに SAMOOHA_APP_ROLE の使用を許可してください:

GRANT USAGE ON WAREHOUSE <your warehouse> TO SAMOOHA_APP_ROLE;`
Copy

clean room API について

Snowflake Data Clean Rooms は、プロバイダーによるclean roomの作成、構成、共有を可能にするストアドプロシージャのセットを公開します。これらのプロシージャには、ノートブック、ワークブック、Snowflake CLI など、Snowflake プロシージャをサポートするすべてのコマンドライン環境からアクセスできます。ストアドプロシージャをサポートしていれば、どの言語でもclean room API を使用できます。このドキュメントでは SQL を使用しますが、Pythonおよび その他のサポート対象言語 も使用できます。

プロシージャは以下のスキーマ内に存在します。

  • samooha_by_snowflake_local_db.provider - プロバイダー固有のプロシージャ.これらのプロシージャは、現在のアカウントによって作成されたclean roomに対してのみ呼び出すことができます。

  • samooha_by_snowflake_local_db.consumer - コンシューマー固有のプロシージャ.これらのプロシージャは、現在のアカウントがコンシューマーとして招待されたクリーンルームに対してのみ呼び出すことができます。

  • samooha_by_snowflake_local_db.library - クリーンルーム作成者(プロバイダー)またはクリーンルームコラボレーター(コンシューマー)のどちらかによって呼び出される一般的なプロシージャ。(これらについて、プロバイダーとコンシューマーの両方のリファレンスページに記載されています)。

プロバイダーとコンシューマーの両方のバージョンを持つプロシージャもあります。スキーマごとに適切な結果が生成され、たとえば、 provider.view_cleanrooms であれば、プロバイダーとしての現在のアカウントのすべてのclean roomの一覧が生成され、 consumer.view_cleanrooms であれば、コンシューマーとしての現在のアカウントのすべてのclean roomの一覧が生成されます。・

API プロシージャのclean roomの名称について

clean room API プロシージャの多くは cleanroom_name 引数を取ります。

  • クリーンルームが** API を使用して作成された**ものである場合、クリーンルーム :emph:` 名 `を使用します。パッケージ名の一部として使用する場合は、スペースをアンダースコアに置き換えます。

    -- Spaces work here:
    CALL samooha_by_snowflake_local_db.provider.describe_cleanroom('my code created clean room');
    
    -- Underscores required here:
    SHOW VERSIONS IN APPLICATION PACKAGE SAMOOHA_CLEANROOM_my_code_created_clean_room;
    
    Copy
  • クリーンルームが**クリーンルーム UI を使用して作成された**ものである場合、クリーンルーム ID を使用します。

describe_cleanroom または view_cleanrooms を呼び出すと、クリーンルーム名と ID が表示されます。

アカウント、ユーザー、ロールのセットアップ

クリーンルームを開発するためにクリーンルーム UI を使用する必要はありません。ほとんどのクリーンルームの機能は、ストアドプロシージャを使用して利用可能です。ただし、いくつかの機能は :ref:` UI でのみ利用可能<label-dcr_web_app_api_comparison>` であり、UI で実行するほうが速いものもあります。また、多くのユーザーが排他的に UI を使用するため、特に、作成したクリーンルームのユーザー構成ウェブフォームを作成する場合は、クリーンルームが UI 内でどのように動作するかを確認することが重要です。したがって、クリーンルーム管理者に、適切なクリーンルームアカウントのクリーンルーム管理者以上として追加してもらうことを依頼する必要があります。

ユースケースに応じて、異なるウェブホスティング地域に追加のSnowflakeアカウントを設定し、 クロスクラウドの動作 をテストしてもよいかもしれません。

テスト用のSnowflakeアカウントには、"コンシューマーアカウント"、"プロバイダーアカウント"、"クロスクラウドアカウント"など、目的をわかりやすく示す名前を付けてください。そうすれば、複数のテストアカウントがある場合に、どのアカウントにサインインすればよいかがすぐにわかります。

内部テストクリーンルーム

同じSnowflakeアカウントを使用し、プロバイダーとコンシューマーの両方として行動することで、クリーンルームの開発をテストすることができます。これは*内部テストクリーンルーム*と呼ばれます。内部テストクリーンルームを作成するには、唯一のコンシューマーとしてプロバイダーアカウントを provider.add_consumers に渡します。プロバイダーとコンシューマーの両方が単一のアカウントを使用すると、迅速な機能テストに便利ですが、内部テストクリーンルームには以下の制限があることに注意してください。

  • クリーンルームがプロバイダーのアカウントと共有されている場合、他のアカウントと共有することはできず、常に内部テストクリーンルームになります

  • 以下の機能は内部テストクリーンルームではサポートされていません。

    • consumer.view_cleanrooms は内部テストクリーンルームを表示しません。

    • プロバイダーのアクティベーション

    • プロバイダー実行の分析

    • リクエストログのマウントまたは表示(provider.mount_request_logs_for_all_consumers または provider.view_request_logs

    • コンシューマー定義のテンプレート

    • マルチプロバイダー分析

    • カスタムテンプレート(プロバイダーまたはコンシューマー)

    • 差分プライバシー

    内部テストルームでサポートされていない機能をテストしたい場合は、クリーンルームの両側をテストするために、プロバイダーとコンシューマーのSnowflakeアカウントを別々に設定する必要があります。

プロバイダーとコンシューマーの両方が単一のアカウントでクリーンルームを使用することを示す、サンプルワークブック をダウンロードします。

ガイドラインと推奨事項

clean room UI とコードで同じアカウントを使用していることを確認する

同じSnowflakeアカウントでコーディング環境とclean room UI を開くことも少なくありません(たとえば、コードでclean roomを作成し、その表示をclean room UI で確認する場合など)。その場合は、同じSnowflakeアカウントをそれぞれに使用しているかを確認することが重要です。

Snowsightには、同じアカウントでclean room UI を開くためのメニューはなく、その逆も同様であるため、clean room UI とSnowsightが同じアカウントで開いていることを確認する必要があります。

Clean roomの名前とclean roomの ID

API を使用する場合、プロシージャに cleanroom_name 引数を使用し、clean roomの名前と ID のどちらを使用するかを定義する必要があります:

  • API を使用してclean roomを作成した場合は、clean roomの 名前 を使用します。

  • クリーンルームがクリーンルーム UI 内に作成された場合はクリーンルーム**ID**を使用します。provider.view_cleanrooms または provider.describe_cleanroom を呼び出すと、クリーンルーム名と ID の両方を見ることができます。

clean roomの変更時に更新する

clean roomの設定(テンプレート、権限、ポリシーなど)を変更し、それを有効にするには、 provider.create_or_update_cleanroom_listing を呼び出します。場合によっては、このプロシージャを呼び出さなくても、変更されたように見える場合がありますが、 provider.create_or_update_cleanroom_listing を呼び出すまで変更が正しく適用されません。

コードまたは UI で作成されたclean roomの相互運用性

API でclean roomを作成すると、一部の機能をclean room UI で変更できなくなります。例えば、 UIで作成したclean roomのコードにテンプレートを追加することは(Snowflakeのストックテンプレートであっても)できません。また、差分プライバシー設定も変更できません。

clean roomのオブジェクトについて

Snowflake Data Clean Roomsは、インストール時に多くのローカルデータベースを作成します。クリーンルームパッケージで実行またはインストールされるタスクとオブジェクトの詳細は、Snowflake Data Clean Rooms: インストールされたオブジェクト で確認できます。

SAMOOHA_BY_SNOWFLAKE.TEMPLATES.TEMPLATES:

このアカウントのclean roomで利用可能なSnowflakeのすべてのストックテンプレートのリストと定義を保持します。

トラブルシューティング

コンシューマーは、結合済みクリーンルームで結合ポリシーを設定したり、他の基本的なアクションを実行したりすることはできません。

clean roomが適切なロール (SAMOOHA_APP_ROLE) でインストールされたことを確認してください。clean roomをインストールする際に SAMOOHA_APP_ROLE を使用していない場合、アクセス許可のエラーをはじめとする多くの問題が発生します。そのの場合は consumer.uninstall_cleanroom までもがエラーになり、clean roomをアンインストールしてから正しいロールで再インストールするという面倒な手間が必要になります。

-- Who owns the clean room?
SHOW SHARES LIKE 'SAMOOHA_CLEANROOM_REQUESTS_<cleanroom_name>';

-- If the owner role is not SAMOOHA_APP_ROLE, you must drop the share, then
-- uninstall the clean room.
DROP SHARE SAMOOHA_CLEANROOM_REQUESTS_<cleanroom_name>;
CALL samooha_by_snowflake_local_db.consumer.uninstall_cleanroom($cleanroom_name);
USE ROLE samooha_app_role;
CALL samooha_by_snowflake_local_db.consumer.install_cleanroom($cleanroom_name, '<provider_locator>');
Copy

自分で作ったclean roomが見つからない

アカウントでclean roomを作成したのに、コラボレーターのアカウントで表示されない場合、以下の理由が考えられます:

  • clean roomが別のクラウドホスティングリージョンで作成され、 クロスクラウド自動フルフィルメント を有効にしていない。

  • provider.create_or_update_cleanroom_listing を呼び出してclean roomを公開していない。

  • provider.view_cleanrooms() ではなく、 consumer.view_cleanrooms() を呼び出している(またはその逆)。

  • clean roomを共有していないか、間違ったアカウントでclean roomを共有しているか、またはSnowsight/Clean roomの UI/CLI を間違ったコラボレーターアカウントで開いている。clean roomが表示されるアカウントが、clean roomを共有したアカウントであり、その共有アカウントでサインインしたことを確認してください。

  • clean roomを公開した後、それがコラボレーターに表示されるまで多少時間がかかります。

不明な関数

プロシージャを呼び出して、次のスニペットのようなエラーが発生した場合。

Unknown user-defined function SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.CONSUMER.<procedure name>

考えられる原因はいくつかあります。

間違った名前空間を入力してしまった。

プロシージャのバージョン( consumer または provider )を正しく判断して呼び出してください。多くのプロシージャには、プロバイダーとコンシューマーの両方のバージョンがあります。

関数の名前を誤入力してしまった。

適切な名前については、リファレンスガイドを確認してください。

制限付きアクセス実行ロールが付与されていますが、呼び出した関数はあなたのロールで許可されていません。

次の SQL コードを実行してこれをテストします。

USE DATABASE samooha_by_snowflake_local_db;
CALL IS_DATABASE_ROLE_IN_SESSION('samooha_run_role');
Copy

コードスニペットが TRUE を返す場合、クリーンルーム API での制限付きアクセス 実行ロール 権限があります。より広範囲なアクセスが必要な場合は、クリーンルーム管理者にフルアクセスを依頼してください。許可された実行ロールプロシージャのリストは、consumer.grant_run_on_cleanrooms_to_role ドキュメント をご参照ください。

SAMOOHA_APP_ROLE がない

SAMOOHA_APP_ROLE が使用できるかどうかを確認するには、次のコマンドを実行します。

-- Get current user name.
SELECT current_user();

-- Add current user name in place as indicated.
SHOW GRANTS TO USER <current_user_name> ->> select * from $1 where "role" = 'SAMOOHA_APP_ROLE';
Copy

結果が得られない場合は、管理者に API クリーンルームへのアクセス付与を依頼してください。

ユーザーがクリーンルームをインストールしているかどうかを確認する

指定したユーザーが指定したクリーンルームをインストールしているかどうかは、以下の SQL コードを実行することで確認できます。$consumer_locator および $cleanroom_name をコンシューマーロケーターとクリーンルーム名に置き換えます。

SELECT * FROM snowflake.data_sharing_usage.application_state
  WHERE consumer_account_locator = $consumer_locator
    AND CONTAINS(package_name, UPPER(REPLACE($cleanroom_name, ' ', '_')));
Copy

クエリや分析履歴の確認

UI またはコードで実行した分析のクエリ履歴を確認できます。これらの履歴は個別に保存され、チェックされます。

UI 分析履歴

クリーンルーム UI は、このアカウントの Analyses & Queries ページにある以前の分析リストをすべて表示します。これらは、UI で実行されたクエリの結果に限られます。

クリーンルームを変更または削除すると、そのクリーンルームに対する UI の分析レポートは、以下のテンプレートを使用しない限り削除されます。

  • Audience Overlap & Segmentation

  • SQL Query

  • カスタムテンプレート。

上記のテンプレートのクエリ履歴は、クリーンルームが変更または削除されても保持されます。

API のクエリ履歴

テンプレート分析を含む、API を使用して実行されたすべての呼び出しのアカウント履歴を確認するには、以下を実行します。

  1. Snowsight にサインインします。

  2. Monitoring » Query History を選択します。

  3. フィルターを使用して、分析に関連付けられたクエリを見つけ、クエリまたは分析を選択します。

拡張例

clean roomのドキュメントにある Use cases セクションの例を参照し、開発者 APIs の様々な機能の使い方を理解するために役立ててください。