Snowflake Collaboration Data Clean Rooms 사용

이 항목에서는 Collaboration Data Clean Rooms 사용에 대한 간략한 개요를 살펴봅니다. 또한 공동 작업을 생성하거나 공동 작업에 참여하는 데 필요한 모든 주요 단계에 대한 세부 정보를 제공합니다.

요구 사항

  • 사용자는 :ref:`최신 버전의 Snowflake Data Clean Rooms로 업데이트 <label-dcr_updating_cleanrooms_environment>`해야 합니다.

  • 소유자와 데이터 공급자는 Snowflake Enterprise Edition을 사용해야 합니다. 분석 실행자는 Standard Edition을 사용할 수 있습니다.

  • 공동 작업을 확인하거나 관리하려면 Data Clean Rooms Collaboration API에 액세스해야 합니다. 자세한 내용은 DCR Collaboration API에 대한 액세스 관리 섹션을 참조하십시오.

  • Collaboration API를 사용할 때는 사용자 환경에서 보조 역할을 비활성화해야 합니다.

    USE SECONDARY ROLES NONE;
    
    Copy

기본 클린룸 공동 작업 워크플로

간단한 클린룸 공동 작업 시나리오는 다음과 같습니다.

  1. 공동 작업 :doc:`소유자 </user-guide/cleanrooms/v2/roles>`는 공동 작업의 초기 구성에 표시할 템플릿 또는 데이터 오퍼링을 선택적으로 등록합니다.

  2. 소유자는 선택적으로 공동 작업자에게 공동 작업의 초기 구성에 표시할 템플릿 또는 데이터 오퍼링을 등록하도록 요청합니다. 그런 다음 공동 작업자는 등록한 모든 항목의 리소스 IDs를 제공합니다.

  3. 그런 다음 소유자는 :ref:`공동 작업을 생성 <label-dcr_collaboration_create_collaboration>`합니다. 공동 작업은 공동 작업 YAML 사양에 의해 정의됩니다. 여기에는 공동 작업자, 공동 작업자의 역할, 그리고 초기 버전의 공동 작업에 포함되어야 하는 모든 리소스가 나열되어 있습니다.

    • 공동 작업이 생성되면 공동 작업자 명단과 해당 역할은 고정됩니다. 즉, 공동 작업 정의에 역할이 지정된 공동 작업자만 참여하도록 초대받습니다. 마찬가지로, 분석 실행자 명단도 고정됩니다. 그러나 모든 공동 작업자는 새 데이터를 공동 작업에 연결하여 데이터 공급자가 될 수도 있습니다.

    • 공동 작업에 다른 클라우드 호스팅 리전의 사용자가 포함된 경우 해당 사용자는 :ref:`계정에서 클라우드 간 자동 복제를 활성화 <label-dcr_collab_enabling_laf>`해야 공동 작업을 검토하고 참여할 수 있습니다.

  4. 소유자가 자신이 생성한 공동 작업에 참여하면 공동 작업이 활성화됩니다. 이제 사양에 명시된 모든 공동 작업자가 공동 작업을 확인하고 참여할 수 있습니다.

  5. 공동 작업자는 :ref:`공동 작업을 검토하고 참여 <label-dcr_collaboration_join_collaboration>`합니다.

  6. 공동 작업자는 선택적으로 :ref:`공동 작업에 리소스를 추가 <label-dcr_collaboration_add_resources>`하며(예: 템플릿), 데이터 공급자인 경우 데이터 오퍼링을 추가합니다.

  7. 분석 실행자는 공동 작업에서 사용 가능한 모든 데이터(및 선택적으로 공유되지 않은 로컬 데이터)를 사용하여 공동 작업에서 :ref:`할당된 템플릿을 실행 <label-dcr_collab_run_an_analysis>`할 수 있습니다. 분석 실행자는 분석 비용을 부담합니다. 템플릿은 쿼리 결과를 응답을 통해 반환하거나 :ref:`호출자 또는 다른 공동 작업자에게 결과를 활성화 <label-dcr_collaboration_activating_results>`합니다.

다음 섹션에서는 이러한 각 단계에 대한 세부 정보를 설명합니다.

공동 작업 생성

공동 작업을 생성하려면 모든 공동 작업자 및 :doc:`해당 역할 </user-guide/cleanrooms/v2/roles>`을 정의하는 :ref:`공동 작업 사양 <label-dcr_collaboration_invitation_yaml>`을 설계합니다. 공동 작업 소유자는 선택적으로 초기 공동 작업에서 사용하려는 :ref:`다른 리소스를 등록 및 연결 <label-dcr_collaboration_add_resources>`하고 공동 작업 사양에 해당 리소스를 포함합니다. 소유자가 공동 작업자의 리소스를 사용하고자 하는 경우, 해당 사용자에게 리소스를 등록하고 리소스 IDs를 소유자에게 전달하도록 요청하여 공동 작업 사양에 포함할 수 있습니다.

