チュートリアル: Snowflake Data Clean Roomsのコーディングの基礎

概要

このチュートリアルは、Snowflake Data Clean Roomsをコーディングで作成または使用する開発者を対象としています。このチュートリアルでは SQL コードを使用しますが、ここでの情報を参照しながら、Snowflake でサポートされている任意のコーディング言語でclean roomを作成および使用することができます。

学習内容

このチュートリアルでは、Snowflake Data Clean Rooms API を使用して、clean roomに基本的なテンプレートを作成し、共有する方法を説明します。また、自分に共有されたclean roomで API を使用して分析を実行する方法も説明します。

このチュートリアルでは、プロバイダーが提供する1つのテーブルと、コンシューマーが提供する1つのテーブル、およびプロバイダーが定義するテンプレートを使用してclean roomを作成し、これら2つのテーブルに対する非常に単純な JOIN クエリを定義します。テンプレートはコンシューマーが実行します。

要件

  • このチュートリアルを始める前に、Snowflakeの基礎を理解してください。また、 Snowflake Data Clean Roomsについて をお読みください。

  • 2つのSnowflakeアカウントを使用する必要があります。1つはプロバイダーアカウント (clean roomを作成するアカウント)、もう1つはコンシューマーアカウント (共有し、クエリを実行するアカウント) として使用します。

  • 両方のアカウントにSnowflake Data Clean Room環境をインストールする必要があります。各アカウントに環境がインストールされていない場合は、 自分でインストールするか、Snowflake管理者にインストールを依頼してください。

  • どちらのアカウントもオンデマンドアカウントではなく、 容量アカウント であることが必要です。

  • 両方のアカウントがSnowflakeで同じ組織に属している必要があります。

  • プロバイダーアカウントがEnterprise Edition以上であることが必要です。コンシューマーアカウントはStandard Edition以上でかまいません。

  • コンシューマーアカウントを、プロバイダーのアカウントでウェブアプリの Collaborators ページに追加する必要があります。

  • 両方のアカウントに SAMOOHA_APP_ROLE を付与する必要があります。

  • このチュートリアルでは、両方のアカウントが同じクラウドリージョンにある必要があります。SELECTCURRENT_REGION();を実行すると、クラウドリージョンを判断できます

  • このチュートリアルでは、両方のアカウントが同じ組織に属している必要があります。

環境の構成

clean room管理者に、2つの異なるアカウントに自分をユーザーとして追加するよう依頼してください。プロバイダーを1つ、コンシューマーを1つ選択してください。

  1. 2つのブラウザタブを開き、それぞれアカウントを変えて Snowsightにサインインします。プロバイダーとして使うアカウントと、コンシューマーとして使うアカウントを決めてください。

  2. 各アカウントで新しいノートブックを開きます。プロバイダーノートブックに「テスト用プロバイダー」、コンシューマーノートブックに「テスト用コンシューマー」という名前を付けます。

以降のセクションでは、必要なアクションをプロバイダーとコンシューマーのどちらのアカウントで実行するかを説明します。

プロバイダー: 概要

ここでは、clean roomを作るための手順を簡単に説明します:

  1. clean roomで共有するテストデータを作成します。

  2. clean roomを作成します。

  3. 作成したデータをclean roomに取り込みます。

  4. コンシューマーがクエリを実行する際に、どの列の結合を許可するかを結合権限で自分のデータに設定します。

  5. clean roomのテンプレートを作成します。clean roomテンプレートは JinjaSQL で作成され、実行時に SQL クエリの評価を行います。ほとんどのテンプレートには、実行時にコラボレーターがテーブル名や列名、 WHERE 句の条件などを指定するための変数が含まれています。clean roomのコラボレーターが、clean roomでテンプレートを選択して実行します。

  6. clean roomのデフォルトバージョンを指定します。

  7. clean roomにアクセスできるコンシューマーを追加します。このチュートリアルでは、コンシューマーはclean room管理者に承認されたアカウントを持つ Snowflake ユーザーである必要があります。

  8. clean roomを公開すると、招待したコンシューマーがそれを利用できるようになります。

