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;
기본 클린룸 공동 작업 워크플로¶
간단한 클린룸 공동 작업 시나리오는 다음과 같습니다.
공동 작업 :doc:`소유자 </user-guide/cleanrooms/v2/roles>`는 공동 작업의 초기 구성에 표시할 템플릿 또는 데이터 오퍼링을 선택적으로 등록합니다.
소유자는 선택적으로 공동 작업자에게 공동 작업의 초기 구성에 표시할 템플릿 또는 데이터 오퍼링을 등록하도록 요청합니다. 그런 다음 공동 작업자는 등록한 모든 항목의 리소스 IDs를 제공합니다.
그런 다음 소유자는 :ref:`공동 작업을 생성 <label-dcr_collaboration_create_collaboration>`합니다. 공동 작업은 공동 작업 YAML 사양에 의해 정의됩니다. 여기에는 공동 작업자, 공동 작업자의 역할, 그리고 초기 버전의 공동 작업에 포함되어야 하는 모든 리소스가 나열되어 있습니다.
공동 작업이 생성되면 공동 작업자 명단과 해당 역할은 고정됩니다. 즉, 공동 작업 정의에 역할이 지정된 공동 작업자만 참여하도록 초대받습니다. 마찬가지로, 분석 실행자 명단도 고정됩니다. 그러나 모든 공동 작업자는 새 데이터를 공동 작업에 연결하여 데이터 공급자가 될 수도 있습니다.
공동 작업에 다른 클라우드 호스팅 리전의 사용자가 포함된 경우 해당 사용자는 :ref:`계정에서 클라우드 간 자동 복제를 활성화 <label-dcr_collab_enabling_laf>`해야 공동 작업을 검토하고 참여할 수 있습니다.
소유자가 자신이 생성한 공동 작업에 참여하면 공동 작업이 활성화됩니다. 이제 사양에 명시된 모든 공동 작업자가 공동 작업을 확인하고 참여할 수 있습니다.
공동 작업자는 :ref:`공동 작업을 검토하고 참여 <label-dcr_collaboration_join_collaboration>`합니다.
공동 작업자는 선택적으로 :ref:`공동 작업에 리소스를 추가 <label-dcr_collaboration_add_resources>`하며(예: 템플릿), 데이터 공급자인 경우 데이터 오퍼링을 추가합니다.
분석 실행자는 공동 작업에서 사용 가능한 모든 데이터(및 선택적으로 공유되지 않은 로컬 데이터)를 사용하여 공동 작업에서 :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();
공동 작업에 리소스 추가¶
모든 공동 작업자는 공동 작업에 리소스를 추가하거나 공동 작업에 추가한 리소스를 제거할 수 있습니다. 공동 작업에 리소스를 추가하는 두 단계는 다음과 같습니다.
리소스 소유자는 리소스에 대해 :doc:`리소스 정의 사양 </user-guide/cleanrooms/v2/spec-reference>`을 생성하고 이를 사용하여 계정에 리소스를 등록합니다. 계정의 :doc:`기본 레지스트리 </user-guide/cleanrooms/v2/registries>`에 리소스를 등록하거나 사용자 지정 레지스트리를 사용합니다.
공동 작업자는 리소스를 공동 작업에 연결합니다. 리소스가 연결되면 지정된 공동 작업자가 사용할 수 있습니다. 템플릿과 같은 일부 리소스 유형은 모든 공동 작업자가 연결할 수 있습니다. 데이터 오퍼링과 같은 기타 리소스는 데이터 공급자 역할의 사용자만 연결할 수 있습니다. 리소스는 일반적으로 공동 작업 사양 및 리소스 공유자가 정의된 대로 특정 공동 작업자만 사용할 수 있습니다.
공동 작업이 생성되기 전이나 후에 공동 작업에 리소스를 추가할 수 있습니다.
리소스는 버전 관리를 지원합니다. 그러나 새 버전으로 새 리소스를 생성해도 공동 작업에서 이전 버전이 제거되지는 않습니다.
리소스는 사용자가 제공한 이름과 버전(데이터 오퍼링의 경우 별칭)을 결합하여 고유하게 명명됩니다.
공동 작업에 다음 리소스를 추가할 수 있습니다.
템플릿¶
템플릿은 지정된 공동 작업자가 실행할 수 있는 JinjaSQL 클린룸 템플릿입니다. 모든 공동 작업자는 다음 단계에 설명된 대로 영향을 받는 모든 공동 작업자가 요청을 승인하는 한 공동 작업에 템플릿을 등록하고 추가할 수 있습니다. 자신의 계정에 등록된 템플릿만 추가하거나 제거할 수 있습니다.
**공동 작업에 템플릿을 추가**하려면:
:ref:`공동 작업을 위한 템플릿을 디자인 <label-dcr_design_collaboration_template>`하고 :ref:`템플릿 사양 <label-dcr_collaboration_template_yaml>`에 포함합니다.
``REGISTRY.REGISTER_TEMPLATE``을 호출하여 템플릿을 등록합니다. 이는 템플릿 ID를 반환합니다.
템플릿을 연결합니다. 이 프로세스는 공동 작업이 이미 존재하는지에 따라 달라집니다.
**공동 작업이 생성되기 전에 템플릿을 추가**하려면 템플릿 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.
**기존 공동 작업에 템플릿을 추가**하려면 템플릿의 영향을 받는 모든 공동 작업자에게 권한을 요청해야 합니다. 기존 공동 작업에 템플릿을 추가하려면 다음 단계를 따릅니다.
``REGISTER_TEMPLATE``을 호출하여 계정에 템플릿을 등록하면 공동 작업에 추가할 수 있습니다.
템플릿 ID와 함께 ``ADD_TEMPLATE_REQUEST``를 호출하여 특정 사용자를 대상으로 특정 공동 작업에 템플릿을 추가하는 승인 흐름을 시작합니다.
리소스의 영향을 받는 모든 공동 작업자는 ``VIEW_UPDATE_REQUESTS``를 호출할 때 요청을 확인합니다.
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>`이 있어야 합니다.
다음 단계에 따라 데이터 오퍼링을 공동 작업에 추가합니다.
데이터에 대한 :ref:`데이터 오퍼링 사양 <label-dcr_collaboration_data_yaml>`을 생성합니다.
데이터 오퍼링 ID를 반환하는 ``REGISTRY.REGISTER_DATA_OFFERING``을 호출하여 데이터 오퍼링을 등록합니다.
이 단계를 수행하면 액세스할 수 있는 모든 공동 작업에 데이터 오퍼링을 연결할 수 있는 상태가 됩니다. 동일한 데이터 오퍼링 ID를 사용하여 여러 공동 작업과 데이터 오퍼링을 공유할 수 있습니다.
다음 단계는 공동 작업이 생성되었는지에 따라 달라집니다.
공동 작업이 아직 생성되지 않은 경우 데이터 공급자는 :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
그러면 분석 실행자가 이러한 테이블을 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 정책은 공동 작업의 데이터 오퍼링 뷰에도 적용됩니다.
소스 데이터에 Snowflake 정책을 적용하는 경우, 공동 작업자에게 이에 대해 알려야 합니다. 그래야 공동 작업자가 참여할 수 없는 열에 참여하거나 그룹화가 필요한 상황에서 그룹화하지 않는 쿼리를 자신도 모르게 실행하는 상황을 방지할 수 있습니다. 데이터 오퍼링의 description 필드에 Snowflake 정책을 언급할 수 있습니다.
데이터 오퍼링에 정책 적용(자유 형식 쿼리 사용만 해당)¶
Snowflake 정책을 소스 데이터에 적용하지 않고 공유 데이터의 :ref:`자유 형식 쿼리 <label-dcr_collab_enable_free_form_queries>`에 적용할 수 있습니다. 이러한 정책은 소스 테이블에 바로 적용되는 Snowflake 정책 외에도 자유 형식 쿼리를 사용하여 액세스할 때 데이터에 적용됩니다.
**데이터에 자유 형식 SQL 정책을 추가**하려면:
:ref:`Collaboration Data Clean Rooms에서 지원하는 정책 유형 <label-dcr_freeform_sql_policies_field>`을 생성합니다.
데이터 오퍼링 정의에 다음 정보를 추가합니다.
``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);
# Tell data clean rooms to set your aggregation policy on the hashed_email column of
# the data offering
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
allowed_analyses: template_and_freeform_sql
object_class: custom
freeform_sql_policies:
aggregation_policy:
name: my_db.public.my_agg_policy
entity_keys:
- hashed_email
...
소스 열 이름 바꾸기¶
템플릿 또는 자유 형식 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
그러면
column_type값이 쿼리 및 템플릿에서 사용됩니다.SELECT HASHED_EMAIL_SHA256 FROM source_table[0];
열 카테고리가 ``join_custom``인 경우:
... Snippet from data offering yaml ... schema_and_template_policies: user_email_address: category: join_custom column_type: hashed_email_sha256
그러면 원래 소스 열 이름이 쿼리 및 템플릿에 사용됩니다.
-- column_type is ignored for join_custom columns. SELECT user_email_address FROM source_table[0];
공동 작업에 참여¶
공동 작업에 기여한 모든 리소스를 공동 작업에서 사용하거나 공동 작업에서 분석을 실행하려면 공동 작업에 참여해야 합니다.
INITIALIZE를 호출하면 *생성자*가 자동으로 조인됩니다(``auto_join_warehouse``가 제공되지 않는 한). 자동 조인이 비활성화된 경우 생성자는 JOIN을 별도로 호출합니다.
*비생성자*는 REVIEW를 호출한 후 JOIN을 호출합니다.
중요
계정이 공동 작업 소유자의 리전과 다른 클라우드 호스팅 리전에 있는 경우:
계정에 클라우드 간 자동 복제가 활성화되지 않은 경우
REVIEW요청이 실패합니다.``REVIEW``는 추가적인 비동기 설정 단계를 트리거합니다. 설정이 완료되었음을 나타내는 성공적인 응답을 반환할 때까지 ``REVIEW``를 반복해서 호출합니다.
참여는 비동기 프로세스입니다. 상태가 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
$$ );
데이터에 대해 자유 형식 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
...
분석 실행자 단계¶
자유 형식 쿼리를 지원하는 데이터 세트를 확인하려면 공동 작업에 참여한 후 분석 실행자가 ``COLLABORATION.VIEW_DATA_OFFERINGS``를 실행합니다. 결과의 FREEFORM_SQL_VIEW_NAME 열은 자유 형식 SQL을 사용하여 액세스할 수 있는 테이블과 SQL 쿼리에 사용할 테이블 이름을 보여줍니다.
CALL SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.COLLABORATION.VIEW_DATA_OFFERINGS($collaboration_name);
+-------------------------------+------------------------+------------------------------+------------------------------+---------------------------------------+ | 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| +-------------------------------+------------------------+------------------------------+------------------------------+---------------------------------------+
공동 작업자는 자유 형식 SQL 쿼리를 사용하여 FREEFORM_SQL_VIEW_NAME 열에 나열된 테이블을 쿼리할 수 있습니다.
SELECT * FROM alias_name.test_data_offering_v0.customers;
테이블에 적용된 모든 정책이 적용됩니다.
Standard Edition을 사용하는 경우 자체 데이터로 분석 실행¶
Standard Edition을 사용하는 경우 표준 방식으로 분석을 실행할 수 있습니다. 그러나 공동 작업 설명에 데이터를 추가하고 다른 사용자와 공유할 수는 없습니다.
**Standard Edition 사용자로 공동 작업에서 자체 데이터를 사용:**하려면:
데이터 오퍼링을 등록하려면 ``REGISTRY.REGISTER_DATA_OFFERING``을 호출합니다. 열 이름을 지정해야 합니다.
COLLABORATION.LINK_LOCAL_DATA_OFFERING를 호출합니다.``COLLABORATION.VIEW_DATA_OFFERINGS``를 호출할 때만 해당 오퍼링이 표시되며, 다른 공동 작업자에게는 나열된 데이터 소스가 표시되지 않습니다.
COLLABORATION.RUN호출 시local_template_view_names매개변수에 또는local_view_mappings.my_tables필드에(분석 YAML을 전달하는 경우) 데이터 제공 ID를 사용합니다.local_template_view_names및local_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
$$ );
쿼리 결과 활성화¶
참고
SAMOOHA_APP_ROLE 역할(즉, 액세스 관리 프로시저 <label-dcr_collaboration_access_management_api>`로 관리되는 역할)을 사용하지 않는 경우 분석 실행자 역할을 보유하고 공동 작업 사양에 ``activation_destinations` 필드가 포함된 공동 작업에 참여하려면 REGISTER DATA OFFERING 권한이 있어야 합니다.
모든 활성화 열의 적절한 사양에 다음 속성이 설정되어 있는지 확인합니다.
활성화된 열이 포함된 테이블의 :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
공동 작업 사양 <label-dcr_collaboration_invitation_yaml>`에는 분석 실행자에 대한 ``activation_destinations` 값을 명시해야 합니다. 데이터 오퍼링 사양은 활성화 권한을 지정된 분석 실행자 및 템플릿으로 제한합니다.
api_version: 2.0.0 spec_type: collaboration name: simple_activation_collaboration description: Demonstrates a basic activation collaborator_identifier_aliases: advertiser_1: some_complex_identifier publisher_1: another_complex_identifier owner: publisher_1 analysis_runners: advertiser_1: data_providers: advertiser_1: data_offerings: - id: customer_list publisher_1: data_offerings: - id: user1.2025_orders.sales templates: - id: activation_template_v0 activation_destinations: snowflake_collaborators: - publisher_1 ....
분석 사양 <label-dcr_collaboration_analysis_yaml>`은 ``snowflake_collaborator` 및
segment_name값이 있는activation섹션을 포함해야 하며, :ref:`사용자 지정 템플릿에 대한 공동 작업 지침 <label-dcr_design_collaboration_template>`을 따르는 :ref:`활성화 템플릿 <label-dcr_custom_templates_activation>`을 호출해야 합니다 표준 분석 템플릿을 실행하여 결과를 활성화할 수 없습니다.api_version: 2.0.0 spec_type: analysis name: my_analysis description: Description of the analysis template: my_activation_template template_configuration: view_mappings: source_tables: - alias1.schema1.table1 - alias2.schema2.table2 arguments: join_column: ip_address advertiser_activation_column: purchase_amount publisher_activation_column: device_type activation: snowflake_collaborator: publisher_1 segment_name: q1_2025
참고
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;
분석 실행자는 ``RUN``을 호출하여 분석을 실행합니다.
직접 활성화하는 경우 테이블 :samp:`{consumers_database}.ACTIVATION_RESULTS.CONSUMER_DIRECT_ACTIVATION_SUMMARY`의 호출자 계정에 결과가 즉시 제공됩니다. 쿼리 결과를 확인하는 방법을 알아보려면 마지막 단계를 참조하세요.
다른 공동 작업자에게 활성화하는 경우 다음을 수행합니다.
공동 작업자는 SHARED 상태가 반환될 때까지 ``VIEW_ACTIVATIONS``를 호출합니다. 데이터를 공동 작업자의 계정으로 전송하고 암호를 해독해야 하므로 결과 세트가 큰 경우 다른 계정으로 활성화하는 데 상당한 시간이 걸릴 수 있습니다.
활성화 상태가 SHARED인 경우 공동 작업자는 ``PROCESS_ACTIVATION``을 호출하여 결과를 자신의 계정으로 전송합니다. ``PROCESS_ACTIVATION``에 대한 응답에는 테이블 및 세그먼트 이름이 포함됩니다. 이를 통해 활성화 상태가 PROCESSED로 설정됩니다.
쿼리 결과를 검색하려면 결과 테이블 이름을 입력하여 다음 SQL 명령을 실행합니다. 선택적으로, 결과를 필터링할 세그먼트 이름을 입력할 수 있습니다.
SELECT * FROM <results_table_name> [WHERE segment = <segment_name>];
공동 작업 종료 또는 삭제¶
소유자 이외의 공동 작업자는 ``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();``을 실행하여 자체 클라우드 호스트 리전을 확인할 수 있습니다.
**계정에서 클라우드 간 자동 복제를 활성화:**하려면:
조직 관리자는 SYSTEM$ENABLE_GLOBAL_DATA_SHARING_FOR_ACCOUNT 를 호출하여 계정에서 LAF를 활성화해야 합니다. 자세한 내용은 자동 복제를 위한 권한 관리하기 를 참조하십시오.
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 가 설치된 별도의 두 계정에 업로드합니다.
-- Basic Snowflake Collaboration Data Clean Rooms example.
-- This file represents user "alice" in a two-collaborator clean room example.
-- Run this worksheet in a Snowflake account with access to the latest version of
-- Snowflake Data Clean Rooms.
-- This file demonstrates the following actions:
-- * How to register a template and a dataset
-- * How to create a collaboration with pre-registered resources.
-- * How to add a template to a collaboration that has already been created, and the
-- template approval flow.
-- * How to run an analysis.
-- This scenario involves two collaborators: bob and alice
-- bob and alice each submits one data source
-- bob and alice are data providers for themselves and each other
-- bob submits one template that only alice can use
-- alice submits one template that they can both use, and one template that only alice can use
-- For more information, read docs.snowflake.com/user-guide/cleanrooms/v2/using
USE WAREHOUSE APP_WH;
USE ROLE SAMOOHA_APP_ROLE;
-- Secondary roles must be disabled to call link_data_offerings.
USE SECONDARY ROLES NONE;
CREATE DATABASE IF NOT EXISTS ALICE_DB;
CREATE SCHEMA IF NOT EXISTS ALICE_DB.ALICE_SCH;
CREATE OR REPLACE TABLE ALICE_DB.ALICE_SCH.ALICE_DATA AS SELECT * FROM samooha_sample_database.demo.customers LIMIT 100;
-- Register a data offering to use in the initial collaboration definition.
CALL samooha_by_snowflake_local_db.registry.register_data_offering(
$$
api_version: 2.0.0
spec_type: data_offering
version: v1
name: <alice data offering name>
datasets:
- alias: customer_list
data_object_fqn: ALICE_DB.ALICE_SCH.ALICE_DATA
object_class: custom
allowed_analyses: template_only
schema_and_template_policies:
hashed_email:
category: join_standard
column_type: hashed_email_b64_encoded
status:
category: passthrough
$$
);
-- Save the ID of the registered data offering.
SET alice_data_offering_id = '<data_offering_id>';
CALL samooha_by_snowflake_local_db.registry.view_registered_data_offerings();
-- Register a template to use in the initial collaboration definition.
CALL samooha_by_snowflake_local_db.registry.register_template(
$$
api_version: 2.0.0
spec_type: template
name: alice_only_template
version: <version_number>
type: sql_analysis
description: A test template
template:
SELECT t1.status, COUNT(*)
FROM IDENTIFIER( {{ source_table[0] }} ) AS t1
JOIN IDENTIFIER( {{ source_table[1] }} ) AS t2
ON t1.hashed_email_b64_encoded = t2.hashed_email_b64_encoded
GROUP BY t1.status;
$$);
-- Save the ID of the registered template.
SET my_template_id = '<alice_only_template_id>';
CALL samooha_by_snowflake_local_db.registry.view_registered_templates();
-- Create a collaboration with the previously registered template and data offering.
-- The collaboration supports two collaborators, with aliases alice (this account) and bob.
-- Owner: alice
-- Analysis runners:
-- * alice, using her own data, and the template you created and registered earlier.
-- * bob, with no listed templates or data.
-- Data providers:
-- * alice and bob, for alice
-- * alice and bob, for bob
-- Resources added: The template and data offering alice registered earlier.
-- You will add more templates and data offerings to these users later. Only these
-- users are invited to the collaboration, and no additional users can be added later.
-- Replace the <...> placeholders with the appropriate values.
-- Account data sharing IDs are -- SELECT CURRENT_ORGANIZATION_NAME() || '.' || CURRENT_ACCOUNT_NAME();
CALL samooha_by_snowflake_local_db.collaboration.initialize(
$$
api_version: 2.0.0
spec_type: collaboration
name: my_first_collaboration_1_0
owner: alice
collaborator_identifier_aliases:
alice: <my account data sharing ID>
bob: <bob account data sharing ID>
analysis_runners:
bob:
data_providers:
alice:
data_offerings:
- id: <alice data offering ID>
bob:
data_offerings: []
alice:
data_providers:
alice:
data_offerings:
- id: <alice data offering ID>
bob:
data_offerings: []
templates:
- id: <alice only template ID>
$$,
'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 the owner has joined.
CALL samooha_by_snowflake_local_db.collaboration.view_collaborations();
-- Auto-approve any template requests from other collaborators that affect you.
CALL samooha_by_snowflake_local_db.collaboration.enable_template_auto_approval(
$collaboration_name
);
-- SWITCH TO collaborator to join the collaboration and add a template
-- The template will be auto-approved.
-- Create a new template.
CALL samooha_by_snowflake_local_db.registry.register_template(
$$
api_version: 2.0.0
spec_type: template
name: both_use_template
version: 2026_01_12_V1
type: sql_analysis
description: test_description
template:
select * from identifier({{ source_table[0] }}) limit 5;
$$
);
SET both_use_template = '<template ID>';
-- Ask to add the template to the collaboration. You must ask bob, because you're
-- including bob in the sharing list. When you share a template with yourself,
-- you auto-approve it.
CALL samooha_by_snowflake_local_db.collaboration.add_template_request(
$collaboration_name,
$both_use_template,
['alice', 'bob'] -- List of collaborators who can use this template.
);
-- SWITCH TO bob to approve the request. Request wasn't approved automatically
-- because bob didn't enable auto-approve.
-- See if bob approved the request.
CALL samooha_by_snowflake_local_db.collaboration.view_update_requests($collaboration_name);
-- See what the collaboration spec looks like now, after all the resource updates.
-- Collaboration updates are asynchronous, so if all changes that you made aren't present,
-- wait a minute or two, and then try again.
CALL samooha_by_snowflake_local_db.collaboration.view_collaborations() ->>
SELECT "COLLABORATION_SPEC" FROM $1 WHERE "SOURCE_NAME" = $collaboration_name;
-- SWITCH TO bob to add a data offering.
-- Run an analysis.
-- Tables are scoped as <data_offering_id>.<alias>.
CALL samooha_by_snowflake_local_db.collaboration.view_data_offerings(
$collaboration_name
);
SET $bob_data_offering = '<bob data offering ID>';
CALL samooha_by_snowflake_local_db.collaboration.view_templates(
$collaboration_name
);
-- Run bob's template.
-- Replace the placeholders with your variables.
CALL samooha_by_snowflake_local_db.collaboration.run(
$collaboration_name,
$$
api_version: 2.0.0
spec_type: analysis
description: <optional description of the analysis>
template: '<alice_only_template>'
template_configuration:
view_mappings:
source_tables:
- '<alice_data_offering_view_name>'
- '<bob_data_offering_view_name>'
$$
);
-- Multi-step cleanup process to delete the collaborations.
-- Doesn't delete registered resources.
CALL samooha_by_snowflake_local_db.collaboration.teardown($collaboration_name);
CALL samooha_by_snowflake_local_db.collaboration.get_status($collaboration_name);
-- When get_status reports LOCAL_DROP_PENDING, call teardown again.
CALL samooha_by_snowflake_local_db.collaboration.teardown($collaboration_name);
DROP DATABASE ALICE_DB;
-- Basic Snowflake Collaboration Data Clean Rooms example.
-- This file represents user "bob" in a two-collaborator clean room example.
-- Run this worksheet in a Snowflake account with access to the latest version of
-- Snowflake Data Clean Rooms.
-- This file demonstrates the following actions:
-- * Joining a collaboration
-- * Registering and adding a template and a data offering to an existing collaboration.
-- * Running an analysis.
-- For more information, read docs.snowflake.com/user-guide/cleanrooms/v2/using
USE WAREHOUSE APP_WH;
USE ROLE SAMOOHA_APP_ROLE;
-- Secondary roles can't be active when calling join or link_data_offering.
USE SECONDARY ROLES NONE;
-- Create sample data.
CREATE DATABASE IF NOT EXISTS BOB_DB;
CREATE SCHEMA IF NOT EXISTS BOB_DB.BOB_SCH;
CREATE OR REPLACE TABLE BOB_DB.BOB_SCH.BOB_DATA AS SELECT * FROM samooha_sample_database.demo.customers_2 LIMIT 100;
-- See which collaborations you are invited to, or have joined.
CALL samooha_by_snowflake_local_db.collaboration.view_collaborations();
-- Use SOURCE_NAME column value from the response to view_collaborations().
SET collaboration_name = '<collaboration name>';
-- Use OWNER_ACCOUNT column value from the response to view_collaborations().
SET collaborator_data_sharing_id = '<collaborator_id>';
-- Review and join the collaboration.
-- Joining is asynchronous, so you must call get_status until the status is JOINED before
-- you can perform actions on the collaboration.
CALL samooha_by_snowflake_local_db.collaboration.review($collaboration_name, $collaborator_data_sharing_id);
CALL samooha_by_snowflake_local_db.collaboration.join($collaboration_name);
CALL samooha_by_snowflake_local_db.collaboration.get_status($collaboration_name);
-- Demonstrate the auto-approve flow.
-- Alice enabled auto-approve on her account, so this request will
-- be auto-approved, and the template will be added immediately.
-- Create a template.
CALL samooha_by_snowflake_local_db.registry.register_template(
$$
api_version: 2.0.0
spec_type: template
name: auto_approve_template
version: V1
type: sql_analysis
description: test_description
template:
SELECT * FROM IDENTIFIER({{ SOURCE_TABLE[0] }}) LIMIT 10;
$$
);
SET auto_approve_template = '<template_id>';
CALL samooha_by_snowflake_local_db.collaboration.add_template_request($collaboration_name, $auto_approve_template, ['alice', 'bob']);
CALL samooha_by_snowflake_local_db.collaboration.view_update_requests($collaboration_name);
-- SWITCH TO other account and request adding a template, and then come back to approve the request.
-- You haven't enabled template auto-approve, so you must approve the request before the template is added.
CALL samooha_by_snowflake_local_db.collaboration.view_update_requests($collaboration_name);
CALL samooha_by_snowflake_local_db.collaboration.approve_update_request(
$collaboration_name,
'<request_ID>'
);
-- SWITCH TO bob to see the request status.
-- Register your own data offering.
CALL samooha_by_snowflake_local_db.registry.register_data_offering(
$$
api_version: 2.0.0
spec_type: data_offering
version: v3
name: bob_data
datasets:
- alias: my_customer_list
data_object_fqn: BOB_DB.BOB_SCH.BOB_DATA
object_class: custom
allowed_analyses: template_only
schema_and_template_policies:
hashed_email:
category: join_standard
column_type: hashed_email_b64_encoded
status:
category: passthrough
$$
);
SET my_data_id = '<data offering id>';
-- Share the data offering with yourself and alice.
CALL samooha_by_snowflake_local_db.collaboration.link_data_offering(
$collaboration_name,
$my_data_id,
['alice', 'bob']
);
CALL samooha_by_snowflake_local_db.collaboration.view_data_offerings(
$collaboration_name
);
-- View templates that you can use in this collaboration. You can run only templates that list you in the
-- SHARED_WITH column.
CALL samooha_by_snowflake_local_db.collaboration.view_templates($collaboration_name);
-- Run an analysis with your template.
CALL samooha_by_snowflake_local_db.collaboration.run(
$collaboration_name,
$$
api_version: 2.0.0
spec_type: analysis
description: <optional description of the analysis>
template: '<both_use_template>'
template_configuration:
view_mappings:
source_tables:
- '<my_data_offering_view_name>'
- '<bob_data_offering_view_name>'
$$
);
-- SWITCH TO other account to run an analysis.
-- Try running an analysis using alice-only template.
-- This will fail, because you aren't listed as an analysis
-- runner for this template.
CALL samooha_by_snowflake_local_db.collaboration.run(
$collaboration_name,
$$
api_version: 2.0.0
spec_type: analysis
description: <optional description of the analysis>
template: '<alice_only_template>'
template_configuration:
view_mappings:
source_tables:
- '<my_data_offering_view_name>'
- '<bob_data_offering_view_name>'
$$
);
-- Clean up resources.
DROP DATABASE BOB_DB;