그런 다음 소유자는 INITIALIZE를 호출하여 협업 생성을 시작합니다. 기본적으로 INITIALIZE는 소유자를 자동으로 협업에 조인시킵니다. 이는 비동기 프로세스이므로 JOINED 상태가 될 때까지 GET_STATUS를 호출해야 합니다. 협업 상태가 JOINED인 경우 협업이 활성화되며 모든 공동 작업자가 협업을 보고 조인할 수 있습니다.

CALL SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.COLLABORATION.INITIALIZE(
$$
api_version: 2.0.0
spec_type: collaboration
name: my_first_collaboration
owner: alice
collaborator_identifier_aliases:
  alice: example_com.acct_abc
  bob: another_example.acct_xyz
analysis_runners:
  bob:
    data_providers:
      alice:
        data_offerings: []
      bob:
        data_offerings: []
  alice:
    data_providers:
      alice:
        data_offerings: []
      bob:
        data_offerings: []
    templates: []
$$,
'APP_WH'
);
SET collaboration_name = '<collaboration_name>';

-- INITIALIZE automatically joins the owner. Check status until JOINED.
CALL SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.COLLABORATION.GET_STATUS($collaboration_name);

-- Collaboration is visible here when it's joined.
CALL SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.COLLABORATION.VIEW_COLLABORATIONS();
Copy

공동 작업에 리소스 추가

모든 공동 작업자는 공동 작업에 리소스를 추가하거나 공동 작업에 추가한 리소스를 제거할 수 있습니다. 공동 작업에 리소스를 추가하는 두 단계는 다음과 같습니다.

  1. 리소스 소유자는 리소스에 대해 :doc:`리소스 정의 사양 </user-guide/cleanrooms/v2/spec-reference>`을 생성하고 이를 사용하여 계정에 리소스를 등록합니다. 계정의 :doc:`기본 레지스트리 </user-guide/cleanrooms/v2/registries>`에 리소스를 등록하거나 사용자 지정 레지스트리를 사용합니다.

  2. 공동 작업자는 리소스를 공동 작업에 연결합니다. 리소스가 연결되면 지정된 공동 작업자가 사용할 수 있습니다. 템플릿과 같은 일부 리소스 유형은 모든 공동 작업자가 연결할 수 있습니다. 데이터 오퍼링과 같은 기타 리소스는 데이터 공급자 역할의 사용자만 연결할 수 있습니다. 리소스는 일반적으로 공동 작업 사양 및 리소스 공유자가 정의된 대로 특정 공동 작업자만 사용할 수 있습니다.

공동 작업이 생성되기 전이나 후에 공동 작업에 리소스를 추가할 수 있습니다.

리소스는 버전 관리를 지원합니다. 그러나 새 버전으로 새 리소스를 생성해도 공동 작업에서 이전 버전이 제거되지는 않습니다.

리소스는 사용자가 제공한 이름과 버전(데이터 오퍼링의 경우 별칭)을 결합하여 고유하게 명명됩니다.

공동 작업에 다음 리소스를 추가할 수 있습니다.

템플릿

템플릿은 지정된 공동 작업자가 실행할 수 있는 JinjaSQL 클린룸 템플릿입니다. 모든 공동 작업자는 다음 단계에 설명된 대로 영향을 받는 모든 공동 작업자가 요청을 승인하는 한 공동 작업에 템플릿을 등록하고 추가할 수 있습니다. 자신의 계정에 등록된 템플릿만 추가하거나 제거할 수 있습니다.