注釈

上記では、テンプレートに対して コラボレーター という用語を使用していますが、その理由は、clean roomの構成方法によっては、プロバイダーとコンシューマーのどちらもテンプレートを作成または実行できるからです。このチュートリアルでは、コンシューマーが実行するテンプレートを有効にする方法のみを説明します。

プロバイダー: テストデータを作成する

プロバイダーアカウントのノートブックで作業を開始します。

まず、 SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS テーブルから1,000行のサンプルテストデータを抽出し、テーブルを作成します。そのテーブルをclean roomのプロバイダーデータとして使用します。

データベースの作成を許可するロールを使用してください。この例では ACCOUNTADMIN を使用していますが、テーブルを作成できるロールであれば何でもかまいません。

USE WAREHOUSE app_wh;
USE ROLE ACCOUNTADMIN;
-- Using ACCOUNTADMIN role because you need a role that allows you to create a database.
-- Feel free to use any other role that can create a database.

-- Generate a provider dataset based on the first 1,000 rows of sample data.
CREATE DATABASE IF NOT EXISTS cleanroom_tut_db;
CREATE SCHEMA IF NOT EXISTS cleanroom_tut_db.cleanroom_tut_sch;

CREATE TABLE IF NOT EXISTS cleanroom_tut_db.cleanroom_tut_sch.demo_provider_table AS
  SELECT TOP 1000 * FROM SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS ORDER BY HASHED_EMAIL ASC;

DESCRIBE TABLE cleanroom_tut_db.cleanroom_tut_sch.demo_provider_table;
Copy

プロバイダー: clean roomを作成する

clean roomには最初はデータもユーザーもなく、デフォルトプロパティのみが存在します。

以下のコード例は、組織内でのみアクセス可能なclean roomを作成します (INTERNALとしてマークされていいるのはそのためです)。clean roomを組織外で共有するには、追加で操作が必要になりますが、このチュートリアルでは説明しません。

ほぼすべてのclean roomアクションに SAMOOHA_APP_ROLE が必要になります。

USE ROLE samooha_app_role;
SET cleanroom_name = 'Developer Tutorial';
CALL samooha_by_snowflake_local_db.provider.cleanroom_init($cleanroom_name, 'INTERNAL');
Copy

プロバイダー: clean roomにデータを取り込む

テストデータをclean roomに取り込みましょう。

次の2つのステップで、clean roomにデータを取り込むことができます:

  1. データを登録する

  2. clean roomにデータを取り込む

データを登録する

データをインポートするには、最初にデータベース、スキーマ、またはオブジェクトを 登録 します。これにより、clean roomネイティブのアプリケーションに SELECT 権限が付与され、データを読み取りが可能になります。この操作は、別のロールへの SELECT 権限の付与が可能なロールで実行する必要があります。データベース全体を登録することも、データベース内の特定のスキーマ、テーブル、ビューを登録することもできます。

この例では ACCOUNTADMIN ロールを使用していますが、自分の環境でそれを許可するものであれば、どのロールでもかまいません。

なお、 ウェブアプリケーションを使ってデータを登録 することもできます。

実際には、clean room管理者がすべてのclean room作成者のデータを事前に登録するのが一般的であるため、この操作は省略されることがあります。

USE ROLE ACCOUNTADMIN;
CALL samooha_by_snowflake_local_db.provider.register_db('cleanroom_tut_db');
Copy

clean roomにデータをインポートする

clean roomにデータをインポートすることを リンク と呼びます。プロバイダーもコンシューマーもデータをclean roomにリンクすることができます (データ使用のルールも設定できますが、それについては後ほど説明します)。clean roomにリンクされたビューやテーブルを総称して データセット と呼びます。

