clean roomにアクティベーションを実装する¶
アクティベーションの概要¶
プロバイダーまたはコンシューマーは、 アクティベーション と呼ばれるプロセスで、clean roomの外部にテンプレート結果を送信することができます。Snowflakeは3タイプのアクティビティをサポートしています:
プロバイダーアクティベーション、結果がプロバイダーのSnowflakeアカウントのテーブルにプッシュされます。
コンシューマーアクティベーション、結果がコンシューマーのSnowflakeアカウントのテーブルにプッシュされます。
サードパーティアクティベーション、プロバイダーまたはコンシューマーは、 アクティベーションコネクタ を介して、結果をLiveRamp やMeta Ads ManagerなどのSnowflakeが承認したサードパーティにプッシュします。
どのような場合でも、アクティベーションをテンプレートがサポートしている必要があり、相手側はエクスポートされる自身のデータの列のアクティビティを承認する必要があります。
アクティベーションは差分プライバシーを(有効であれば)サポートし、差分プライバシーのルールとバジェットに従います。
異なるクラウドリージョンのコラボレーション相手からのデータをアクティベートするには、 クロスクラウドの自動フルフィルメントを有効化 する必要があります。
プロバイダーとコンシューマーのアクティベーション¶
clean roomを構成すると、プロバイダーまたはコンシューマーのSnowflakeアカウントにテンプレートの結果を保存できます。プロバイダーとコンシューマーの双方が、clean room外のデータのアクティベーションを承認する必要があります。
アクティベーションは、専用のアクティベーションテンプレートを使用して実装されます。clean room UI では、分析テンプレートを分析テンプレートに関連付けたり、ユーザーが分析テンプレートを実行して結果を表示し、関連付けたアクティベーションテンプレートの結果を実行およびアクティベートしたりできます。この処理は、Snowflakeが提供するAudience Overlap & Segmentationフローにより実行されます。
アクティベーションテンプレートが、関連する分析テンプレートと同一である必要はありません。アクティベーションテンプレートは多くの場合、分析テンプレートのサブセットです。
サポートされるテンプレート¶
以下のテンプレートはプロバイダーとコンシューマーのアクティベーションをサポートしています:
Audience Overlap & Segmentation
SQL クエリ (UI のみ)
サポートされる組み合わせ¶
アクティベーションはプロバイダーでもコンシューマーでも実行できます。プロバイダーとコンシューマーのアクティベーションにより、プロバイダーとコンシューマーの分析実行をさまざまに組み合わせることができます。(プロバイダーが実行する分析 について詳細をご参照ください。)
以下の組み合わせをサポートしています:
プロバイダーのアクティベーション |
コンシューマーアクティベーション |
|
---|---|---|
プロバイダーが実行 |
✅ |
❌ |
コンシューマーが実行 |
✅ |
✅ |
結果¶
プロバイダーアクティベーションの結果は、プロバイダーのアカウントの SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.PUBLIC.CONSUMER_DIRECT_ACTIVATION_SUMMARY テーブルに保存されます。
コンシューマーアクティベーションの結果は、コンシューマーのアカウントの SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.PUBLIC.PROVIDER_ACTIVATION_SUMMARY テーブルに保存されます。
データの読み方については、 結果の表示 をご参照ください。
プロバイダーまたはコンシューマーアクティベーションを実装する¶
設定
clean roomの UI 使用時にアクティベーションするには、clean roomのアカウントが アクティベーションを許可 している必要があります。
アクティベーションをプロバイダーが実行するには、clean roomは プロバイダーが実行する分析をサポートするよう構成 されている必要があります。
1.clean roomの作成または参加
clean roomを作成または参加する際、 Configure Analysis & Query ステップの Activation Settings で、どの列を自分のアカウントにアクティベートされた結果に追加するかを指定します。
2.テンプレートの実行と結果のアクティベート
分析に関連付けたアクティビティを実行するには、以下の手順に従ってください:
分析を実行します。
分析の実行後、 Results » Activate を選択します。
Activation Hub で、アクティベートするプロバイダーまたはコンシューマーアカウントの名前を選択します。
セグメンテーションのわかりやすい名前を入力する、アクティベーションの列を選択するなど、アクティベーションテンプレートに固有の情報を入力します。
セグメント名を指定します。結果セットを識別するための任意の文字列を入力してください。アクティベーションごとに異なる文字列を指定して、各実行の結果を個別にグループ化したり、入力内容を変えた複数の実行で同じセグメント名を使用し、それらの結果を組み合わせたりできます。
Push Data を選択します。
アクティベートした結果を表示する方法については、次のセクションをご参照ください。
アクティベーションのパフォーマンスは、誰が実行するかによっても、コンシューマーとプロバイダーのどちらのアクティベーションかによっても異なります。
重要
コンシューマーが初めてclean roomのプロバイダーアカウントに対してデータをアクティベートする場合、プロバイダーはそのアカウントのclean room UI にサインインし、最大30分間サインインし続けることで、データパイプラインを確立する必要があります。この作業は、1コンシューマーの1つのclean roomにつき1回のみ行う必要があります。それが完了するまでは、アクティベーションが成功しても、データはプロバイダーのアカウントに表示されません。
コンシューマーが自分のSnowflakeアカウントに結果をプッシュする方法は以下のとおりです。
プロバイダー
標準的なclean roomとして、clean roomを作成し、データセットをリンク付けして、結合ポリシーを設定します。
サポートされているSnowflake標準テンプレート を選択するか、 カスタムアクティベーションテンプレート をclean roomに追加します。このclean roomを UI で使用する場合は、テンプレートのドキュメントに記載されているように、適切なアクティベーションフィールドを持つウェブフォームを提供する必要があります。
provider.enable_template_for_consumer_activation
を呼び出して、コンシューマーアクティベーション用のテンプレートを有効にします。そのテンプレートのclean roomにアクティベーションポリシーを設定して、どのプロバイダー列をアクティベートするかを指定します。アクティビティテンプレートで使用される列は、投影されるかどうかにかかわらず、すべてアクティビティポリシーに含まれていなければなりません。
コンシューマーコラボレーターを追加し、デフォルトのリリースディレクティブをセットして、clean roomを公開します。
コンシューマー
clean roomをインストールし、データセットをリンクさせて、標準的なclean roomに対する結合ポリシーを設定します。
そのテンプレートのclean roomにアクティベーションポリシーを設定して、どのコンシューマー列をアクティベートするかを指定します。アクティビティテンプレートで使用される列は、投影されるかどうかにかかわらず、すべてアクティビティポリシーに含まれていなければなりません。
最後のパラメーターに、コンシューマーアクティベーションを示す TRUE をセットし、
consumer.run_activation
を呼び出してアクティベーションを実行します。下記のように結果を表示します。
例
以下の例をダウンロードし、Snowflakeアカウントにワークシートファイルとしてアップロードします。プロバイダー用とコンシューマー用に別々のアカウントを用意し、それぞれにclean room API をインストールする必要があります。サンプルファイルに記載されている情報を置き換えてください。
コンシューマーがプロバイダーのSnowflakeアカウントに結果をプッシュする方法は以下のとおりです。
重要
コンシューマーとプロバイダーの どちらにも clean room UI がインストールされおらず、コンシューマーがプロバイダーをアクティベートしている場合:
コンシューマー は以下の SQL コマンドを実行する必要があります:
ALTER SHARE SAMOOHA_INTERNAL_GOVERNANCE_SUMMARY_SHARE_NAV2 ADD ACCOUNTS = $provider_account_data_sharing_id;
$provider_account_data_sharing_id
がプロバイダーの データ共有アカウント識別子 である場合プロバイダー は以下のプロシージャを実行する必要があります:
CALL samooha_by_snowflake_local_db.provider.mount_provider_activations_share( $consumer_account_data_sharing_id, TRUE, FALSE);
$consumer_account_data_sharing_id
がコンシューマーの データ共有アカウント識別子 である場合
1.プロバイダー
標準的な方法でclean roomを作成します。
データセットをリンク付けします。また、プロバイダーは
samooha_by_snowflake_local_db.library.temp_public_key
テーブルをclean roomにリンク付けする必要があります。標準的な方法で結合ポリシーを設定します。
サポートされているSnowflake標準テンプレート を選択するか、 カスタムアクティベーションテンプレート をclean roomに追加します。このclean roomをclean room UI で使用する場合は、適切なアクティビティフィールドを持つ ウェブフォーム を指定する必要があります。
そのテンプレートのclean roomにアクティベーションポリシーを設定して、どのプロバイダー列をアクティベートするかを指定します。アクティビティテンプレートで使用される列は、投影されるかどうかにかかわらず、すべてアクティビティポリシーに含まれていなければなりません。
コンシューマーコラボレーターを追加し、デフォルトのリリースディレクティブをセットして、clean roomを公開します。(clean room UI がインストールされていない場合は、コンシューマーを追加した後に、
provider.setup_provider_activation_share_mount_task
を呼び出します。)
2.コンシューマー
clean roomをインストールし、データセットをリンクさせて、標準的なclean roomに対する結合ポリシーを設定します。
そのテンプレートのclean roomにアクティベーションポリシーを設定して、どのコンシューマー列をアクティベートするかを指定します。アクティビティテンプレートで使用される列は、投影されるかどうかにかかわらず、すべてアクティビティポリシーに含まれていなければなりません。
最後の引数にプロバイダーアクティベーションを示す FALSE をセットし、
consumer.run_activation
を呼び出して、アクティベーションを実行します。
3.プロバイダー
コンシューマーが初めて自分のアカウントに対してデータをアクティベートする場合、コンシューマーがデータをアクティベートした後、そのアカウントのclean room UI におよそ30分間サインインする必要があります。その後、データが自分のアカウントに表示されます。これは、1コンシューマーアカウントの1つのclean roomにつき1回のみ行われます。同じclean roomで同じコンシューマーが後でアクティベーションを行う場合、このステップは必要ありません。
結果をアカウントに保存する前に復号化する必要がありますが、それには時間がかかる場合があります。復号化タスクは60分後にタイムアウトします。タイムアウトした場合は、 provider.update_activation_warehouse を呼び出して、復号化に使用するウェアハウスのサイズを増やします。
下記のように結果を表示します。
例
以下の例をダウンロードし、Snowflakeアカウントにワークシートファイルとしてアップロードします。プロバイダー用とコンシューマー用に別々のアカウントを用意し、それぞれにclean room API をインストールする必要があります。サンプルファイルに記載されている情報を置き換えてください。
プロバイダーが自分のSnowflakeアカウントに結果をプッシュする方法は以下のとおりです。これは、カスタムテンプレート、プロバイダーが実行する分析、プロバイダーアクティベーションなど、いくつかのテクニックを組み合わせたもので、プロバイダーとコンシューマーの間でリクエストと承認が何度も繰り返されます。
1.プロバイダー
標準的なclean roomとして、clean roomを作成し、データセットをリンク付けして、結合ポリシーを設定しますが、 例外として、テーブル
samooha_by_snowflake_local_db.library.temp_public_key
でリンクさせる必要があります。プロバイダーが実行するデータは暗号化されており、結果の暗号化と復号化を可能にしています。サポートされているSnowflake標準テンプレート を選択するか、 カスタムアクティベーションテンプレート をclean roomに追加します。このclean roomを UI で使用する場合は、テンプレートのドキュメントに記載されているように、適切なフィールドを持ちアクティベーションをサポートするウェブフォームを指定する必要があります。
そのテンプレートのclean roomにアクティベーションポリシーを設定して、どのプロバイダー列をアクティベートするかを指定します。アクティビティテンプレートで使用される列は、投影されるかどうかにかかわらず、すべてアクティビティポリシーに含まれていなければなりません。
標準的な方法でコンシューマーコラボレーターを追加します。clean room UI がインストールされていない場合は、ユーザーを追加した後に
provider.setup_provider_activation_share_mount_task
を呼び出す必要があります。
provider.enable_provider_run_analysis
を呼び出すことで、プロバイダーが実行する分析をclean roomで有効にします。これは、コラボレーターを追加した 後 で、かつコラボレーターがclean roomをインストールする 前 に行う必要があります。コンシューマーがclean roomをインストールした後にこの設定を変更する場合、コンシューマーはこの変更を適用するためにclean roomを再びインストールする必要があります。デフォルトのリリースディレクティブを設定し、通常どおりclean roomを公開します。
2.コンシューマー
標準的なclean roomとして、clean roomをインストールし、データセットをリンク付けして、結合ポリシーを設定します。
そのテンプレートのclean roomにアクティベーションポリシーを設定して、どのコンシューマー列をアクティベートするかを指定します。アクティビティテンプレートで使用される列は、投影されるかどうかにかかわらず、すべてアクティビティポリシーに含まれていなければなりません。
3.プロバイダー
provider.request_provider_activation_consent
を呼び出して、アクティベーションテンプレートを実行するための許可をコンシューマーにリクエストしてください。
4.コンシューマー
consumer.enable_templates_for_provider_run
を呼び出し、このclean roomで指定されたテンプレートを実行するための許可をプロバイダーに付与します。
consumer.approve_provider_activation_consent
を呼び出し、このclean roomで指定されたテンプレートから結果をアクティベートするための許可をプロバイダーに付与します。
5.プロバイダー
provider.mount_request_logs_for_all_consumers
を呼び出し、プロバイダーアクティベーションでのコンシューマーデータの共有を有効にします。
provider.submit_analysis_request
を呼び出して、アクティベーションテンプレートを実行します。リクエストがログに表示されるまで数分かかります。provider.check_analysis_status
を呼び出してステータスをチェックしてください。ステータスが SUCCESS と報告された後でも、結果が復号化されてプロバイダーのSnowflakeテーブルに書き込まれるまで、さらに時間がかかります。復号化されたすべてのデータが、結果テーブルに一度に追加されます。セグメントやアクティベーション ID の結果テーブルを定期的にチェックしてください。 復号化タスクは60分後にタイムアウトします。タイムアウトした場合は、 provider.update_activation_warehouse を呼び出して、復号化に使用するウェアハウスのサイズを増やします。注釈
コンシューマーが承認した後にテンプレートを変更するには、以下の手順を実行する必要があります。実行しない場合、
provider.submit_analysis_request
は最後に承認されたバージョンのテンプレートを実行し続けます。
プロバイダーは、
provider.add_custom_sql_template
を呼び出してテンプレートを更新します。create_or_update_cleanroom_listing
を再度呼び出す必要はありません。コンシューマーが
consumer.enable_templates_for_provider_run
を呼び出します。コンシューマーが
consumer.approve_provider_activation_consent
を呼び出します。テンプレートが更新され、プロバイダーアクティベーションが可能になります。
よくあるエラー
Object cleanroom_name.CLEANROOM.TEMP_RESULT_DATA does not exist or not authorized
- 何らかの理由で仮結果テーブルを生成できませんでした。テンプレートの SQL エラーか、テンプレートが明示的にテーブルを生成していない可能性があります。エラーの詳細をご覧ください。Query validation checks failed
- アクティベーション・ポリシーにない列がテンプレートで使用されています。
例
以下の例をダウンロードし、Snowflakeアカウントにワークシートファイルとしてアップロードします。プロバイダー用とコンシューマー用に別々のアカウントを用意し、それぞれにclean room API をインストールする必要があります。サンプルファイルに記載されている情報を置き換えてください。
プロバイダーとコンシューマーのアクティベーション結果を表示する¶
アクティベーション結果の場所と形式¶
プロバイダーのアクティベーション結果はすべて、Snowflake指定のテーブルに追加されます。テーブルの各行は、クエリ結果の行にマッピングされます。追加のクエリ結果はテーブルに追加されます。アクティベーションごとに一意である ACTIVATION_ID 列と、アクティベーション実行ごとに呼び出し元が指定する SEGMENT 列によって、異なる実行を区別できます。
プロバイダーのアクティベーション結果 は、プロバイダーのアカウントの SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.PUBLIC.PROVIDER_ACTIVATION_SUMMARY に保存されます。
コンシューマーのアクティベーション結果 は、コンシューマーのアカウントの SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.PUBLIC.CONSUMER_DIRECT_ACTIVATION_SUMMARY に保存されます。
これらのテーブルには以下の列があります:
- USER_ID:
JSON 形式の1行の結果。キーが列名、値がその行のその列の値。このオブジェクトはまた、テンプレートに渡される各引数の列を含みます。
- ACTIVATION_ID:
リクエストごとに一意な ID 。ID は、アクティベーションリクエストに成功した場合に返されます。この列でフィルターをかけると、同じアクティベーションのすべての結果を取得できます。また、複数の実行で同じセグメント名を再利用する場合は、 SEGMENT でフィルターをかけることができます。これは、
submit_analysis_request
またはrun_activation
が返すクエリリクエスト ID と同じです。- CLEANROOM_NAME:
クエリが実行されたclean roomの名前。
- CONSUMER:
(プロバイダーアクティベーションのみ) このアクティベーションを承認したコンシューマー。
- PROVIDER:
(コンシューマーアクティベーションのみ) このアクティベーションを承認したプロバイダー。
- SEGMENT:
アクティベーション実行時に割り当てる任意の文字列値。この列を使用すると、複数のクエリを実行した結果を結合できます。
- TIMESTAMP:
アクティビティが実行されたとき。
プロバイダーアクティベーションの例
SELECT * FROM SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.PUBLIC.PROVIDER_ACTIVATION_SUMMARY WHERE segment = 'my_segment';
USER_ID | CLEANROOM_NAME | SEGMENT | CONSUMER | TIMESTAMP | ACTIVATION_ID
"{""AGE_BAND"":55,""ITEM_COUNT"":2328,""STATUS"":""MEMBER""}" | test activation | my_segment | ABC1234 | 2025-04-01 16:27:14.068 | cleanroomactivationdataanalysisresults20250401231728469
"{""AGE_BAND"":20,""ITEM_COUNT"":88,""STATUS"":""PLATINUM""}" | test activation | my_segment | ABC1234 | 2025-04-01 16:27:14.068 | cleanroomactivationdataanalysisresults20250401231728469
"{""AGE_BAND"":80,""ITEM_COUNT"":18,""STATUS"":""GOLD""}" | test activation | my_segment | ABC1234 | 2025-04-01 16:27:14.068 | cleanroomactivationdataanalysisresults20250401231728469
...
プロバイダーまたはコンシューマーのアクティベーション結果を読み取る¶
適切な SQL コマンドを実行して、Snowflake アカウントにアクティベートされた結果を表示します:
プロバイダーアクティベーションの結果を表示
SELECT *
FROM SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.PUBLIC.PROVIDER_ACTIVATION_SUMMARY
[WHERE segment = <SEGMENT_NAME>] [AND activation_id = <ACTIVATION_ID>];
コンシューマーアクティベーションの結果を表示
SELECT *
FROM SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.PUBLIC.CONSUMER_DIRECT_ACTIVATION_SUMMARY
[WHERE segment = <SEGMENT_NAME>] [AND activation_id = <ACTIVATION_ID>];
各行のデータは、 USER_ID
列のオブジェクトに結合されます。次のようなクエリを使用して結果をフラット化できます:
-- Assuming columns AGE_BAND, STATUS, and ITEM_COUNT
SELECT
item:"AGE_BAND",
item:"STATUS",
item:"ITEM_COUNT"
FROM (SELECT parse_json(user_id)
AS item
FROM SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.PUBLIC.PROVIDER_ACTIVATION_SUMMARY
WHERE segment = $segment_name)
ORDER BY item:"AGE_BAND", item:"STATUS" ASC
LIMIT 20 ;
最新の結果10行をSnowsightに表示する:
Snowsightを開き、 Data » Database に移動します。
プロバイダーアクティベーションの場合は、
SAMOOHA_BY_SNOWFLAKE_LOCAL_DB
»PUBLIC
»Tables
»PROVIDER_ACTIVATION_SUMMARY
に移動します。コンシューマーアクティベーションの場合は、
SAMOOHA_BY_SNOWFLAKE_LOCAL_DB
»PUBLIC
»Tables
»CONSUMER_DIRECT_ACTIVATION_SUMMARY
に移動します。Data Preview を選択します。
サードパーティアクティベーション¶
サードパーティアクティベーションは、 サードパーティアクティベーションコネクタ を使用して、Snowflakeが承認したサードパーティのアカウントにクエリ結果をデポジットします。
サードパーティアクティベーションは、clean room UI でのみサポートされ、カスタムテンプレートは使用できません。
clean room UI 使用中のアクティベーションは、clean roomのアカウント がアクティベーション を許可する場合のみサポートされます。
clean room管理者は、サードパーティのアクティビティコネクタをサポートするように環境を構成し、許可されたコネクタを選択して、それらを構成してから、clean roomで使用する必要があります。
サードパーティアクティベーションは、コンシューマーとプロバイダーの両方が実行する分析をサポートします。
サポートされるテンプレート¶
以下のテンプレートは、サードパーティアクティベーションをサポートしています:
Audience Overlap & Segmentation
SQL クエリ
サードパーティアクティベーションを実装する¶
clean roomを作成または結合する: clean roomを作成または結合する際、 Configure Analysis & Query ステップの Activation Settings で、どの列を自分のアカウントにアクティベートされた結果に追加するかを指定します。
結果をのアクティベート
分析を実行します。
分析の実行後、 Results » Activate を選択します。
Activation Hub で、アクティベートするサードパーティプロバイダーの名前を選択します。
プロバイダー固有の情報を入力します。たとえば、わかりやすい名前を指定したり、アクティベートする列を選択したりします。ページのツールチップには、そのプロバイダーの追加情報が表示されます。
Push Data を選択します。