**공동 작업에 템플릿을 추가**하려면:

  1. :ref:`공동 작업을 위한 템플릿을 디자인 <label-dcr_design_collaboration_template>`하고 :ref:`템플릿 사양 <label-dcr_collaboration_template_yaml>`에 포함합니다.

  2. ``REGISTRY.REGISTER_TEMPLATE``을 호출하여 템플릿을 등록합니다. 이는 템플릿 ID를 반환합니다.

  3. 템플릿을 연결합니다. 이 프로세스는 공동 작업이 이미 존재하는지에 따라 달라집니다.

    • **공동 작업이 생성되기 전에 템플릿을 추가**하려면 템플릿 ID를 공동 작업 소유자에게 제공합니다. 공동 작업 소유자는 이를 :ref:`공동 작업 사양 <label-dcr_collaboration_invitation_yaml>`에 추가하여 템플릿을 실행할 수 있는 대상을 정의합니다.

       alice:
         data_providers:
           bob:
             data_offerings: []
         templates:
         - id: bob_template_v1 # Alice can run this template, seemingly registered by bob.
      
      Copy
    • **기존 공동 작업에 템플릿을 추가**하려면 템플릿의 영향을 받는 모든 공동 작업자에게 권한을 요청해야 합니다. 기존 공동 작업에 템플릿을 추가하려면 다음 단계를 따릅니다.

      1. ``REGISTER_TEMPLATE``을 호출하여 계정에 템플릿을 등록하면 공동 작업에 추가할 수 있습니다.

      2. 템플릿 ID와 함께 ``ADD_TEMPLATE_REQUEST``를 호출하여 특정 사용자를 대상으로 특정 공동 작업에 템플릿을 추가하는 승인 흐름을 시작합니다.

        리소스의 영향을 받는 모든 공동 작업자는 ``VIEW_UPDATE_REQUESTS``를 호출할 때 요청을 확인합니다.

      3. PENDING 상태의 요청을 확인하는 공동 작업자는 APPROVE_UPDATE_REQUEST 또는 ``REJECT_UPDATE_REQUEST``를 호출해야 합니다.

        • 공동 작업자가 요청을 거부하면 업데이트 요청이 거부됩니다.

        • 공동 작업자는 나중에 승인을 거부로 변경하거나 거부를 승인으로 변경할 수 없습니다.

        요청 상태가 APPROVED인 경우 템플릿 추가 요청에 지정된 사용자가 템플릿을 사용할 수 있습니다. 요청이 REJECTED인 경우 거부 당사자가 제공한 모든 이유는 요청 보고서에 표시됩니다. 모든 사용자가 템플릿을 승인한 후 템플릿을 사용할 수 있을 때까지 약간의 지연이 있을 수 있습니다. 템플릿을 사용할 수 있는지 확인하려는 경우 ``view_templates``를 호출합니다.

등록한 템플릿을 확인하려면 ``REGISTRY.VIEW_REGISTERED_TEMPLATES``를 호출합니다.

공동 작업을 위한 템플릿 디자인

공동 작업 템플릿은 :doc:`클린룸 템플릿 </user-guide/cleanrooms/custom-templates>`과 동일하지만 다음과 같은 몇 가지 고려 사항이 있습니다.

  • 공동 작업에 나열된 공유 테이블은 템플릿의 source_table 변수를 채우는 데 사용됩니다.

  • my_table``은 분석 실행자가 공유되지 않은 로컬 데이터를 사용하려는 경우에만 사용됩니다. 템플릿의 ``my_table 변수를 사용하는 경우 해당 변수에 할당된 테이블은 공동 작업에 공유되지 않는다는 점에 유의합니다.

  • 데이터 소스의 열은 템플릿 또는 사용자에게 노출될 때 새 이름으로 바뀔 수 있습니다. 소스 열의 이름을 바꾸는 방법과 시기를 알아보려면 소스 열 이름 바꾸기 섹션을 참조하세요. 템플릿 및 사용자가 제공한 인자(예: 참여 열 이름)는 열 이름이 바뀐 경우 원래 이름이 아닌 최종 이름을 사용해야 합니다.

  • 공동 작업의 활성화 템플릿에는 activation_template_name 이름을 지정할 필요가 없습니다. 기타 모든 :ref:`활성화 템플릿 요구 사항 <label-dcr_custom_templates_activation>`은 계속 적용됩니다.

Snowflake Data Clean Rooms의 사용자 지정 템플릿 구문에 대한 자세한 내용은 사용자 지정 클린룸 템플릿 참조 섹션을 참조하세요.

데이터 오퍼링

*데이터 오퍼링*은 공동 작업에서 특정 분석 실행자와 공유되는 하나 이상의 데이터 뷰 세트입니다. 데이터 오퍼링은 공동 작업에 나열된 모든 데이터 공급자가 추가할 수 있습니다. 데이터 오퍼링은 :samp:`{data offering ID}.{alias}`와 같이 범위가 지정된 형식으로 노출됩니다. 여기서 별칭은 데이터 오퍼링의 특정 뷰입니다. :ref:`공동 작업 사양 <label-dcr_collaboration_invitation_yaml>`에 분석 실행자의 데이터 공급자로 명시된 경우에만 지정된 공동 작업자와 데이터 오퍼링을 공유할 수 있습니다.

데이터 오퍼링은 데이터의 라이브 뷰이며, 데이터 오퍼링이 생성되거나 등록된 시점의 데이터 스냅샷이 아닙니다. 소스 데이터에 적용된 모든 Snowflake 정책은 공동 작업에서 활성화됩니다.

데이터 오퍼링을 등록하면 Snowflake는 :ref:`데이터 오퍼링 사양 <label-dcr_collaboration_data_yaml>`에 명시된 각 데이터 소스의 뷰를 생성합니다. 이 뷰에는 데이터 오퍼링 사양에 명시된 열만 포함됩니다. 데이터 오퍼링을 공동 작업에 연결하면 Snowflake는 해당 뷰의 복사본을 생성합니다. 이 복사본은 :ref:`공동 작업 사양 <label-dcr_collaboration_invitation_yaml>`에 명시된 대로 해당 데이터 오퍼링에 액세스할 수 있는 분석 실행자만 액세스할 수 있도록 보호됩니다. 기본 테이블에 대한 액세스 권한을 이동하거나 이름을 변경하거나 변경하면 이전에 등록된 링크를 통해 데이터 오퍼링을 사용할 수 없게 됩니다.

