Snowflake Data Clean Rooms 開発者ガイド

このトピックでは、Snowflakeデータクリーンルームをプログラムで作成または管理するユーザーのためのガイドラインを提供します。

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

環境のセットアップ

クリーンルーム API を効果的に使用するためにコーディング環境をセットアップするためのいくつかのヒントを紹介します。

開発ツール

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

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

  • クリーンルーム UI: クリーンルーム UI を使用してクリーンルームを構成、管理、作成します。ほとんどのクリーンルームアナリストはコードではなく UI を使用するため、 UI でのクリーンルームのエクスペリエンスを確認し、テストすることが大切です。さらに、 クリーンルーム UI でのみ利用可能な機能 がいくつかあります。

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

  • クリーンルーム API: API ドキュメントは プロバイダー および コンシューマー トピックページに分けられます。

コーディング設定

クリーンルームのコーディング環境のセットアップ方法を紹介します。

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

クリーンルーム API は、完全な API アクセスのために SAMOOHA_APP_ROLE ロールを必要とします。クリーンルーム管理者に 完全な API アクセスを付与してもらえる ように依頼します。クリーンルームは API プロシージャのサブセットへのアクセス権を持つロールの作成 もサポートしています。

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

一般的なクリーンルームの編集、作成、削除コマンドには、XSウェアハウスを使用することをお勧めします。機械学習ワークロードなどの大規模な分析を実行する場合は、より大きなウェアハウス、またはSnowparkに最適化されたウェアハウスの使用を検討してください。

-- 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 は、プロバイダーがクリーンルームを作成、構成、共有できるストアドプロシージャのセットを公開します。これらのプロシージャは、ノートブック、ワークシート、 Snowflake CLI など、Snowflakeプロシージャをサポートしているコマンドライン環境で呼び出すことができます。ここにあるドキュメントは SQL の使用法を示していますが、Pythonまたは サポートされているその他のSnowflake言語 を使用することもできます。

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

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

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

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

プロシージャの中には、プロバイダーとコンシューマー両方のバージョンがあるものがあります。結果はスキーマに適しています。たとえば provider.view_cleanrooms はプロバイダーである現在のアカウントすべてのクリーンルームを一覧表示します。 consumer.view_cleanrooms は、コンシューマーである現在のアカウントすべてのクリーンルームを一覧表示します。必要な名前空間でプロシージャを呼び出します。

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 が表示されます。

API を使用して作成されたクリーンルームは、クリーンルーム UI で Supported with Developer APIs としてラベル付けされます。

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

クリーンルームを開発するためにクリーンルーム UI を使用する必要はありません。ほとんどのクリーンルームの機能は、 API を呼び出すことで利用できます。ただし、いくつかの機能は :ref:` UI でのみ利用可能 <label-dcr_web_app_api_comparison>` であり、 UI で実行するほうが速いものもあります。また、多くのユーザーが UI のみを使用するため、クリーンルームが UI でどのように動作するかを確認することが大切です。したがって、クリーンルーム管理者に、適切なクリーンルームアカウントのクリーンルーム管理者以上として追加してもらうことを依頼する必要があります。

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

テスト用のSnowflakeアカウントに意味のある名前を付けて、一般的な使用法を示します。たとえば、「コンシューマーアカウント」、「プロバイダーアカウント」、「クロスクラウドアカウント」などです。これは、複数のテストアカウントがあり、クリーンルームのログインページでアカウントを選択する必要がある場合に役立ちます。

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

クリーンルームを自分と共有することで、開発中にクリーンルームをテストすることができます。このようなクリーンルームは、 内部テストクリーンルーム と呼ばれます。プロバイダーとコンシューマーの両方に1つのアカウントを使用すると、迅速な機能テストに役立ちます。

内部テストクリーンルームを作成するには、唯一のコンシューマーとしてプロバイダーアカウント情報を provider.add_consumers に渡します。

内部テストクリーンルームには以下の制限があります。

  • 内部テストクリーンルームは、他のアカウントと後から共有することはできません 。 内部テストクリーンルームは常に内部テストクリーンルームです。

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

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

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

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

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

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

    • 差分プライバシー

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

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

クリーンルーム環境でインストールされたものを見る

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

サンプルデータ

クリーンルーム環境は、使用できる いくつかのサンプルデータセット をインストールします。

また、Snowflakeを使用して 合成テストデータを生成 できます。

ガイドラインと推奨事項

クリーンルームで作業する際に、問題を回避するためのいくつかのガイドラインは次のとおりです。

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

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

Snowsightには同じアカウントのクリーンルーム UI を開くためのショートカットがなく、その逆もありません。そのため、各環境で同じアカウントにログインする必要があります。

Clean roomの名前とclean roomの ID

API を使用する場合、クリーンルーム名の引数を受け取るプロシージャについて、次のようにクリーンルーム名またはクリーンルーム ID を使用するかどうかを決定します。

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

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

UI の変更を行うたびにクリーンルームを更新する

UI に影響を与えるクリーンルームプロパティを変更する場合、 provider.create_or_update_cleanroom_listing を呼び出して変更を反映します。

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

API を使用してクリーンルームを作成する場合、一部の機能はクリーンルーム UI で変更できません。たとえば、Snowflakeのストックテンプレートであっても、 UI で作成したクリーンルームのコードにテンプレートを追加できません。また、差分プライバシー設定を変更することはできません。

トラブルシューティング

ここでは、一般的なトラブルシューティングのヒントをいくつかご紹介します。

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

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. フィルターを使用して、分析に関連付けられたクエリを見つけ、クエリまたは分析を選択します。

拡張例

開発者 APIs の様々な機能の使い方を理解するために、クリーンルームドキュメントの Use casesFeatures セクションの例を参考にしてください。