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

概要

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

学習内容

このチュートリアルでは、Snowflake Data Clean Room APIを使用して、クリーンルームで基本的なテンプレートを作成し、共有する方法を説明します。また、共有されたクリーンルームでAPIを使用して分析する方法もご紹介します。

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

要件

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

  • Snowflake Data Clean RoomのネイティブアプリとインストールされたAPI 、Enterprise Edition以上のSnowflakeアカウントへのアクセス権が必要です。クリーンルームアプリがインストールされていない場合は、:doc:`自分でインストールする </user-guide/cleanrooms/getting-started>`か、Snowflake管理者にインストールを依頼してください。

  • クリーンルームAPIを使用するには、SAMOOHA_APP_ROLEが付与されている必要があります。

このチュートリアルでは、クリーンルームでプロバイダーとしてもコンシューマーとしても両方で機能するために、同じアカウントを使用します。このシナリオは、テスト目的でのみサポートされており、個別のアカウントを使用する場合と比較して、:ref:`サポートする機能の制限 <label-dcr_self_share_for_developers>`があります。実際には、プロバイダーとコンシューマーは異なるアカウントを使用します。より高度なテストでは、別々のアカウントを使用する必要が生じる場合があります。

ダウンロード:このチュートリアルをワークブックファイルとしてダウンロード </samples/clean-rooms/internal-testing-cleanroom.ipynb> して、Snowflakeアカウントで実行します。

プロバイダー: 概要

プロバイダーとしてクリーンルームを作成する手順の概要は次のとおりです。

  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_APP_ROLE ロールを付与されたユーザーとして、`Snowsight<https://app.snowflake.com>`_にサインインします。そのロールを持ってない場合は、アカウント管理者に付与を依頼してください。

クリーンルームのコードを保持するためのSnowsight 内で:doc:`新しい SQL ワークシート </user-guide/ui-snowsight-worksheets-gs>`を作成します。ワークシートの名前を「API チュートリアル - プロバイダー」とします。

SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS テーブルからのサンプルテストデータの1,000行を基にテーブルを作成します。そのテーブルをクリーンルームのプロバイダーデータとして使用します。

データベースの作成を許可するロールを使用してください。この例では 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 a temporary table, in case you forget to delete it later.
CREATE TEMPORARY 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を作成する

次のスニペットは、組織内でのみアクセスできるクリーンルームを作成します(したがって、INTERNALとしてマークされます)。組織外でクリーンルームを共有するには、このチュートリアルでは説明していない追加の手順が必要です。自分とクリーンルームを共有する場合は、当然ながらINTERNALである必要があります。

ほとんどのクリーンルームプロシージャに対して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にデータを取り込む

次に、テストデータをクリーンルームに取り込みます。クリーンルームにデータを取り込むには2つのステップがあります。

  1. データを登録します。

  2. クリーンルームにデータをインポート(リンク)します。

データを登録する

データをインポートする最初のステップは、クリーンルームアカウントに、データベース、スキーマ、またはオブジェクトを 登録 することです。個々のクリーンルームレベルではなく、アカウントレベルでデータを登録します。データオブジェクトが登録されると、データを登録したアカウントによって特定のクリーンルームにリンクできるようになります。データベース全体、スキーマ、テーブル、またはビューを登録できます。

登録することにより、クリーンルームネイティブアプリケーションに SELECT 権限が付与され、データを読み取ることができます。このステップは、SELECT 権限を別のロールに付与できる機能を持つロールを使用して実行する必要があります。この例では、ACCOUNTADMIN ロールを使用しますが、アカウント内のオブジェクトにSELECTを付与できるあらゆるロールが使用できます。

また、:ref:`クリーンルームUI<label-cleanrooms_register_ui>`を使用してデータを登録することもできます(実際に、UI にデータを登録するのはAPIよりも少し簡単です )。

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

注釈

実際には、クリーンルーム管理者は通常、アカウントのすべてのクリーンルームユーザーのデータを事前登録します。その場合、このステップをスキップします。

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

クリーンルームへのデータのインポートは、リンク と呼ばれます。プロバイダーもコンシューマーも、データをクリーンルームにリンクすることができます。クリーンルームにリンクされたビューやテーブルの一般的な用語は、データセット です。