Snowflake Standard Edition을 사용하는 경우 데이터 오퍼링을 다른 공동 작업자와 공유할 수 없지만 :ref:`자체 데이터를 쿼리에 사용 <label-dcr_using_local_data>`할 수 있습니다.

요구 사항:

  • 공유하려는 모든 데이터에 대한 OWNERSHIP 권한이 있어야 합니다. 그렇지 않으면 공동 작업에 참여하려고 할 때 “참조 사용 권한 누락” 오류가 발생합니다. 이 문제를 처리하는 방법을 알아보세요.

  • 공동 작업에 :doc:`데이터 공급자 역할 </user-guide/cleanrooms/v2/roles>`이 있어야 합니다.

다음 단계에 따라 데이터 오퍼링을 공동 작업에 추가합니다.

  1. 데이터에 대한 :ref:`데이터 오퍼링 사양 <label-dcr_collaboration_data_yaml>`을 생성합니다.

  2. 데이터 오퍼링 ID를 반환하는 ``REGISTRY.REGISTER_DATA_OFFERING``을 호출하여 데이터 오퍼링을 등록합니다.

    이 단계를 수행하면 액세스할 수 있는 모든 공동 작업에 데이터 오퍼링을 연결할 수 있는 상태가 됩니다. 동일한 데이터 오퍼링 ID를 사용하여 여러 공동 작업과 데이터 오퍼링을 공유할 수 있습니다.

  3. 다음 단계는 공동 작업이 생성되었는지에 따라 달라집니다.

    • 공동 작업이 아직 생성되지 않은 경우 데이터 공급자는 :ref:`공동 작업 정의 <label-dcr_collaboration_invitation_yaml>`에 추가할 데이터 오퍼링 ID를 공동 작업 생성자에게 제공합니다. 데이터 오퍼링이 공동 작업 정의에 추가되면, 데이터 공급자가 공동 작업에 참여한 후 공동 작업의 모든 공동 작업자에게 데이터 오퍼링이 표시됩니다.

    • 공동 작업이 생성된 경우 데이터 공급자는 공동 작업에 참여하고 데이터 오퍼링 ID, 공동 작업 이름, 데이터를 공유할 수 있는 사용자와 함께 ``COLLABORATION.LINK_DATA_OFFERING``을 호출합니다. 모든 사용자가 데이터 오퍼링을 승인한 후 데이터 오퍼링을 사용할 수 있게 되기까지 짧은 지연이 있을 수 있습니다. 데이터를 사용할 수 있는지 확인하려는 경우 ``view_data_offerings``를 호출합니다.

    ``unlink_data_offering``을 호출하여 공동 작업에서 데이터 리소스를 제거할 수 있습니다.

각 데이터 오퍼링은 하나 이상의 테이블 또는 뷰를 나타냅니다. 개별 테이블은 collaborator alias.data offering ID.dataset alias 구문을 사용하여 액세스할 수 있습니다. 여기서 데이터 오퍼링 ID는 사용자가 제공한 이름과 버전 값의 조합이며, 별칭은 오퍼링의 단일 테이블입니다. 데이터 오퍼링을 등록할 때 이름, 버전, 별칭을 하나의 범위 지정 시스템으로 간주하도록 합니다.

예를 들어, US 주에 고유한 테이블이 있는 다음과 같은 판매 데이터 오퍼링을 등록할 수 있습니다.

api_version: 2.0.0
spec_type: data_offering
version: v0
name: examplecorp_sales_by_state
datasets:
 - alias: AL
   data_object_fqn: mydb.mysch.al_data
 - alias: NY
   data_object_fqn: mydb.mysch.ny_data
 - alias: CA
   data_object_fqn: mydb.mysch.ca_data
Copy

그러면 분석 실행자가 이러한 테이블을 data offering id.AL, data offering id.NY 또는 :samp:`{data offering id}.CA`로 참조합니다.

데이터 오퍼링을 등록한 사용자가 공동 작업에 참여할 때까지 데이터 오퍼링은 공동 작업에 표시되지 않습니다.

공유하는 데이터에 대해 OWNERSHIP 권한이 없는 경우 공동 작업에 참여하거나 데이터 오퍼링을 연결하려고 하면 오류가 발생합니다. 오류 메시지에는 ACCOUNTADMIN이 공동 작업에 데이터 액세스 권한을 부여하기 위해 실행해야 하는 SQL 명령에 대한 정보가 표시됩니다. ACCOUNTADMIN이 명령을 실행하면 공동 작업에 참여할 수 있습니다. 자세한 내용을 참조하세요..

쿼리를 실행할 때 분석 실행자는 COLLABORATION.RUN``의 ``source_tables 매개 변수 데이터 오퍼링을 ID로 전달합니다.

