clean roomテーブルのポリシーを理解する

Clean roomでは、コラボレーターによるデータの使用を制御するためのデータポリシーをいくつか使用できます。これらは、clean roomにリンクされた基になるテーブルにセットされているSnowflakeテーブルポリシーに追加されます。基になるテーブルのポリシーを変更すると、clean room内のリンクされたビューに伝搬されます。その際 create_or_update_cleanroom_listing を呼び出したり、ソーステーブルを再リンクする必要はありません。

clean room内の各コラボレーターは、それぞれのデータに対してポリシーを独自にセットします。

注釈

テーブルをclean roomにリンクすると、ソーステーブルのSnowflakeテーブルポリシーがclean room内のリンクされたテーブルに適用されますが、clean room API または UI がこれらのポリシーを必ずしも報告するわけではありません。例えば、 Snowflakeの結合ポリシー はclean roomで継続的に適用されますが、その結合ポリシーは consumer.view_provider_join_policyconsumer.view_join_policy を呼び出しても表示されません。したがって、基になるリンクテーブルからポリシーを削除するか、同等のclean roomポリシーを作成するか(存在する場合)、これらのポリシーの存在をコラボレーターに明確に伝えて、クエリが失敗したり、予期しない振る舞い(列を結合できない理由がわからないなど)をしたりしないようにする必要があります。

Clean roomのポリシーは、clean room API または UI を使用してセットできます。

Snowflakeプライバシーポリシー により、保護されたテーブルへのビューの作成が妨げられるため、プライバシーポリシーがセットされたテーブルへのリンクはできません。

Clean roomは、以下のポリシーを公開しています:

Clean roomポリシー

説明

同等のSnowflakeポリシー

結合ポリシー

結合を許可する列を指定します。

結合ポリシー

列のポリシー

投影を許可する列を指定します。

投影ポリシー

アクティベーションポリシー

clean roomからのエクスポートを許可する列を指定します。

同等のSnowflakeポリシーはありません。

Snowflake集計ポリシーが適用されう

クエリで集約される行数と、グループごとの最小行数が必要です。

集計ポリシー

結合ポリシー

clean roomの結合ポリシーは、テーブルのどの列の結合を、clean roomの すべての テンプレートで許可するかを指定します。結合ポリシーはclean roomレベルでセットされます。

結合ポリシーの列を投影することはできません(列をclean room結合ポリシーと列ポリシーの両方で指定することはできません)。結合列の投影を許可したい場合は、結合ポリシーをclean roomの外部に、投影ポリシーをclean roomの内部に(またはその逆に)セットします。

結合ポリシー列はアクティベーションポリシー列にもなり得ます。

Clean roomの結合ポリシーは、(結合 しなければならない 列を指定する)Snowflakeの結合ポリシーとは異なります。

データに結合ポリシーを指定しない場合は、すべての列を結合できます(投影もできます)。

結合ポリシーの実装

Clean roomの結合ポリシーは、テンプレートが join_policy または join_and_column_policy のフィルターを使用している場合にのみ、列に適用されます。結合ポリシーがどこに適用されるかをテンプレートで確認するには、テンプレート定義を表示し、次のような構文でこのフィルターの存在を確認します:

{{ my_column | join_policy }}
Copy

基になるテーブルのSnowflake結合ポリシーは、テンプレートが join_policy フィルターを列に使用していなくても適用されます。

以下のコードは、2つの異なるテーブルの2つの列を結合する方法を示しています。このポリシーは、このclean room内のすべてのユーザーとすべてのテンプレートに適用されます。clean roomのプロバイダーとコンシューマーに、同等のプロシージャがあり、それを呼び出すとclean roomでのロールに反映されます。結合ポリシーは、データがclean roomにリンクされた後であれば、いつでもセットできます。

-- Set join policies on a clean room where you are a provider
CALL samooha_by_snowflake_local_db.provider.set_join_policy('my_provider_cleanroom',
  ['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:HASHED_EMAIL', 'MYDB.MYSCH.EXPOSURES:HASHED_EMAIL']);

-- Set join policies on a clean room where you are a consumer
CALL samooha_by_snowflake_local_db.consumer.set_join_policy('my_consumer_cleanroom',
  ['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:HASHED_EMAIL', 'MYDB.MYSCH.EXPOSURES:HASHED_EMAIL']);
Copy

set_join_policy は、過去の結合ポリシーを新しい結合ポリシーで置き換えます。

結合ポリシーを表示または管理するコードを作成するには、次のプロシージャを使用します:

  • consumer.set_join_policy

  • consumer.view_provider_join_policy

  • consumer.view_join_policy

  • provider.view_join_policy

  • provider.set_join_policy

列ポリシー

列ポリシーは、 特定の テンプレートでアクセスしたときに、分析結果に投影できる列を指定します。列ポリシーは、データをリンクし、clean roomにテンプレートを追加した後であれば、いつでもセットできます。

同じ列を結合と列ポリシーの両方に含めることはできません。アクティベーションと列ポリシーの両方に同じ列が存在できます。

データに列ポリシーを指定しない場合は、すべての列を投影できます。

列ポリシーの実装