データをリンクすると、クリーンルームはソースデータにリンクされた読み取り専用ビューを作成します。このクリーンルームビューは、クリーンルーム内のセキュアな暗号化ビューで、クリーンルーム内のテンプレートのみアクセスできます。テンプレートは、ソースデータではなく、このセキュアビューにアクセスしますが、データを参照する必要があるときは常に、元のソース名が使用されます。

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

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

-- Use 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

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

プロバイダーもコンシューマーも、自分のデータに対して 結合ポリシー を指定できます。クリーンルームの結合ポリシーは、そのクリーンルームのコラボレーターのクエリによって、テーブルのどの列を結合できるかを指定します。これにより、他の人がクリーンルームであなたのデータをどのように使用できるかについて、さらなるレベルの制御が提供されます。自分のポリシーは自分のクエリに適用されません。つまり、自分のデータに設定した結合ポリシーは、クエリの実行時に無視されます。ポリシーは他のユーザーが実行したクエリに対してのみ適用されます。

クリーンルームの結合ポリシーはテーブルに設定され、テーブルが使用されるすべてのクリーンルームに適用されます。ここにリストされていない列は、クリーンルームの INNERJOIN または OUTERJOIN ステートメントを使用して結合できません。結合ポリシーを指定しない場合、すべての列が結合可能です。

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

Tip

ソーステーブルに設定された**Snowflake**ポリシーは、リンクされたクリーンルームテーブルに保持されますが、コラボレーターには報告されません。つまり、Snowflake の結合ポリシーは適用されますが、``consumer.view_provider_join_policy``による報告はされません。プロバイダーの**クリーンルーム**の結合ポリシーのみを報告します。したがって、データに設定したSnowflakeポリシーについてコラボレーターに知らせる必要があります。

各列に対して、:samp:`{database_name}.{schema_name}.{table_or_view_name}:{column_name}`形式を使用して、テーブルの結合可能な列を指定します。次の例では、プロバイダーデータの3列を結合可能にしています。

-- 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

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

クリーンルームの各関係者は、*column_policy*を設定することで、他の関係者が表示できる列を制限することができます。クリーンルームの列ポリシーは、表示できるデータのすべての列を一覧表示します。他の列は表示できません。データの列ポリシーを指定しない場合、すべてのデータが表示されます。

列ポリシーは、クリーンルームの特定のテーブルとテンプレートに関連付けられています。異なる列を異なるテンプレートに表示することができます。同じ列を結合ポリシーと列ポリシーの両方に適用することはできません。

列ポリシーと結合ポリシーは、テンプレート内の``column_policy`` および row_policy フィルターをテンプレートが使用する場合にのみ適用されることに注意してください。