データをリンクすると、clean roomはソースデータにリンクされた読み取り専用のビューを作成します。このビューは、clean room内のテンプレートのみがアクセス可能で、clean room内で暗号化されるセキュアなビューです。このビューでは、集約や結合ポリシーなどのSnowflakeポリシーがソースデータから取り除かれ、clean roomで独自に保護とプライバシー設定が行われます。テンプレートはソースデータではなく、このセキュアなビューにアクセスしますが、ソース名は SQL クエリで使用されます。

登録とは異なり、リンクは個々のテーブルまたはビューレベルで行われるため、1回の呼び出しで複数の項目をリンクできます。

先ほど作成したテーブルをclean roomにリンクします:

-- Back to samooha_app_role until you need to clean things up at the end.
USE ROLE samooha_app_role;
CALL samooha_by_snowflake_local_db.provider.link_datasets($cleanroom_name,
  ['cleanroom_tut_db.cleanroom_tut_sch.demo_provider_table']);

CALL samooha_by_snowflake_local_db.provider.view_provider_datasets($cleanroom_name);
Copy

プロバイダー: データに結合ポリシーを設定する

プロバイダーもコンシューマーも各自のデータに 結合ポリシー を指定できます。clean roomの結合ポリシーでは、クエリ時にclean room内で、テーブルのどの列の結合を許可するかを指定します。これにより、clean room内で他のユーザーが自分のデータをどのように使用するかを、より細かく管理することができます。

clean roomの結合ポリシーは、 Snowflakeの結合ポリシー とは異なることに注意してください。clean roomのポリシーでは、どの列の結合を 許可 するかを指定し、Snowflakeの結合ポリシーでは、どの列の結合を 禁止 するかを指定します。

Tip

ソーステーブルに設定されたSnowflakeポリシーはリンク先のテーブルでも保持されますが、コラボレーターにはポリシーとして公開されません。つまり、Snowflakeの結合ポリシーは適用されるものの、 consumer.view_provider_join_policy によって公開されません。したがって、可能であればSnowflakeポリシーを反映させてclean roomポリシーを設定し、反映できないSnowflakeポリシーは削除するか、予期せぬ動作を避けるために適切な形でコラボレーターに伝える必要があります。

clean roomへの結合が可能な列のリストを作成します。このリストに含まれない列は、clean room内で INNER JOIN または OUTER JOIN ステートメントを使用して結合することができません。テーブルの結合可能な列を、各列に対して database_name.schema_name.table_or_view_name:column_name の形式で指定します。

-- Limit joinable columns in this table to age_band, region_code, and device_type
CALL samooha_by_snowflake_local_db.provider.set_join_policy($cleanroom_name,
  ['cleanroom_tut_db.cleanroom_tut_sch.demo_provider_table:age_band',
   'cleanroom_tut_db.cleanroom_tut_sch.demo_provider_table:region_code',
   'cleanroom_tut_db.cleanroom_tut_sch.demo_provider_table:device_type']);

CALL samooha_by_snowflake_local_db.provider.view_join_policy($cleanroom_name);
Copy

プロバイダー: テンプレートを追加する

clean roomテンプレートは、 SELECT クエリに対して評価を行う JinjaSQL テンプレートです。このクエリには、結合と列のポリシーに従って、clean roomにリンクされたすべてのデータセットへのアクセスが許可されます。

このチュートリアルでは、 JinjaSQL テンプレートの設計については詳しく説明しませんが、以下の SQL クエリを実装することについて説明します:

SELECT COUNT(*), group_by_col FROM Consumer_Table AS C
  INNER JOIN Provider_Table AS P
  ON C.join_col = P.join_col
  GROUP BY group_col;
Copy

このクエリは、単純に1つのプロバイダーテーブルと1つのコンシューマーテーブルを指定した結合列で結合し、指定したグループ化列でグループ化して、各グループのグループ値とカウントを投影します。これは、ユーザーがテンプレートを実行する際にclean roomで実行されるクエリです。

