자유 형식 SQL 쿼리

데이터 공급자는 템플릿 또는 자유 형식 쿼리를 통해 데이터를 분석 실행자에 노출하도록 허용할 수 있습니다. 데이터 공급자가 데이터 세트에 대한 자유 형식 쿼리를 활성화하면 데이터 오퍼링에 액세스할 수 있는 모든 분석 실행자가 해당 데이터 세트에 대한 환경에서 SQL 쿼리를 실행할 수 있습니다.

분석 실행자와 데이터 공급자가 모두 공동 작업에 조인해야 데이터를 사용할 수 있습니다.

개요

Clean Room에서 데이터에 대해 자유 형식 쿼리를 실행하는 단계는 다음과 같습니다.

데이터 공급자:

  1. allowed_analyses: template_and_freeform_sql 이 지정된 하나 이상의 데이터 세트가 포함된 데이터 오퍼링을 등록합니다.

    데이터 공급자가 데이터 세트의 열에 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 뷰를 직접 쿼리할 수 있습니다. 소스 테이블에 적용되거나 데이터 오퍼링의 <label-dcr_collaboration_data_yaml>```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;

예: 양자 간 공동 작업

다음 예제에서는 한 당사자(“공급자”)가 공동 작업 소유자이고 컨슈머의 데이터 공급자인 양 당사자 공동 작업을 보여줍니다. 다른 당사자(“컨슈머”)는 템플릿을 실행하고 공급자가 제공한 데이터를 사용할 수 있으며 공급자의 사양에 정의된 정책에 따라 데이터에 대한 자유 형식 SQL 쿼리도 실행할 수 있는 분석 실행자입니다.

이 예제를 실행하려면 Snowflake Data Clean Rooms 가 설치된 별도의 두 계정이 있어야 합니다.

파일을 다운로드하여 Snowflake 계정에 업로드하거나 Snowsight 를 통해 예제 코드를 복사하여 별도의 두 계정의 워크시트에 붙여넣을 수 있습니다.

소스 SQL 파일을 다운로드한 다음 Snowflake Data Clean Rooms 가 설치된 별도의 두 계정에 업로드합니다.