クエリ結果のアクティベーション

アクティベーションの概要

コラボレーターは、 アクティベーション と呼ばれるプロセスで、クリーンルームの外でテンプレート結果を送信することができます。テンプレートはアクティベーションをサポートする必要があり、各データプロバイダーはデータ提供仕様の列レベルでアクティベーションを承認する必要があります。

アクティベーションは、専用のアクティベーションテンプレートを使用して実装されます。アクティベーションテンプレートはクエリ実行者に結果を返すのではなく、ターゲットユーザーのアカウントの結果テーブルに結果を書き込みます。

注釈

結果を別のSnowflakeアカウントにアクティブ化するには、Snowflake Enterprise Editionまたはそれ以上が必要です。

アクティベーションの実装

アクティベーションを実装するステップは以下の通りです。

  1. 分析実行者として参加するコラボレーションに参加するには、 REGISTERDATAOFFERING権限 を持つロールを使用し、コラボレーション仕様に activation_destinations フィールドが含まれている必要があります。

  2. すべての仕様が適切に設定されていることを確認します。

    アクティブ化列を持つテーブルの データ提供仕様 で、その列を activation_allowed: TRUE に設定する必要があります。

     api_version: 2.0.0
     spec_type: data_offering
     name: 2025_orders
     version: 2025_01_01_v1
     description: Activating Cleveland sales results for 2025
    
     datasets:
      - alias: customers
        data_object_fqn: db1.schema1.orders
        allowed_analyses: template_only
        object_class: custom
        schema_and_template_policies:
          email:
            category: join_standard
            column_type: hashed_email_sha256
            activation_allowed: TRUE
          purchase_amount:
            category: passthrough
            activation_allowed: TRUE
    
  3. アクティベーションテンプレート を使用する必要があります。このテンプレートは、結果を内部テーブルに保存します。このテンプレートからのすべての投影列はアクティブ化されます。

    activation_policy フィルターが適用されたテンプレート内のすべての列は、データ提供仕様内で activation_allowed: TRUE に設定されている必要があります。

    注釈

    テンプレートが列に activation_policy フィルターを適用しない場合、データ提供仕様でその列に対して activation_allowed: TRUE が設定されているかどうかに関わらず、その列をアクティブ化できます。

    以下の例は、分析実行者が提供した2つの列にアクティベーションポリシーが適用されたテンプレートを示しています。

    BEGIN
      CREATE OR REPLACE TABLE cleanroom.activation_data_analysis_results AS
        SELECT count(*) AS ITEM_COUNT, c.status, c.age_band
        FROM IDENTIFIER({{ my_table[0] }}) AS c
        JOIN IDENTIFIER({{ source_table[0] }}) AS p
        ON {{ c_join_col | sqlsafe | activation_policy }} = {{ p_join_col | sqlsafe | activation_policy }}
        GROUP BY c.status, c.age_band
        ORDER BY c.age_band;
      RETURN 'analysis_results';
    END;
    
  4. 分析実行者は RUN を呼び出して分析を実行し、結果をアクティブ化します。

    • ご自身でアクティブ化する場合、結果は呼び出し元のアカウントですぐに利用可能になります。

    • 他のコラボレーターでアクティブ化する場合:

      1. コラボレーターは SHARED のステータスが返されるまで VIEW_ACTIVATIONS を呼び出します。

        別のアカウントへのアクティブ化は、大きな結果セットの場合はかなりの時間がかかることがあります。これは、データをコラボレーターのアカウントと共有する必要があるためです。クロスクラウドのコラボレーターも、複製の頻度設定のため追加の遅延が発生します。

      2. アクティベーションのステータスが SHARED になったら、コラボレーターは PROCESS_ACTIVATION を呼び出して結果をアカウントに送信します。

        PROCESS_ACTIVATION への応答には、テーブル名とセグメント名が含まれます。これにより、アクティベーションステータスが PROCESSED に設定されます。

  5. 分析実行者は、次のセクションで説明するように結果を読み取ることができます。

アクティベーション結果の読み取り

前のセクションで説明したように、アクティベーションが完了すると、結果はアカウント内の collaboration_name.activation.segment_records テーブルに保存されます。

テーブルは以下のスキーマを使用します。

説明

BATCH_ID

処理されたバッチジョブの UID。

SEGMENT_NAME

アクティベーションペイロードの名前。

TEMPLATE_ID

アクティベーションに使用されたテンプレートの ID。

SHARED_BY

データをアクティブ化したコラボレーターの名前。

UPDATED_ON

バッチが正常に処理されたときのタイムスタンプ。

RECORDS

アクティベーションプレートテンプレートから取得した、アクティベート化された IDs と属性のペイロード。

注釈

コラボレーターがクリーンルームを離れると、アクティブ化された結果を含むテーブルを含め、アプリケーションへのアクセスが失われます。

アクティブ化結果を取得するには、次の SQL コマンド、オプションでセグメント名でのフィルタリングを実行します。

SELECT *
  FROM <collaboration_name>.activation.segment_records
    [WHERE segment_name = '<segment_name>'];