列ポリシーは、テンプレートで許可されていれば、clean room UI でセットできます。

Clean roomの列ポリシーは、テンプレートが column_policy または join_and_column_policy フィルターを使用している場合にのみ、列に適用されます。テンプレートを調べて、列ポリシーがどこで適用されるかを確認するには、テンプレートの定義を表示し、次のような構文でこのフィルターの存在を確認します:

{{ my_column | column_policy }}
Copy

基になるテーブルのSnowflake投影ポリシーは、テンプレートが列に対して column_policy フィルターを使用しない場合でも適用されます。

次のコードは、 prod_overlap_analysis テンプレートのみを使用して、3つの列の投影を許可できることを示しています。テンプレート名は列ポリシーを指定する際に、列の命名構文の一部として指定されています。このポリシーはclean room内のすべてのユーザーに、同じテンプレートに限って適用されます。clean roomのプロバイダーとコンシューマーに、同等のプロシージャがあり、それを呼び出すとclean roomでのロールに反映されます。

-- Set column policies on a clean room where you are a provider
call samooha_by_snowflake_local_db.provider.set_column_policy('my_provider_cleanroom',
  ['prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:STATUS',
   'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:AGE_BAND',
   'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:DAYS_ACTIVE']);

-- Set column policies on a clean room where you are a consumer
call samooha_by_snowflake_local_db.consumer.set_column_policy('my_consumer_cleanroom',
  ['prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:STATUS',
   'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:AGE_BAND',
   'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:DAYS_ACTIVE']);
Copy

このプロシージャを再度呼び出すと、過去の列ポリシーが削除され、新しい列ポリシーに置き換えられます。

以下のプロシージャは、コード内の列ポリシーを表示または管理するために使用されます:

  • consumer.set_column_policy

  • consumer.view_column_policy

  • consumer.view_provider_column_policy

  • provider.set_column_policy

  • provider.view_column_policy

アクティベーションポリシー

アクティベーションポリシーは、アクティベーションテンプレートによるアクティベートを許可する列を指定します。アクティベーションテンプレートは、クエリ結果をプロバイダーまたはコンシューマーのSnowflakeアカウントのテーブル、またはサードパーティのアクティベーションコネクタに保存します。

他のポリシーと同様に、アクティビティポリシーにも列を指定できます。

データにアクティベーションポリシーを指定しない場合、データの列をアクティブにすることは できません

アクティビティポリシーの実装

アクティベーションポリシーは、テンプレートがアクティベーションを許可していれば、clean room UI でセットできます。

アクティベーションポリシーは、テンプレートが activation_policy フィルターを使用している場合にのみ、列に対して適用されます。テンプレートを調べて、アクティベーションポリシーがどこで適用されるかを確認するには、テンプレートの定義を表示し、次のような構文でこのフィルターの存在を確認します:

{{ my_column | activation_policy }}
Copy

次のコードは、clean room内で HASHED_EMAIL 列と REGION_CODE 列のアクティベーションを許可する方法を示しています。このポリシーは、clean room内のすべてのユーザーとすべてのアクティベーションテンプレートに適用されます。clean roomのプロバイダーとコンシューマーに、同等のプロシージャがあります。そのプロシージャを呼び出すと、clean roomでのロールに反映されます。

-- Set column policies on a clean room where you are a provider
call samooha_by_snowflake_local_db.provider.set_activation_policy('my_cleanroom', [
    'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:HASHED_EMAIL',
    'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:REGION_CODE' ]);

-- Set column policies on a clean room where you are a consumer
call samooha_by_snowflake_local_db.consumer.set_activation_policy('my_cleanroom', [
    'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE_NAME.DEMO.CUSTOMERS:HASHED_EMAIL',
    'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE_NAME.DEMO.CUSTOMERS:REGION_CODE' ]);
Copy

このプロシージャを再度呼び出すと、過去のアクティベーションポリシーが削除され、新しいアクティベーションポリシーに置き換えられます。

以下のプロシージャは、アクティベーションポリシーを管理するコードを作成するために使用されます:

  • consumer.set_activation_policy

  • provider.set_activation_policy

集計ポリシー

集計ポリシーには、テーブルに対するすべてのクエリに集計(GROUP BY、 COUNT、 およびその他の関数)を含める必要があることを指定します。また、結果グループごとの最小行数や、グループを結果から省略することも指定します。集計ポリシーには、集計ポリシーを持つテーブルに対するすべてのクエリを集計(GROUP BY、 COUNT、 その他の集計関数)する必要があることを指定します。また、結果グループあたりの最小行数や、、グループを結果から省略することも指定します。

Clean room自体には集計ポリシーが実装されません。リンクされたデータに集約制約を適用するには、ソーステーブルに 集計ポリシー を適用するか、テンプレートに集約制約を実装します。

Snowflakeが提供するテンプレートの中には、ユーザーまたはテンプレートにセットされた threshold および threshold_value のパラメーターを使用するものもあります。これらの値は、clean room UI で、または provider.add_consumersprovider/consumer.set_privacy を呼び出すことで変更できます。コンシューマーにセットされている場合は、 テンプレートでこれらの値にアクセス できます。