自由形式の SQL クエリ

データプロバイダーは、テンプレートまたは自由形式クエリを介して、分析実行者にデータを公開することを許可できます。データプロバイダーがデータセットに対して自由形式のクエリを有効にすると、データ提供にアクセスできる分析実行者は、そのデータセットに対して環境内で SQL クエリを実行できます。

データが利用可能になるには、分析実行者とデータプロバイダーの両方がコラボレーションに参加している必要があります。

概要

クリーンルームのデータに対して自由形式のクエリを実行するステップは次のとおりです。

データプロバイダー

  1. allowed_analyses: template_and_freeform_sql が指定されている1つ以上のデータセットを含むデータ提供を登録します。

    データプロバイダーがデータセットの列にSnowflakeポリシーを適用する場合は、データを登録する前にこれらのポリシーを作成し、ポリシーをデータ提供仕様の列に関連付ける必要があります。

  2. 標準的な方法で、データ提供をコラボレーションにリンクします。

分析実行者

アカウントにコラボレーションがインストールされた後、分析実行者は VIEW_DATA_OFFERINGS を呼び出します。freeform_sql_view_name 列に値がある場合、その列で名づけられたビューに対してデータセットを直接クエリできます。

freeform_sql_column_policies にリストされているポリシーはコラボレーションによってデータに適用されます。データプロバイダーによってソースデータに直接適用されるポリシーはすべて強制されますが、その列には表示されません。

データプロバイダーと分析ステップの詳細については、次のセクションをご参照ください。

自由形式のクエリデータセットの登録(データプロバイダー)

次のステップは、データ提供の登録中に自由形式のクエリを有効にする方法を示しています。

  1. コラボレーション仕様で allowed_analyses: template_and_freeform_sql を指定します。これにより、テンプレートまたは自由形式のクエリを使用してデータセットをクエリできます。

    ...
    datasets:
    - alias: customers_view
      data_object_fqn: PROVIDER_DB.DATA_SCH.CUSTOMERS
      object_class: custom
      allowed_analyses: template_and_freeform_sql
      schema_and_template_policies:
        HASHED_EMAIL:
          category: join_standard
          column_type: hashed_email_b64_encoded
    ...
    

    schema_and_template_policies の下にリストされる列のみが、テンプレートまたは自由形式のクエリを介したクエリに利用できます。

  2. ソースデータに適用せずに、自由形式のクエリでSnowflakeポリシーを適用する場合は、次の手順を実行します。

    1. 標準の方法でSnowflakeポリシーを作成します。テーブルには適用しないでください。

      CREATE OR REPLACE AGGREGATION POLICY PROVIDER_DB.DATA_SCH.MIN_GROUP_SIZE_POLICY
        AS () RETURNS AGGREGATION_CONSTRAINT ->
          AGGREGATION_CONSTRAINT(MIN_GROUP_SIZE => 5);
      

      コラボレーションを作成するロールには、データベース、スキーマ、およびポリシーオブジェクトに対する USAGE 権限が必要です。

      これらのポリシーは動的にリンクされます。これらのポリシーを変更すると、データ提供がすでに登録されリンクされている場合でも、それらのポリシーを使用するすべてのデータセットにすぐに影響します。

    2. freeform_sql_policies フィールドの下にあるデータ提供仕様でポリシーを割り当てます。重要:freeform_sql_policies のもとで使用されるすべての列名は、列の名前が変更された場合、 自動生成列名 を使用する必要があります。名前の変更は、結合標準カテゴリ列のみに影響します。

      これらのポリシーはソーステーブルには直接適用されず、コラボレーションによって登録されたビューにのみ適用されます。

      schema_and_template_policies:
        HASHED_EMAIL:                                  # Source column name.
          category: join_standard
          column_type: hashed_email_b64_encoded        # Column is renamed to the column_type value.
        STATUS:
          category: passthrough
        AGE_BAND:
          category: passthrough
        DAYS_ACTIVE:
          category: passthrough
        INCOME_BRACKET:
          category: passthrough
      freeform_sql_policies:          # Apply agg, join, and masking policies created by the data owner to these columns.
        aggregation_policy:
          name: PROVIDER_DB.DATA_SCH.MIN_GROUP_SIZE_POLICY
          entity_keys:
            - HASHED_EMAIL_B64_ENCODED
        join_policy:
          name: PROVIDER_DB.DATA_SCH.EMAIL_JOIN_POLICY
          columns:
            - HASHED_EMAIL_B64_ENCODED    # This is the renamed column.
        masking_policies:
          - name: PROVIDER_DB.DATA_SCH.MASK_INCOME_POLICY
            columns:
              - INCOME_BRACKET
      
  3. REGISTER_DATA_OFFERING を呼び出して、標準の方法でデータ提供を登録します。