등록된 데이터 오퍼링을 보려면 ``VIEW_REGISTERED_DATA_OFFERINGS``를 호출합니다.

데이터에 사용 정책 적용

참여 또는 집계 정책과 같은 Snowflake 열 정책을 공유 데이터에 적용하는 두 가지 방법이 있습니다.

소스 데이터에 정책 적용

소스 데이터에 적용된 모든 Snowflake 정책은 공동 작업의 데이터 오퍼링 뷰에도 적용됩니다.

소스 데이터에 Snowflake 정책을 적용하는 경우, 공동 작업자에게 이에 대해 알려야 합니다. 그래야 공동 작업자가 참여할 수 없는 열에 참여하거나 그룹화가 필요한 상황에서 그룹화하지 않는 쿼리를 자신도 모르게 실행하는 상황을 방지할 수 있습니다. 데이터 오퍼링의 description 필드에 Snowflake 정책을 언급할 수 있습니다.

데이터 오퍼링에 정책 적용(자유 형식 쿼리 사용만 해당)

Snowflake 정책을 소스 데이터에 적용하지 않고 공유 데이터의 :ref:`자유 형식 쿼리 <label-dcr_collab_enable_free_form_queries>`에 적용할 수 있습니다. 이러한 정책은 소스 테이블에 바로 적용되는 Snowflake 정책 외에도 자유 형식 쿼리를 사용하여 액세스할 때 데이터에 적용됩니다.

**데이터에 자유 형식 SQL 정책을 추가**하려면:

  1. :ref:`Collaboration Data Clean Rooms에서 지원하는 정책 유형 <label-dcr_freeform_sql_policies_field>`을 생성합니다.

  2. 데이터 오퍼링 정의에 다음 정보를 추가합니다.

    • ``allowed_analyses: template_and_freeform_sql``을 설정합니다.

    • freeform_sql_policies 섹션을 데이터 세트 정의에 추가합니다.

    • freeform_sql_policies 아래에 적절한 정책 유형 섹션을 추가하고, 생성한 Snowflake 정책과 그 정책을 적용할 공동 작업 열을 명시합니다.

공동 작업자는 ``COLLABORATION.VIEW_DATA_OFFERINGS``를 호출할 때 데이터에 적용된 정책 유형을 확인합니다.

여러 테이블의 여러 열에 대한 정책을 재사용할 수 있습니다.

예:

CREATE OR REPLACE AGGREGATION POLICY my_db.public.my_agg_policy AS ()
  RETURNS AGGREGATION_CONSTRAINT ->
    AGGREGATION_CONSTRAINT(MIN_GROUP_SIZE => 5);
Copy

소스 열 이름 바꾸기

템플릿 또는 자유 형식 SQL 호출자에 노출되는 열 이름은 데이터 오퍼링 정의 <label-dcr_collaboration_data_yaml>`에서 열을 설명하는 ``category`column_type 값에 의해 결정됩니다. 열 이름 바꾸기는 다음 규칙을 따릅니다.

  • 열의 category``가 ``join_custom 또는 ``passthrough``인 경우 원래 열 이름이 노출됩니다.

  • category``가 ``join_standard``인 경우 열의 이름이 ``column_type 값으로 바뀝니다.

  • ``category``가 ``timestamp``인 경우 열의 이름이 데이터 오퍼링의 ``timestamp``로 바뀝니다.

예를 들어, 소스 테이블의 열 이름이 ``user_email_address``인 경우, 이 열이 템플릿 또는 자유 형식 SQL에 노출되는 방식은 데이터 오퍼링 정의에 명시된 방식에 따라 달라집니다.

  • 열 카테고리가 ``join_standard``이고 ``column_type``이 있는 경우:

    ... Snippet from data offering yaml ...
    schema_and_template_policies:
         user_email_address:
           category: join_standard
           column_type: hashed_email_sha256
    
    Copy

    그러면 column_type 값이 쿼리 및 템플릿에서 사용됩니다.

    SELECT HASHED_EMAIL_SHA256 FROM source_table[0];
    
    Copy
  • 열 카테고리가 ``join_custom``인 경우:

    ... Snippet from data offering yaml ...
    schema_and_template_policies:
         user_email_address:
           category: join_custom
           column_type: hashed_email_sha256
    
    Copy

    그러면 원래 소스 열 이름이 쿼리 및 템플릿에 사용됩니다.

    -- column_type is ignored for join_custom columns.
    SELECT user_email_address FROM source_table[0];
    
    Copy

공동 작업에 참여

공동 작업에 기여한 모든 리소스를 공동 작업에서 사용하거나 공동 작업에서 분석을 실행하려면 공동 작업에 참여해야 합니다.

  • INITIALIZE를 호출하면 *생성자*가 자동으로 조인됩니다(``auto_join_warehouse``가 제공되지 않는 한). 자동 조인이 비활성화된 경우 생성자는 JOIN을 별도로 호출합니다.

  • *비생성자*는 REVIEW를 호출한 후 JOIN을 호출합니다.

    중요

    계정이 공동 작업 소유자의 리전과 다른 클라우드 호스팅 리전에 있는 경우:

