Snowflake Data Clean Rooms: Pythonベースのセキュアなテンプレート¶
このトピックでは、クリーンルームをプログラムで設定し、コンシューマと共有し、クリーンルームにロードされたセキュアな Python UDFsを使用する方法で分析を実行するために必要なプロバイダーとコンシューマーのフローについて説明します。このフローでは、プロバイダーは、APIを使って、安全なPythonコードをクリーンルームにロードします。これにより、基礎となるPythonコードをコンシューマーから完全に機密扱いとできます。
このフローでは、2つのPython関数をクリーンルームに読み込み、カスタムデータ処理と集計を行います。これらのPython UDFsは、SQL Jinjaのカスタムテンプレート内で呼び出され、データフローの接着剤として機能します。テンプレート自体は、Python UDFsによって作成されたカスタムグループ化に沿って集計を計算します。
上記以外のこのフローの重要な点は以下の通りです。
プロバイダー:
a.2つの機密Python UDFsを新しいクリーンルームに安全に読み込みます。
b.Python UDFsを使用して、カスタムSQL Jinja 分析テンプレートを作成します。
c.コンシューマーと共有してください。
コンシューマー:
a.クリーンルーム内にあるテンプレートを調べます。
b.テンプレートを使用してクリーンルーム内で分析を実行します。
前提条件¶
このフローを完了するには、2つの別々のSnowflakeアカウントが必要です。プロバイダーのコマンドを実行するために最初のアカウントを使用し、コンシューマーのコマンドを実行するために2番目のアカウントに切り替えます。
プロバイダー¶
注釈
以下のコマンドは、プロバイダーアカウントのSnowflakeワークシートで実行する必要があります。
環境の設定¶
開発者APIsを使用してSnowflake Data Clean Roomで作業する前に、以下のコマンドを実行してSnowflake環境をセットアップします。SAMOOHA_APP_ROLEロールを持ってない場合は、アカウント管理者にお問い合わせください。
use role samooha_app_role;
use warehouse app_wh;
クリーンルームの作成¶
クリーンルームの名称を作成します。既存のクリーンルーム名との衝突を避けるため、新しいクリーンルーム名を入力してください。クリーンルーム名には 英数字 しか使用できません。クリーンルーム名にはスペースとアンダースコア以外の特殊文字は使用できません。
set cleanroom_name = 'Custom Secure Python UDF Demo clean room';
上記で設定したクリーンルーム名で新しいクリーンルームを作成できます。上記で設定したクリーンルーム名が既に既存のクリーンルームとして存在する場合、この処理は失敗します。
この手順の実行には約45秒かかります。
provider.cleanroom_init の2番目の引数は、クリーンルームのディストリビューションです。これはINTERNALまたはEXTERNALのいずれかです。テスト目的で、同じ組織内のアカウントにクリーンルームを共有する場合、INTERNALを使用して、アプリケーションパッケージがコラボレーターにリリースされる前に実施されなければならない自動セキュリティスキャンをバイパスすることができます。ただし、このクリーンルームを別の組織のアカウントと共有する場合は、EXTERNALクリーンルーム配布を使用する必要があります。
call samooha_by_snowflake_local_db.provider.cleanroom_init($cleanroom_name, 'INTERNAL');
セキュリティスキャンのステータスを表示するには、以下を使用します。
call samooha_by_snowflake_local_db.provider.view_cleanroom_scan_status($cleanroom_name);
クリーンルームを作成したら、コラボレーターと共有する前にリリースディレクティブを設定する必要があります。しかし、ディストリビューションがEXTERNALに設定されている場合は、リリースディレクティブを設定する前に、まずセキュリティスキャンが完了するのを待つ必要があります。スキャンの実行中に残りのステップを実行し続け、 provider.create_cleanroom_listing ステップの前にここに戻ることができます。
リリースディレクティブを設定するには、次のようにします。
call samooha_by_snowflake_local_db.provider.set_default_release_directive($cleanroom_name, 'V1_0', '0');
クロスリージョンの共有¶
顧客のアカウントと異なる地域にアカウントを持つSnowflakeの顧客とクリーンルームを共有するには、Cross-Cloud Auto-Fulfillmentを有効にする必要があります。他地域のコンシューマーとの協業に関連する追加コストについては、Cross-Cloud Auto-Fulfillment costsをご参照ください。
開発者APIsを使用する場合、クロスリージョン共有を有効にするには2つのステップがあります。
ACCOUNTADMINロールを持つSnowflake管理者は、Snowflake アカウントのクロスクラウド自動複製を有効にします。手順については、異なるリージョンのアカウントと連携するをご参照ください。
プロバイダーは、 provider.enable_laf_for_cleanroom コマンドを実行して、クリーンルームのクロスクラウド自動複製を有効にします。例:
call samooha_by_snowflake_local_db.provider.enable_laf_for_cleanroom($cleanroom_name);
クリーンルームのクロスクラウド自動複製を有効にした後、 provider.create_cleanroom_listing コマンドを使用して、通常通りリストにコンシューマーを追加できます。リストは、必要に応じて自動的にリモートクラウドやリージョンに複製されます。
データセットをリンクし、データセットの結合ポリシーを設定します。¶
Snowflakeテーブルをクリーンルームにリンクします。Snowflakeアカウントのテーブルリストを参照し、完全修飾テーブル名 (Database.Schema.Table) を配列として入力します。この手順では、クリーンルーム内からテーブルの安全な表示を作成することで、テーブルを自動的にクリーンルームにアクセスできるようにし、テーブルのコピーを作成する必要がなくなります。
call samooha_by_snowflake_local_db.provider.link_datasets($cleanroom_name, [ 'SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS']);
注釈
テーブルが存在するにもかかわらずこの手順がうまくいかない場合、SAMOOHA_APP_ROLEロールにまだアクセス権が与えられていない可能性があります。もしそうであれば、ACCOUNTADMINロールに切り替え、データベース上で以下のプロシージャを呼び出します。
use role accountadmin;
call samooha_by_snowflake_local_db.provider.register_db('<DATABASE_NAME>');
use role samooha_app_role;
クリーンルームにリンクされたデータセットは、以下の手順で確認できます。
call samooha_by_snowflake_local_db.provider.view_provider_datasets($cleanroom_name);
どの列を結合ポリシーとして使用するかを決定するために、データセットを見てPII列を決定することができます。上位10行を表示するには、次のクエリを使用します。
select * from SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS limit 10;
クリーンルーム内でテンプレートを実行する際に、コンシューマーが参加できる列を指定します。このプロシージャはemailのようなID列に対して呼び出される必要があります。結合ポリシーは「置換のみ」であるため、この関数が再度呼び出されると、以前に設定された結合ポリシーは新しいものに完全に置き換えられます。
call samooha_by_snowflake_local_db.provider.set_join_policy($cleanroom_name, ['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:HEM']);
クリーンルームに追加された参加ポリシーを表示したい場合は、次の手順を呼び出します。
call samooha_by_snowflake_local_db.provider.view_join_policy($cleanroom_name);
カスタムPythonコードをUDFsとしてクリーンルームに秘密裏にロードする¶
このセクションでは、以下のPython関数をクリーンルームに読み込む方法を示します。
assign_group
-> a UDF行ごとに進み、グループIDを割り当てます。group_agg
-> IDによってグループ化され、データのある側面を集約するUDF。
次のAPIを使うことにより、Python関数をインライン関数としてクリーンルームに直接定義することができます。あるいは、クリーンルームステージにアップロードしたステージングされたファイルからPythonをロードすることもできます。例については[API リファレンスガイド](../provider)をご参照ください。
次のコードは、assign_group
UDFを定義し、読み込みます。このコードは、行ごとに進み、グループIDを割り当てます。
call samooha_by_snowflake_local_db.provider.load_python_into_cleanroom(
$cleanroom_name,
'assign_group', -- Name of the UDF
['data variant', 'index integer'], -- Arguments of the UDF, specified as (variable name, variable type)
['numpy', 'pandas'], -- Packages UDF will use
'integer', -- Return type of UDF
'main', -- Handler
$$
import numpy as np
import pandas as pd
def main(data, index):
df = pd.DataFrame(data) # Just as an example of what we could do
np.random.seed(0)
# First let's combine the data row and the additional index into a string
data.append(index)
data_string = ",".join(str(d) for d in data)
# Hash it
encoded_data_string = data_string.encode()
hashed_string = hash(encoded_data_string)
# Return the hashed string
return hashed_string
$$
);
次のコードは、IDによってグループ化し、データの側面を集約するgroup_agg
UDFを定義し、読み込みます。
call samooha_by_snowflake_local_db.provider.load_python_into_cleanroom(
$cleanroom_name,
'group_agg', -- Name of the UDF
['data variant'], -- Arguments of the UDF, specified as (variable name, variable type)
['pandas'], -- Packages UDF will use
'integer', -- Return type of UDF
'main', -- Handler
$$
import pandas as pd
def main(s):
s = pd.Series(s)
return (s == 'SILVER').sum()
$$
);
注釈
Pythonをクリーンルームにロードすると、クリーンルーム用の新しいパッチが作成されます。クリーンルームのディストリビューションがEXTERNALに設定されている場合は、セキュリ ティスキャンが完了するのを待ってから、デフォルトのリリースディレクティブを更新する必要があります。
-- See the versions available inside the clean room
show versions in application package samooha_cleanroom_Custom_Secure_Python_UDF_Demo_clean_room;
-- Once the security scan is approved, update the release directive to the latest version
call samooha_by_snowflake_local_db.provider.set_default_release_directive($cleanroom_name, 'V1_0', '2');
ステージのPythonファイルからPythonコードを読み込む¶
注釈
このセクションは、Pythonをインラインで定義する上記の load_python_into_cleanroom コマンドに代わるオプションです。クリーンルームステージにロードされた.pyファイルからPythonを読み込みます。
定義する代わりに、ステージの.pyファイルからPythonを読み込むこともできます。そのためには、クリーンルームのコードステージにコードをアップロードする必要があります。重要なことは、クリーンルームのコードステージにあるファイルだけがクリーンルームで使用できるため、ファイルを他の場所に置くことはできないということです。ファイルは以下のステージでなければなりません:
ls @samooha_cleanroom_Custom_Secure_Python_UDF_Demo_clean_room.app.code;
このように assign_group と group_agg UDFsを定義するには、クリーンルームステージに以下のスクリプトをアップロードします。
ホームディレクトリに ~/assign_group.py というファイルを作成し、以下のコードを貼り付けます。
import numpy as np
import pandas as pd
def main(data, index):
_ = pd.DataFrame(data) # Just as an example of what we could do
np.random.seed(0)
# First let's combine the data row and the additional index into a string
data.append(index)
data_string = ",".join(str(d) for d in data)
# Hash it
encoded_data_string = data_string.encode()
hashed_string = hash(encoded_data_string)
# Return the hashed string
return hashed_string
次に、クリーンルームのステージにコードをアップロードする必要があります。現在公開されているクリーンルームアプリケーションファイルのバージョンを含むフォルダーに追加してください。必要なフォルダーを取得するには、以下の手順で行います。
call samooha_by_snowflake_local_db.provider.get_stage_for_python_files($cleanroom_name);
このファイルをアップロードするステージが表示されます。このファイルをステージにアップロードするには、snowsqlから以下のコマンドを使用します。
PUT file://~/assign_group.py @samooha_cleanroom_Custom_Secure_Python_UDF_Demo_clean_room.app.code/V1_0P1/test_folder overwrite=True auto_compress=False;
最後に、以下のコマンドを使ってPythonをクリーンルームにロードします。
call samooha_by_snowflake_local_db.provider.load_python_into_cleanroom(
$cleanroom_name,
'assign_group', // Name of the UDF
['data variant', 'index integer'], // Arguments of the UDF, specified as (variable name, variable type)
['numpy', 'pandas'], // Packages UDF will use
['/test_folder/assign_group.py'], // Name of Python file to import, relative to stage folder uploaded to
'integer', // Return type of UDF
'assign_group.main' // Handler - now scoped to file
);
同様の方法で、以下のコードで ~/group_agg.py というファイルを作ることができます。
import pandas as pd
def main(s):
s = pd.Series(s)
return (s == "SILVER").sum()
最後に load_python_into_cleanroom を呼び出してクリーンルームにパッチを追加したため、アップロード先のフォルダーが変更されました。新しいフォルダーは、以下のコマンドを再実行することで取得できます。
call samooha_by_snowflake_local_db.provider.get_stage_for_python_files($cleanroom_name);
その後、ファイルを適切なフォルダーにアップロードすることができます。
PUT file://~/group_agg.py @samooha_cleanroom_Custom_Secure_Python_UDF_Demo_clean_room.app.code/V1_0P2 overwrite=True auto_compress=False;
アップロードされると、次のコマンドを使ってこのファイルからPython UDFを作成できます。
call samooha_by_snowflake_local_db.provider.load_python_into_cleanroom(
$cleanroom_name,
'group_agg', // Name of the UDF
['data variant'], // Arguments of the UDF, specified as (variable name, variable type)
['pandas'], // Packages UDF will use
['/group_agg.py'], // Name of Python file to import, relative to stage folder uploaded to
'integer', // Return type of UDF
'group_agg.main' // Handler - now scoped to file
);
UDFsを使用してカスタムテンプレートを追加する¶
クリーンルームにカスタム分析テンプレートを追加するには、プロバイダー側とコンシューマー側の両方でテーブル名のプレースホルダーとプロバイダー側の結合列が必要です。SQL Jinjaテンプレートでは、これらのプレースホルダーは次のものである必要があります。
source_table:プロバイダーのテーブル名の 配列。
my_table:コンシューマーのテーブル名の 配列。
テーブル名は、これらの変数を使用して動的にすることができますが、クリーンルームにリンクされた表示名を使用して、必要であればテンプレートにハードコード化することもできます。列名はテンプレートにハードコード化することも、パラメーターで動的に設定することもできます。パラメーターを使用して設定する場合は、列ポリシーと照合するために、パラメーターの dimensions または measure_column を配列として呼び出す必要があることにご留意ください。これらを SQL Jinjaパラメーターとしてテンプレートに追加します。これらは後でクエリ時にコンシューマーから渡されます。結合ポリシーは、許可された列以外の列でコンシューマーにより結合できないようにします。
また、SQL Jinjaテンプレートのカスタム引数は、以下のフィルターを使用して、結合および列のポリシーに準拠しているかどうかを確認することができます。
join_policy: 文字列値またはフィルター句が結合ポリシーに準拠しているかどうかを確認します。
column_policy: 文字列値またはフィルター句が列ポリシーに準拠しているかどうかを確認します。
join_and_column_policy: フィルター句で結合に使用される列が結合ポリシーに準拠しているか、また、フィルターとして使用される列が列ポリシーに準拠しているかを確認します。
たとえば、 {{provider_id | sqlsafe | join_policy }} 句では、 p.HEM の入力が解析され、 p.HEM が結合ポリシーにあるかどうかが確認されます。注意: sqlsafe フィルターでは、コラボレーターが純粋な SQL をテンプレートに入れることができるため、使用には注意してください。
注釈
クリーンルームに実際にリンクされているセキュアビューの名前はテーブル名と異なるため、すべてのプロバイダー/コンシューマーテーブルは、これらの引数を使用して参照する必要があります。重要なのは、プロバイダーテーブルのエイリアスはp(またはp1)、p2、p3、p4などにする 必要 があり、コンシューマーテーブルのエイリアスはc(またはc1)、c2、c3などにする 必要 があるということです。これは、クリーンルームのセキュリティポリシーを実施するために必要です。
この関数は、同じ名前の既存のテンプレートを上書きすることに注意してください。既存のテンプレートを更新したい場合は、更新されたテンプレートでこの関数を再度呼び出します。
このテンプレートはまずプロバイダーのテーブルから一連の列のハッシュでプロバイダーデータを強化エンリッチします。このエンリッチされたデータは、コンシューマーのEメールデータセットに内部結合され、オプションでフィルター句が渡されます。最後に、カスタムPython group_agg
UDFが、最初のUDFからのハッシュされた列の関数として、いくつかの集約を計算するために使用されます。
call samooha_by_snowflake_local_db.provider.add_custom_sql_template(
$cleanroom_name,
'prod_custom_udf_template',
$$
with enriched_provider_data as (
select
cleanroom.assign_group(array_construct(identifier({{ filter_column | column_policy }}), identifier({{ dimensions[0] | column_policy }})), identifier({{ measure_column[0] | column_policy }})) as groupid,
{{ filter_column | sqlsafe }},
hem
from identifier({{ source_table[0] }}) p
), filtered_data as (
select
groupid,
identifier({{ filter_column | column_policy }})
from enriched_provider_data p
inner join identifier({{ my_table[0] }}) c
on p.hem = c.hem
{% if where_clause %}
where {{ where_clause | sqlsafe }}
{% endif %}
)
select groupid, cleanroom.group_agg(array_agg({{ filter_column | sqlsafe }})) as count from filtered_data p
group by groupid;
$$
);
注釈
上記のsamooha_by_snowflake_local_db.provider.add_custom_sql_templateプロシージャ呼び出しの最後のパラメータとして、差分プライバシー感度を追加することができます(追加しない場合、デフォルトは1になります)。
クリーンルームで現在有効なテンプレートを表示したい場合は、以下の手順を呼び出します。
call samooha_by_snowflake_local_db.provider.view_added_templates($cleanroom_name);
各テーブルに列ポリシーを設定する¶
テーブル内の列を確認するためにリンクされたデータを表示します。上位10行を表示するには、以下のプロシージャを呼び出します。
select * from SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS limit 10;
コンシューマーがグループ化、集計(例:SUM/AVG)、および一般的に分析で使用できる列を、テーブルとテンプレートの組み合わせごとに設定します。これにより柔軟性が生まれ、同じテーブルでも基礎となるテンプレートによって異なる列選択が可能になります。これはテンプレートを追加した後にのみ呼び出されるべきです。
列ポリシーは 置換のみ であることに注意してください。したがって、この関数が再度呼び出された場合、以前に設定された列ポリシーは新しいものに完全に置き換えられます。
列ポリシーは、email、HEM、RampIDなどのID列では使用しないでください。コンシューマーがこれらの列でグループ化できないようにするためです。実稼働環境では、システムはインテリジェントにPII列を推測し、この操作をブロックしますが、この機能はサンドボックス環境では利用できません。Status、Age Band、Region Code、Days Activeなどのように、コンシューマーに集計やグループ化させる列にのみ使用してください。
「column_policy」と「join_policy」がコンシューマー分析リクエストのチェックを実行するために、SQL Jinjaテンプレートでは、すべての列名が dimensions または measure_columns として参照される必要があることに注意してください。カスタムSQL Jinjaテンプレートでチェックする列を参照するには、必ずこれらのタグを使用してください。
call samooha_by_snowflake_local_db.provider.set_column_policy($cleanroom_name, [
'prod_custom_udf_template:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:STATUS',
'prod_custom_udf_template:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:REGION_CODE',
'prod_custom_udf_template:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:AGE_BAND',
'prod_custom_udf_template:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:DAYS_ACTIVE']);
クリーンルームに追加された列ポリシーを表示したい場合は、次の手順を呼び出します。
call samooha_by_snowflake_local_db.provider.view_column_policy($cleanroom_name);
コンシューマー¶
注釈
以下のコマンドは、コンシューマーアカウントのSnowflakeワークシートで実行する必要があります。
環境の設定¶
開発者APIsを使用してSnowflake Data Clean Roomで作業する前に、以下のコマンドを実行してSnowflake環境をセットアップします。SAMOOHA_APP_ROLEロールを持ってない場合は、アカウント管理者にお問い合わせください。
use role samooha_app_role;
use warehouse app_wh;
クリーンルームをインストールする¶
クリーンルーム共有がインストールされると、利用可能なクリーンルームのリストは、以下のコマンドを使用して表示することができます。
call samooha_by_snowflake_local_db.consumer.view_cleanrooms();
プロバイダーが共有したクリーンルームの名前を割り当てます。
set cleanroom_name = 'Custom Secure Python UDF Demo clean room';
以下のコマンドは、関連するプロバイダーと選択されたクリーンルームを持つコンシューマーアカウントにクリーンルームをインストールします。
この手順の実行には約45秒かかります。
call samooha_by_snowflake_local_db.consumer.install_cleanroom($cleanroom_name, '<PROVIDER_ACCOUNT_LOCATOR>');
クリーンルームが設置されると、プロバイダーはクリーンルームの使用を可能にする前に、プロバイダー側でクリーンルームの設定を完了しなければなりません。以下の関数でクリーンルームのステータスを確認できます。有効化されると、以下のRun Analysisコマンドを実行できるようになります。クリーンルームが有効になるまで、通常約1分かかります。
call samooha_by_snowflake_local_db.consumer.is_enabled($cleanroom_name);
データセットのリンク¶
データセットをクリーンルームにリンクし、プロバイダーのデータでセキュアな計算を実行します。
call samooha_by_snowflake_local_db.consumer.link_datasets($cleanroom_name, ['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS']);
注釈
テーブルが存在するにもかかわらずこの手順がうまくいかない場合、SAMOOHA_APP_ROLEロールにまだアクセス権が与えられていない可能性があります。もしそうであれば、ACCOUNTADMINロールに切り替え、データベース上で以下のプロシージャを呼び出します。
use role accountadmin;
call samooha_by_snowflake_local_db.consumer.register_db('<DATABASE_NAME>');
use role samooha_app_role;
分析を実行するには、コンシューマーテーブルを渡す必要があります。クリーンルームに追加したデータセットを表示したい場合は、以下のプロシージャを呼び出します。
call samooha_by_snowflake_local_db.consumer.view_consumer_datasets($cleanroom_name);
分析を実行する¶
クリーンルームがインストールされたので、プロバイダーからクリーンルームに与えられた分析テンプレートを"run_analysis"コマンドを使って実行することができます。各フィールドがどのように決定されるかについては、以下のセクションをご参照ください。
通過可能なデータセットの数は、プロバイダーが実装したテンプレートによって制限されます。テンプレートによっては、特定のテーブル数を必要とする場合があります。テンプレート作成者は、サポートしたい要件を実装することができます。
注釈
分析を実行する前に、ウェアハウスサイズを変更したり、テーブルが大きい場合は新しい大きなウェアハウスサイズを使用することができます。
call samooha_by_snowflake_local_db.consumer.run_analysis(
$cleanroom_name, -- cleanroom
'prod_custom_udf_template', -- template name
['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS'], -- consumer tables
['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS'], -- provider tables
object_construct( -- Rest of the custom arguments needed for the template
'filter_column', 'p.status', -- One of the SQL Jinja arguments, the column the UDF filters on
'dimensions', ['p.DAYS_ACTIVE'],
'measure_column', ['p.AGE_BAND'],
'where_clause', 'c.status = $$GOLD$$' -- A boolean filter applied to the data
)
);
データセットフィルタリングの"where_clause"またはディメンションもしくはmeasure_columns のいずれかで参照される各列について、プロバイダーテーブルのフィールドを参照するにはp.を、コンシューマーテーブルのフィールドを参照するにはc.を使用できます。複数のプロバイダーテーブルにはp2、p3などを、複数のコンシューマーテーブルにはc2、c3などを使用してください。
run_analysisの入力を決定する方法¶
分析を実行するには、run_analysis関数にいくつかのパラメータを渡す必要があります。このセクションでは、どのようなパラメータを渡すかを決定する方法を説明します。
テンプレート名
まず、以下のプロシージャを呼び出すことで、サポートされている分析テンプレートを確認できます。
call samooha_by_snowflake_local_db.consumer.view_added_templates($cleanroom_name);
テンプレートを使って分析を実行する前に、どのような引数を指定し、どのような型が期待されるかを知っておく必要があります。カスタムテンプレートについては、以下のように実行できます。
call samooha_by_snowflake_local_db.consumer.view_template_definition($cleanroom_name, 'prod_custom_udf_template');
これには、異なるSQL Jinjaのパラメータが大量に含まれることもあります。以下の機能は、SQL Jinjaテンプレートを解析し、run_analysisで指定する必要がある引数を便利なリストに抽出します。
call samooha_by_snowflake_local_db.consumer.get_arguments_from_template($cleanroom_name, 'prod_custom_udf_template');
データセット名
プロバイダーによってクリーンルームに追加されたデータセット名を表示したい場合は、次の手順を呼び出します。クリーンルームのセキュリティ特性上、プロバイダーがクリーンルームに追加したデータセットは表示できません。
call samooha_by_snowflake_local_db.consumer.view_provider_datasets($cleanroom_name);
また、クリーンルームにリンクしたテーブルは、以下の呼び出しで確認することができます。
call samooha_by_snowflake_local_db.consumer.view_consumer_datasets($cleanroom_name);
列のディメンションと測定。
分析を実行する際、特定の列でフィルタリング、グループ化、集計を行いたい場合があります。プロバイダーによってクリーンルームに追加された列ポリシーを表示したい場合は、次の手順を呼び出します。
call samooha_by_snowflake_local_db.consumer.view_provider_column_policy($cleanroom_name);
よくあるエラー
実行分析の結果、 Not approved: unauthorized columns used エラーが表示される場合は、プロバイダーが設定した結合ポリシーと列ポリシーを再度表示することが推奨されます。
call samooha_by_snowflake_local_db.consumer.view_provider_join_policy($cleanroom_name);
call samooha_by_snowflake_local_db.consumer.view_provider_column_policy($cleanroom_name);
また、プライバシーの予算を使い果たしたため、これ以上クエリを実行できなくなる可能性もあります。残りのプライバシー予算は以下のコマンドで表示できます。毎日リセットされますが、クリーンルームのプロバイダーが希望すればリセットすることもできます。
call samooha_by_snowflake_local_db.consumer.view_remaining_privacy_budget($cleanroom_name);
差分プライバシーがクリーンルームで有効になっているかどうかは、次のAPIで確認できます。
call samooha_by_snowflake_local_db.consumer.is_dp_enabled($cleanroom_name);