自由形式のクエリの実行(分析実行者)

分析実行者が VIEW_DATA_OFFERINGS を呼び出すとき、 freeform_sql_view_name 列に値が表示される場合、自由形式 SQL ビューは、テンプレートを使用せずに直接クエリできます。ソーステーブルに適用される、または データ提供の freeform_sql_policies セクションで定義されたすべてのSnowflakeポリシーがクエリで強制されます。

CALL SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.COLLABORATION.VIEW_DATA_OFFERINGS($collaboration_name);

TEMPLATE_VIEW_NAME

data_provider.provider_customers_V1.customers

TEMPLATE_JOIN_COLUMNS

hashed_email_b64_encoded

ANALYSIS_ALLOWED_COLUMNS

STATUS, AGE_BAND, DAYS_ACTIVE, INCOME_BRACKET

ACTIVATION_ALLOWED_COLUMNS

FREEFORM_SQL_VIEW_NAME

SFDCR_FREEFORM_SQL_DEMO.FREEFORM_SQL.DATA_PROVIDER_PROVIDER_CUSTOMERS_V1_CUSTOMERS

FREEFORM_SQL_COLUMN_POLICIES

{
  "aggregation_policy": {"entity_keys": ["HASHED_EMAIL_B64_ENCODED"]},
  "masking_policy": {"columns": ["INCOME_BRACKET"]},
  "join_policy": {"columns": ["HASHED_EMAIL_B64_ENCODED"]},
  "no_policy": {"columns": ["DAYS_ACTIVE", "AGE_BAND", "STATUS"]}
}

SHARED_BY

data_provider

SHARED_WITH

["data_consumer"]

DATA_OFFERING_ID

provider_customers_V1

template_view_name の値 ではなくfreeform_sql_view_name の値を使用する必要があります。

SELECT status, COUNT(*) AS customer_count
  FROM SFDCR_FREEFORM_SQL_DEMO.FREEFORM_SQL.DATA_PROVIDER_PROVIDER_CUSTOMERS_V1_CUSTOMERS AS t
  GROUP BY status
  ORDER BY customer_count DESC;

例:二者間のコラボレーション

次の例は、二者間のコラボレーションを示しています。1人目(「プロバイダー」)は、コラボレーションの所有者であり、コンシューマーにとってのデータプロバイダーです。2人目(「コンシューマー」)は、テンプレートを実行し、プロバイダーから提供されたデータを使用できる分析実行者であり、データプロバイダーの仕様で定義されたポリシーに従って、データに対して自由形式の SQL クエリを実行します。

この例を実行するには、Snowflake Data Clean Rooms がインストールされた2つの別々のアカウントが必要です。

ファイルをダウンロードしてSnowflakeアカウントにアップロードするか、Snowsight を使用してサンプルコードを2つの別々のアカウントのワークシートにコピーして貼り付けることができます。

ソース SQL ファイルをダウンロードした後、Snowflake Data Clean Rooms がインストールされた2つの別々のアカウントにアップロードします。