次は、同じクエリの JinjaSQL テンプレートです。コンシューマーがテーブルや列を指定するための変数が追加されています。コンシューマーが変数を指定すると、このテンプレートは先ほどのような SQL クエリに対して評価を行います。ただし、テーブル名と列名はコンシューマーが指定します。

SELECT COUNT(*), IDENTIFIER({{group_by_col | column_policy}}) FROM IDENTIFIER({{my_table[0]}}) AS C
  INNER JOIN IDENTIFIER({{source_table[0]}}) AS P
  ON IDENTIFIER({{consumer_join_col | join_policy}}) = IDENTIFIER({{provider_join_col | join_policy}})
  GROUP BY IDENTIFIER({{group_by_col | column_policy}});
Copy

このテンプレートの注意点:

  • {{brackets}} で囲まれた内容は、コンシューマーがテンプレートを実行するときに渡す名前付き変数です。 group_by_colconsumer_join_colprovider_join_col の変数が、コンシューマーによって渡されます

  • my_tablesource_table の配列はシステムが作成するグローバル変数で、呼び出し元から渡されるコンシューマーテーブル名とプロバイダーテーブル名が格納されます。これらのテーブルは、コンシューマーとプロバイダーによってclean roomにリンクされている必要があります。

  • クエリでは、すべてのプロバイダーテーブルのエイリアスを p で作成する必要があります。すべてのコンシューマーテーブルのエイリアスは c で作成する必要があります。複数のテーブルを使用する場合は、1をベースとした接尾辞でエイリアスをプロバイダーテーブルに指定し (pp1p2p3 など)、コンシューマーテーブルにも指定します (cc1c2c3 など)。 (pp0 は同じです。)

  • Snowflake Data Clean Roomsは、変数に作用するカスタムな JinjaSQL フィルター をいくつかサポートしています。 column_policyrow_policy のフィルターを適用した列では、そのclean roomの列と行のポリシーに適合しているかが検証されます。適合していない場合は、テンプレート実行のリクエストが失敗します。そのため、 {{ consumer_join_col | join_policy }}consumer_join_col に渡された値が、このclean roomのプロバイダーとコンシューマーからセットされた結合ポリシーに適合しているかを検証します。

  • 識別子として使用される変数は、 IDENTIFIER 関数で処理してから、 SQL で使用する必要があります。

clean roomにテンプレートを追加します:

-- Add the template
SET template_name = 'overlap_template';
CALL samooha_by_snowflake_local_db.provider.add_custom_sql_template(
    $cleanroom_name,
    $template_name,
    $$
    SELECT COUNT(*), IDENTIFIER({{group_by_col | column_policy}}) FROM IDENTIFIER({{my_table[0]}}) AS C
      INNER JOIN IDENTIFIER({{source_table[0]}}) AS P
      ON IDENTIFIER({{consumer_join_col | join_policy}}) = IDENTIFIER({{provider_join_col | join_policy}})
      GROUP BY IDENTIFIER({{group_by_col | column_policy}});
    $$);

CALL samooha_by_snowflake_local_db.provider.view_added_templates($cleanroom_name);
Copy

プロバイダー: 列のポリシーを設定する

clean roomの各当事者は、 column_policy を設定することで、他の当事者が結果に表示できる列を制限することができます。clean roomの列ポリシーには、投影可能な列のリストが入力されており、リストにない列の投影はできません。プロバイダーは自身のテーブルの列ポリシーを設定し、コンシューマーも自身のテーブルの列ポリシーを設定します。

列ポリシーは、clean room内の特定のテーブルとテンプレートに関連付けられます。テンプレートごとに異なる列の表示を許可することができます。同じ列を結合と列の両方のポリシーに含めることはできません。

列と結合のポリシーは、テンプレートで column_policyrow_policy のフィルターを使用している場合にのみ適用されます。また、列ポリシーを指定しない場合は、すべての列の投影が許可されます。同様に、結合ポリシーを指定しない場合は、すべての列の結合が許可されます。