次に、作成したテンプレートでデータの3列の投影を許可する方法を説明します。列の構文は :samp:`{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:DAYS_ACTIVE']);

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

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

すべてのクリーンルームには:doc:`バージョン番号 </user-guide/cleanrooms/dcr-versions>`があり、メジャー値、マイナー値、パッチ値で構成されます。クリーンルームのどのバージョンをコンシューマーに提供するか指定する必要があります。これは、デフォルトリリースディレクティブ と呼ばれます。

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

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

Snowflakeでは、クリーンルームにコードをアップロードするたびに、クリーンルームの新しいバージョンが作成されます。ユーザーに最新バージョンを入手してもらう場合は、最新バージョン番号の新しいデフォルトリリースディレクティブを設定する必要があります。コードをアップロードしないため、このチュートリアルで再度呼び出す必要はありません。

プロバイダー: 指定コンシューマー

ここで、コンシューマーとしてクリーンルームにアクセスできる人を指定します。このチュートリアルでは、コンシューマーとして自分を追加します。そうすることで、クリーンルームは内部テスト用のクリーンルームとしてマークされ、テストのみに使用されます。 :ref:`一部の機能が制限されます<label-dcr_self_share_for_developers>`が、このチュートリアルに必要なすべての機能はサポートされます。

プロシージャには、各コンシューマーを識別する2つの引数が必要です。

  • コンシューマーのアカウントロケーター。次のようにアカウントロケーターを取得します。

    SELECT CURRENT_ACCOUNT();
    
    Copy
  • org_name.account_name`形式のコンシューマーの:ref:`コンシューマーデータ共有アカウントID<label-account_name_data_sharing>。コンシューマーデータ共有アカウントIDを 次のような適切な形式で取得します。

    SELECT CURRENT_ORGANIZATION_NAME() || '.' || CURRENT_ACCOUNT_NAME();
    
    Copy

コンシューマーとしてクリーンルームを自分と共有し、指定された場所ににアカウントロケーターとコンシューマーデータ共有アカウントIDを追加します。

CALL samooha_by_snowflake_local_db.provider.add_consumers(
  $cleanroom_name,
  '<CONSUMER_LOCATOR>',
  '<CONSUMER_DATA_SHARING_ACCOUNT_ID>');

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

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

最後に、クリーンルームを公開します。これで、上記で追加したコンシューマーがクリーンルームを利用できるようになります。この手順の完了には1分以上かかります。

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

手順が終了すると、プロバイダーアカウントの:ui:`Created`タブの:ref:`クリーンルームUI<label-cleanroom_web_app_sign_in>`と、コンシューマーアカウントの:ui:`Invited`タブに、一覧表示されたクリーンルームが「Powered by Dev Edition」というラベルとともに確認できます。コンシューマーアカウントには招待メールが届きます。(:ui:`Invited`タブからクリーンルームをインストールしないでください。後のステップで、コード内でインストールします。)

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

では、プロバイダーの上限を外して、コンシューマーの上限を設定しましょう。

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

このチュートリアルでは、プロバイダーとコンシューマーのロールに同じアカウントを使用します。したがって、Snowsightの同じアカウント内に新しいSQLワークシートを「APIチュートリアル - コンシューマー」という名前で追加してください。

プロバイダーの場合と同様に、セッション環境を設定します。

USE WAREHOUSE app_wh;
USE ROLE samooha_app_role;
Copy

次に、プロバイダーとして公開し共有したクリーンルームをインストールします。クリーンルームをインストールするには、クリーンルーム名と、クリーンルームを共有したプロバイダーのアカウントロケーターの両方を指定する必要があります。クリーンルーム名とアカウントロケーターを指定すると、同じ名前のクリーンルームを区別できます。SELECT CURRENT_ACCOUNT(); を実行してプロバイダーロケーターを取得します。

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

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

コンシューマー: ポリシーの設定は必要なし

プロバイダーと同じ方法でデータにポリシーを設定できますが、このテンプレートはコンシューマーのみが実行することを承認されているため、自分のクエリを制限する必要がありません。いずれの場合も、クエリの実行時に独自の行ポリシーと列ポリシーは無視されます。

しかし、このテンプレートを実行するプロバイダーのリクエストを承認する場合は、まず結合ポリシーと列ポリシーをデータに設定し、プロバイダーがそのデータをどう利用できるのかを制御します。

コンシューマー: 分析を実行する

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

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

  • テンプレートで使用するテーブル名。

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

  • 渡したいその他の名前/値の変数。

テンプレートを調べる

テンプレートを調べて、テンプレートが実行することや受け入れる引数を確認することができます。次の例は、クリーンルームのテンプレートを一覧表示して、テンプレートのコードを確認し、受け入れる引数を確認する方法を示しています。

-- List templates in the clean room.
CALL samooha_by_snowflake_local_db.consumer.view_added_templates($cleanroom_name);

-- See the template code.
SET template_name = 'overlap_template';
CALL samooha_by_snowflake_local_db.consumer.view_template_definition(
  $cleanroom_name,
  $template_name);

-- See what arguments can be passed in to the template:
CALL samooha_by_snowflake_local_db.consumer.get_arguments_from_template(
  $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`` であることに注意してください。小文字の``p`` および ``c``を使用する必要があります。

最初のクエリでは、以下の値を使用します。

  • プロバイダーテーブル: 選択肢は 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'], -- Consumer table list.
  ['cleanroom_tut_db.cleanroom_tut_sch.demo_provider_table'], -- Provider table list.
  OBJECT_CONSTRUCT(                    -- Additional template arguments as name-value pairs.
    'consumer_join_col','c.age_band',
    'provider_join_col','p.age_band',
    'group_by_col','p.status'
  )
);
Copy

おめでとうございます。Snowsightでクエリ結果が表示されるはずです。

ここでは説明しませんが、他にもクエリの結果を自分の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