참여는 비동기 프로세스입니다. 상태가 JOINED로 표시되는 시점을 확인하려면 ``GET_STATUS``를 호출합니다.

분석 실행

쿼리에서 템플릿을 실행하거나 공동 작업 데이터에 자유 형식 SQL 쿼리를 실행하여 분석을 실행할 수 있습니다. 공동 작업에서 분석을 실행하려면 지정된 :doc:`분석 실행자 </user-guide/cleanrooms/v2/roles>`여야 합니다. 공동 작업 사양에 따라 템플릿 실행, 결과 활성화, 자유 형식 SQL 쿼리 실행 가능 여부가 결정됩니다. 권한과 사용할 수 있는 데이터 및 템플릿은 공동 작업 사양에 설명되어 있습니다.

분석 실행자는 분석 실행 비용을 부담합니다.

템플릿에서 분석 실행

템플릿에서 분석을 실행하려면 실행할 수 있는 템플릿 목록을 보고, 사용할 수 있는 데이터 오퍼링 목록을 확인한 다음, 값을 개별 매개변수 또는 YAML 형식의 분석 사양으로 사용하여 ``COLLABORATION.RUN``을 호출합니다.

-- See which data offerings are available.
CALL SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.COLLABORATION.VIEW_DATA_OFFERINGS($collaboration_name);

-- See which templates you can run.
CALL SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.COLLABORATION.VIEW_TEMPLATES($collaboration_name);

-- Pass in the arguments in analysis YAML format.
CALL SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.COLLABORATION.RUN(
  $collaboration_name,
  $$
    api_version: 2.0.0
    spec_type: analysis
    name: My_analysis
    description: Sales results Q2 2025
    template: sales_join_template

    template_configuration:
      view_mappings:
        source_tables:
          -  user1_alias.data_offering_v1.table1
          -  user2_alias.another_data_offering_v1.table_2
      arguments:
         conv_purchase_id: PURCHASE_ID
         conv_purchase_amount: PURCHASE_AMOUNT
         publisher_impression_id: IMPRESSION_ID
         publisher_campaign_name: CAMPAIGN_NAME
         publisher_device_type: DEVICE_TYPE
  $$ );
Copy

데이터에 대해 자유 형식 SQL 쿼리 활성화 및 실행

데이터 공급자는 분석 실행자가 공동 작업 데이터 오퍼링에 대한 SQL 쿼리를 실행할 수 있도록 지원할 수 있습니다. 데이터에 대해 자유 형식 SQL 쿼리를 실행할 수 있으려면 공동 작업의 구성원이어야 하며 데이터 오퍼링에 대한 자유 형식 SQL 권한이 있는 분석 실행자 역할을 보유해야 합니다.

데이터 공급자 단계

공동 작업자가 명령줄에서 데이터 세트를 쿼리할 수 있게 하려면 데이터 세트 설명에 :codenowrap:`allowed_analyses: template_and_freeform_sql`을 설정합니다. 공동 작업에 참여하는 사용자는 액세스할 수 있는 데이터 세트에 대해 자유 형식 SQL 쿼리를 실행할 수 있습니다.

다음 YAML은 자유 형식 쿼리를 허용하는 데이터 세트를 정의합니다.

api_version: 2.0.0
version: 1
name: my_favorite_dataset
datasets:
  - alias: test_freeform_restricted_agg
    data_object_fqn: samooha_provider_sample_database.audience_overlap.customers
    object_class: custom
    allowed_analyses: template_and_freeform_sql
...
Copy

분석 실행자 단계

  1. 자유 형식 쿼리를 지원하는 데이터 세트를 확인하려면 공동 작업에 참여한 후 분석 실행자가 ``COLLABORATION.VIEW_DATA_OFFERINGS``를 실행합니다. 결과의 FREEFORM_SQL_VIEW_NAME 열은 자유 형식 SQL을 사용하여 액세스할 수 있는 테이블과 SQL 쿼리에 사용할 테이블 이름을 보여줍니다.

    CALL SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.COLLABORATION.VIEW_DATA_OFFERINGS($collaboration_name);
    
    Copy
    +-------------------------------+------------------------+------------------------------+------------------------------+---------------------------------------+
    |   template_view_name          | template_join_columns  | analysis_allowed_columns     | activation_allowed_columns   |      freeform_sql_view_name           |
    +-------------------------------+------------------------+------------------------------+------------------------------+---------------------------------------+
    | useralias.data_offering_alias |     ip_address         | email, name, age             |             SSN              | alias_name.test_data_offering_v0.customers|
    +-------------------------------+------------------------+------------------------------+------------------------------+---------------------------------------+
    
  2. 공동 작업자는 자유 형식 SQL 쿼리를 사용하여 FREEFORM_SQL_VIEW_NAME 열에 나열된 테이블을 쿼리할 수 있습니다.

    SELECT * FROM alias_name.test_data_offering_v0.customers;
    
    Copy