以下は、先ほど作成したテンプレートで、3列のデータの投影を許可する方法を示しています。列の構文は template_name:table_name:column_name です

-- Set column policies. Column policies are tied to a specific template and table, so we
-- needed to add the template first.
CALL samooha_by_snowflake_local_db.provider.set_column_policy($cleanroom_name,
  [$template_name || ':cleanroom_tut_db.cleanroom_tut_sch.demo_provider_table:STATUS',
   $template_name || ':cleanroom_tut_db.cleanroom_tut_sch.demo_provider_table:AGE_BAND',
   $template_name || ':cleanroom_tut_db.cleanroom_tut_sch.demo_provider_table:DAYS_ACTIVE']);

CALL samooha_by_snowflake_local_db.provider.view_column_policy($cleanroom_name);
Copy

プロバイダー: リリースディレクティブを追加する

すべてのclean roomには、メジャー、マイナー、パッチの値からなるバージョン番号があります。コンシューマーに提供するclean roomのバージョンを指定する必要があり、これは デフォルトリリースディレクティブ と呼ばれます。

これは最初のバージョンであるため、バージョン番号は1.0.0になります。

CALL samooha_by_snowflake_local_db.provider.set_default_release_directive($cleanroom_name, 'V1_0', '0');
Copy

Snowflakeでは、clean roomにコードをアップロードするたびに新しいバージョンが作成されるため、ユーザーに最新バージョンを取得させたい場合は、新しいバージョンでこのプロシージャを再度呼び出す必要があります。コードはアップロードしないため、これを再度呼び出す必要はありません。

プロバイダー: コンシューマーを追加する

ここでは、clean roomをコンシューマーとして使用できるアカウントを指定します。clean roomの共有には、いくつか要件があります:

  • ユーザーにはclean room環境がインストールされたSnowflakeアカウントが必要です。Snowflake以外のアカウントとclean roomを共有することも可能ですが、ここでは説明しません。

  • コンシューマーアカウントのクラウドリージョンが、プロバイダーアカウントと同じであることが必要です。異なるリージョン間で共有することもできますが、その場合は特別な構成が必要になります (説明は省略します)。

  • コンシューマーアカウントを、プロバイダーアカウントの Collaborators ページに追加する必要があります。あるアカウントのコラボレーターリストに追加されたアカウントのみ、そのアカウントで作成されたclean roomへの招待を受けることができます。

  • アカウントロケーターを取得するには、コンシューマーアカウントで以下のプロシージャを実行します: SELECT CURRENT_ACCOUNT();

  • アカウント名の形式は org_name.account_name です。これらの値を取得するには、コンシューマーアカウントで以下のプロシージャを実行します:

    • SELECT CURRENT_ORGANIZATION_NAME();

    • SELECT CURRENT_ACCOUNT_NAME();

CALL samooha_by_snowflake_local_db.provider.add_consumers(
  $cleanroom_name,
  <CONSUMER_LOCATOR>,
  <ORG_NAME>.<ACCOUNT_NAME>);

CALL samooha_by_snowflake_local_db.provider.view_consumers($cleanroom_name);
Copy

プロバイダー: clean roomを公開する

最後にclean roomを公開します。これにより、clean roomは先ほど追加したコンシューマーにより使用可能になります。この処理には1分以上かかります。

-- Publish the clean room.
CALL samooha_by_snowflake_local_db.provider.create_or_update_cleanroom_listing($cleanroom_name);
Copy

処理が終了すると、プロバイダーアカウントのclean roomウェブアプリの Created タブと、コンシューマーアカウントのウェブアプリの Invited タブに、"Powered by Dev Edition" というラベルで、clean roomがリストが表示されます。コンシューマーアカウントに招待メールが届き、コンシューマーアカウントのウェブアプリの Invited タブにclean roomが表示されます。

おめでとうございます: 最初のclean roomが公開されました!

その後、コンシューマーアカウントに移動して、clean roomを使用します。

コンシューマー: clean roomインストールする (参加する)

Snowsightでコンシューマーアカウントに切り替えます。ブラウザで2つ目のタブを開くか、 アカウントスイッチャー を使用してください。

コンシューマーアカウントでサインインした後、コンシューマーノートブックで環境をセットアップします:

USE WAREHOUSE app_wh;
USE ROLE samooha_app_role;
Copy

先ほど公開および共有したclean roomをインストールします。

注釈

このアカウントでウェブアプリケーションを開くと、 Invited タブにこのclean roomが、コーディングで作成されたことを示すラベル (Powered by Dev Edition) 付きで表示されます。そこからclean roomをインストールすることもできますが、ここではコーディングで行う方法を説明します。

clean roomをインストールするには、clean room名と、clean roomを自分と共有するプロバイダーのアカウントロケーターを指定する必要があります。clean room名とアカウントロケータを指定することで、複数のclean roomを明確に招待できます。プロバイダーアカウントで SELECT CURRENT_ACCOUNT(); を実行すると、プロバイダーロケーターを取得できます。

インストールには数分かかります。

SET cleanroom_name = 'Developer Tutorial';
CALL samooha_by_snowflake_local_db.consumer.install_cleanroom($cleanroom_name, <PROVIDER_LOCATOR>);
Copy

コンシューマー: データに結合ポリシーを設定する

ここでは、結合ポリシーを自分のデータに、プロバイダーアカウントの際と同じ方法で設定します。このclean roomでテンプレートを実行できるのはコンシューマーだけなので、コンシューマーの結合ポリシーを設定するのは、この例の場合は無駄です。また、テンプレートを自分で実行するため、どの列を結合可能すればよいかわかっているはずです。しかし、実際に使用する際には、プロバイダーによるテンプレートの実行にclean roomが対応している場合もあるため、データには結合ポリシーを設定すると考えておいた方がよいでしょう。

-- Allow same three columns in your data to be joined.
CALL samooha_by_snowflake_local_db.consumer.set_join_policy($cleanroom_name,
  ['cleanroom_tut_db.cleanroom_tut_sch.demo_consumer_table:age_band',
  'cleanroom_tut_db.cleanroom_tut_sch.demo_consumer_table:region_code',
  'cleanroom_tut_db.cleanroom_tut_sch.demo_consumer_table:device_type']);
Copy

コンシューマー: クエリを準備する

クエリを実行するには、以下の情報が必要です:

  • 実行したいテンプレートの名前。

  • テンプレートで使用可能にするテーブルの名前。

  • テンプレートで使用可能にするプロバイダーのテーブルの名前。

  • その他の名前や、変数に渡す値。テンプレートでは、プロバイダーテーブルとコンシューマーテーブルから結合列名を渡す必要があります。

テンプレートを調べる

テンプレートを調べて、正確な構文や、どの値を渡す必要があるかを確認します。

-- List templates in the clean room, then examine the template details
CALL samooha_by_snowflake_local_db.consumer.view_added_templates($cleanroom_name);

SET template_name = 'overlap_template';
CALL samooha_by_snowflake_local_db.consumer.view_template_definition($cleanroom_name, $template_name);
Copy

プロバイダーテーブルと列の名前、コンシューマーテーブルと列の名前、グループ化の列を渡す必要があることがわかります。

使用可能なプロバイダーテーブルのリストを作成する

プロバイダーがclean roomに追加したテーブルを確認します。

-- Table name to use is in the LINKED_TABLE column in the results.
CALL samooha_by_snowflake_local_db.consumer.view_provider_datasets($cleanroom_name);
Copy

結合可能な列と投影可能な列を調べる

どの列をプロバイダーのデータから結合または投影できるかを確認します。

-- See which provider columns can be joined on
CALL samooha_by_snowflake_local_db.consumer.view_provider_join_policy($cleanroom_name);