테이블에 적용된 모든 정책이 적용됩니다.

Standard Edition을 사용하는 경우 자체 데이터로 분석 실행

Standard Edition을 사용하는 경우 표준 방식으로 분석을 실행할 수 있습니다. 그러나 공동 작업 설명에 데이터를 추가하고 다른 사용자와 공유할 수는 없습니다.

**Standard Edition 사용자로 공동 작업에서 자체 데이터를 사용:**하려면:

  1. 데이터 오퍼링을 등록하려면 ``REGISTRY.REGISTER_DATA_OFFERING``을 호출합니다. 열 이름을 지정해야 합니다.

  2. COLLABORATION.LINK_LOCAL_DATA_OFFERING 를 호출합니다.

    ``COLLABORATION.VIEW_DATA_OFFERINGS``를 호출할 때만 해당 오퍼링이 표시되며, 다른 공동 작업자에게는 나열된 데이터 소스가 표시되지 않습니다.

  3. COLLABORATION.RUN 호출 시 local_template_view_names 매개변수에 또는 local_view_mappings.my_tables 필드에(분석 YAML을 전달하는 경우) 데이터 제공 ID를 사용합니다. local_template_view_nameslocal_view_mappings.my_tables``는 템플릿의 ``my_table 매개 변수에 채워집니다.

다음 예제에서는 실행 프로시저의 YAML 형식 버전을 사용하여 템플릿을 실행하는 방법을 보여줍니다. 이 예제에는 LINK_LOCAL_DATA_OFFERING``을 호출하여 채워지는 ``my_tables 필드가 포함되어 있습니다.

-- See what data offerings are available. Your own local data will be listed here as well.
CALL SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.COLLABORATION.VIEW_DATA_OFFERINGS($collaboration_name);

-- Pass in the arguments in analysis YAML format.
CALL SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.COLLABORATION.RUN(
  $collaboration_name,
  $$
    api_version: 2.0.0
    spec_type: analysis
    name: my_analysis
    description: Cross-purchase results for Q4 2025
    template: mytemplate_v1

    template_configuration:
      view_mappings:
        source_tables:
          - ADVERTISER1.ADVERTISER_DATA_V1.CUSTOMERS
          - PUBLISHER.ADVERTISER_DATA_V1.CUSTOMERS
      local_view_mappings:
        my_tables:
          - PARTNER.MY_DATA_V1.MY_CUSTOMERS # Populate my_table array with my own table.
      arguments:  # Template arguments, as name: value pairs
         conv_purchase_id: PURCHASE_ID
         conv_purchase_amount: PURCHASE_AMOUNT
         publisher_impression_id: IMPRESSION_ID
         publisher_campaign_name: CAMPAIGN_NAME
         publisher_device_type: DEVICE_TYPE
  $$ );
Copy

쿼리 결과 활성화

참고