-- See which provider columns can be projected
CALL samooha_by_snowflake_local_db.consumer.view_provider_column_policy($cleanroom_name);
Copy

分析を実行する

クエリに何が必要か、どのプロバイダーデータを使用可能か、そのクエリで何ができるかを理解したら、渡す値を選択します。

テンプレート内で列名があいまいな場合は、列をテーブル名で完全に修飾する必要があります。実際のテーブル名ではなく、テーブルエイリアスをテーブル名として使用する必要があります。先述のとおり、このテンプレートでのエイリアスは、プロバイダーテーブルが p で、コンシューマーテーブルが c です。内部的な理由により、エイリアス名には小文字の pc を使用する必要があります。

  • プロバイダーテーブル: 選択肢は cleanroom_tut_db.cleanroom_tut_sch.demo_provider_table だけです。

  • コンシューマーテーブル: 選択肢は cleanroom_tut_db.cleanroom_tut_sch.demo_consumer_table だけです。

  • consumer_join_col: age_band を選びましょう。コンシューマーテーブルの完全修飾列名は c.age_band です。

  • provider_join_col: 同様の列で結合する必要があるので、完全修飾名は p.age_band になります。

  • group_by_col: プロバイダーまたはコンシューマーの列を、投影可能な残りの列から選択します。ここでは p.device_type を使用しますが、 consumer.view_provider_column_policy が返すものであれば、他のどのプロバイダー列やコンシューマー列でもかまいません。

これらの値は以下のように consumer.run_analysis に渡されます:

CALL samooha_by_snowflake_local_db.consumer.run_analysis(
  $cleanroom_name,
  $template_name,
  ['cleanroom_tut_db.cleanroom_tut_sch.demo_consumer_table'],
  ['cleanroom_tut_db.cleanroom_tut_sch.demo_provider_table'],
  OBJECT_CONSTRUCT(
    'consumer_join_col','c.age_band',
    'provider_join_col','p.age_band',
    'group_by_col','p.status'
  ),
  FALSE
);
Copy

Tip

最後のパラメーターは、結果をキャッシュしないことを示します。テスト中はクエリ結果をキャッシュしないことをお勧めします。キャッシュすると、同じクエリで渡した場合でも、 API によってクエリが必ず再実行されます。これは、クエリを変更せずに基になるテンプレートを変更する場合に使用します。

おめでとうございます。SnowsightにTemplateの結果が表示されます。

ここでは説明しませんが、他にもクエリの結果を自分のSnowflakeアカウントに直接エクスポートする機能や、 アクティベーション と呼ばれるプロセスで、承認済みのサードパーティサービスに結果をエクスポートする機能があります。

Snowflake Clean Rooms開発者ガイド で、clean roomのその他のユースケースや、その他の機能の詳細をご参照ください。

両方のアカウント: クリーンアップ

ここで、作成したすべてのリソースをクリーンアップしましょう。

ソーステーブルを削除するには、そのソーステーブルの作成に使用したロールを使用する必要があります。

プロバイダーのクリーンアップ

プロバイダーアカウントで以下のコードを実行します:

USE ROLE samooha_app_role;
CALL samooha_by_snowflake_local_db.provider.drop_cleanroom($cleanroom_name);

USE role ACCOUNTADMIN;
DROP TABLE cleanroom_tut_db.cleanroom_tut_sch.demo_provider_table;
DROP DATABASE cleanroom_tut_db;
Copy

コンシューマーのクリーンアップ

コンシューマーアカウントで以下のコードを実行します:

USE ROLE samooha_app_role;
CALL samooha_by_snowflake_local_db.consumer.uninstall_cleanroom($cleanroom_name);

USE ROLE ACCOUNTADMIN;
DROP VIEW cleanroom_tut_db.cleanroom_tut_sch.demo_consumer_table;
DROP DATABASE cleanroom_tut_db;
Copy