SAMOOHA_APP_ROLE 역할(즉, 액세스 관리 프로시저 <label-dcr_collaboration_access_management_api>`로 관리되는 역할)을 사용하지 않는 경우 분석 실행자 역할을 보유하고 공동 작업 사양에 ``activation_destinations` 필드가 포함된 공동 작업에 참여하려면 REGISTER DATA OFFERING 권한이 있어야 합니다.

**쿼리 결과를 활성화:**하려면:

  1. 모든 활성화 열의 적절한 사양에 다음 속성이 설정되어 있는지 확인합니다.

    활성화된 열이 포함된 테이블의 :ref:`데이터 오퍼링 사양 <label-dcr_collaboration_data_yaml>`에서는 해당 열에 대해 ``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
    
    Copy

    참고

    activation_policy 필터가 적용된 템플릿에 사용되는 모든 열은 데이터 오퍼링 사양에서 activation_allowed 값을 TRUE로 설정해야 합니다. 다음 예제에서는 분석 실행자가 제공하는 두 열에 활성화 정책이 적용된 템플릿을 보여줍니다.

    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;
    
    Copy
  2. 분석 실행자는 ``RUN``을 호출하여 분석을 실행합니다.

    • 직접 활성화하는 경우 테이블 :samp:`{consumers_database}.ACTIVATION_RESULTS.CONSUMER_DIRECT_ACTIVATION_SUMMARY`의 호출자 계정에 결과가 즉시 제공됩니다. 쿼리 결과를 확인하는 방법을 알아보려면 마지막 단계를 참조하세요.

    • 다른 공동 작업자에게 활성화하는 경우 다음을 수행합니다.

      1. 공동 작업자는 SHARED 상태가 반환될 때까지 ``VIEW_ACTIVATIONS``를 호출합니다. 데이터를 공동 작업자의 계정으로 전송하고 암호를 해독해야 하므로 결과 세트가 큰 경우 다른 계정으로 활성화하는 데 상당한 시간이 걸릴 수 있습니다.

      2. 활성화 상태가 SHARED인 경우 공동 작업자는 ``PROCESS_ACTIVATION``을 호출하여 결과를 자신의 계정으로 전송합니다. ``PROCESS_ACTIVATION``에 대한 응답에는 테이블 및 세그먼트 이름이 포함됩니다. 이를 통해 활성화 상태가 PROCESSED로 설정됩니다.

  3. 쿼리 결과를 검색하려면 결과 테이블 이름을 입력하여 다음 SQL 명령을 실행합니다. 선택적으로, 결과를 필터링할 세그먼트 이름을 입력할 수 있습니다.

    SELECT *
      FROM <results_table_name>
        [WHERE segment = <segment_name>];
    
    Copy

공동 작업 종료 또는 삭제

  • 소유자 이외의 공동 작업자는 ``COLLABORATION.LEAVE``를 호출하여 공동 작업을 종료합니다. 해당 공동 작업자가 제공한 모든 데이터 오퍼링은 공동 작업에서 제거됩니다. 공동 작업을 종료한 후에는 다시 참여할 수 없습니다.

  • 공동 작업 소유자는 공동 작업을 종료할 수 없고 소유권을 이전할 수 없습니다. 공동 작업 소유자는 ``COLLABORATION.TEARDOWN``을 호출하여 모든 공동 작업자의 공동 작업을 삭제할 수 있습니다.

두 프로세스 모두 비동기식입니다. 상태를 모니터링하려면 GET_STATUS``를 호출하고 ``GET_STATUS``에 상태가 LOCAL_DROP_PENDING으로 표시되면 ``LEAVE 또는 ``TEARDOWN``을 다시 호출해야 합니다.

클라우드 간 자동 복제 활성화

공동 작업 소유자와 동일한 클라우드 호스트 리전에 있지 않은 경우, 공동 작업에 참여하려면 해당 계정에 :doc:`클라우드 간 자동 복제 </collaboration/provider-listings-auto-fulfillment>`(LAF)가 활성화되어 있어야 합니다. 다른 클라우드 리전에서 공동 작업을 검토하려고 시도하는데 LAF가 해당 계정에 대해 활성화되어 있지 않거나 적절한 권한이 없는 경우 공동 작업에서 ``REVIEW``를 호출하면 오류가 발생합니다.

참고

클라우드 간 자동 복제가 공동 작업에서 사용되는 경우:

  • 데이터는 해당 데이터에 액세스할 수 있는 각 공동 작업자의 계정에 복제됩니다.

  • 데이터는 소유자가 데이터 오퍼링에 액세스할 수 있는지와 관계없이 소유자의 리전에도 복제됩니다. 그러나 데이터에 액세스하는 권한은 데이터 오퍼링의 공유 규칙에 따라 결정됩니다.

``SELECT CURRENT_REGION();``을 실행하여 자체 클라우드 호스트 리전을 확인할 수 있습니다.

**계정에서 클라우드 간 자동 복제를 활성화:**하려면:

  1. 조직 관리자는 SYSTEM$ENABLE_GLOBAL_DATA_SHARING_FOR_ACCOUNT 를 호출하여 계정에서 LAF를 활성화해야 합니다. 자세한 내용은 자동 복제를 위한 권한 관리하기 를 참조하십시오.

  2. LAF 공동 작업을 검토하거나 참여하기 위한 적합한 권한을 얻으려면 SAMOOHA_APP_ROLE을 사용하거나 :ref:`MANAGE LISTING AUTO FULFILLMENT 계정 수준 권한 <label-dcr_grant_privilege_on_account_to_role>`이 부여된 역할을 사용합니다.

다른 클라우드 호스트 리전에 있는 공동 작업자는 :ref:`복제 빈도<label-dcr_laf_refresh_rates>`로 인해 추가적인 데이터 지연을 경험하게 됩니다. 복제 빈도는 Collaboration Data Clean Room에서 아직 구성할 수 없습니다.

예: 양자 간 공동 작업

다음 예제에서는 양자 간 공동 작업을 보여줍니다. 여기서 “alice”는 공동 작업 생성자이자 자신과 bob의 데이터 공급자이며, 동시에 분석 실행자입니다. 상대방(“bob”)은 자신과 alice의 데이터 공급자이자 분석 실행자입니다.

이 예제에서는 다음 작업을 보여줍니다.

  • 공동 작업 생성.

  • 템플릿 및 데이터 오퍼링 등록.

  • 공동 작업 생성 시 템플릿 및 데이터 오퍼링 추가.

  • 공동 작업에 참여.

  • 기존 공동 작업에 템플릿 및 리소스 추가.

  • 분석 실행.

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

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

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