튜토리얼: 코드로 Snowflake Data Clean Rooms 시작하기

튜토리얼: 코드로 Snowflake Data Clean Rooms 시작하기

수명 종료 안내

레거시 Provider 및 Consumer Data Clean Rooms가 중단될 예정이에요. 날짜와 마이그레이션 지침은 수명 종료 타임라인을 참고하세요.

출처: Tutorial: Get started with Snowflake Data Clean Rooms in code

본문

소개

이 튜토리얼은 코드로 Snowflake Data Clean Rooms를 만들거나 사용할 개발자를 대상으로 해요. 이 튜토리얼은 SQL 코드를 사용하지만, 여기에 표시된 정보를 Snowflake가 지원하는 어떤 코딩 언어로든 적응시켜 클린룸을 만들고 사용할 수 있어요.

배울 내용

이 튜토리얼은 Snowflake Data Clean Rooms API를 사용해 클린룸에서 기본 템플릿을 만들고 공유하는 방법을 보여 줘요. 또한 사용자와 공유된 클린룸에서 API를 사용해 분석을 실행하는 방법도 보여 줘요. 이 튜토리얼은 프로바이더가 제공하는 테이블 하나, 소비자가 제공하는 테이블 하나, 그리고 두 테이블에 대한 아주 간단한 JOIN 쿼리를 정의하는 프로바이더가 정의한 템플릿 하나로 클린룸을 만들어요.

요구 사항

Snowflake에 대한 기본적인 이해가 있어야 하며, 이 튜토리얼을 시작하기 전에 Snowflake Data Clean Rooms 정보도 읽어야 해요. Snowflake Data Clean Rooms 네이티브 앱과 API가 설치된 Enterprise Edition 이상의 Snowflake 계정에 접근할 수 있어야 해요. 클린룸 앱이 설치되어 있지 않다면 직접 설치하거나 Snowflake 관리자에게 설치를 요청하세요. 클린룸 API를 사용하려면 SAMOOHA_APP_ROLE이 부여되어야 해요.

이 튜토리얼은 클린룸 환경과 함께 설치되는 CUSTOMERS_2라는 샘플 테이블을 사용해요. 다음 명령으로 SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS_2 테이블을 계정에서 검색하세요.

SHOW TABLES LIKE 'CUSTOMERS_2' IN SCHEMA SAMOOHA_SAMPLE_DATABASE.DEMO;

응답에 행이 없으면 사용자 또는 ACCOUNTADMIN 역할을 가진 사람이 다음 명령을 실행해 샘플 테이블을 설치해야 해요.

USE ROLE ACCOUNTADMIN;
EXECUTE IMMEDIATE FROM @SAMOOHA_BY_SNOWFLAKE.APP_SCHEMA.MOUNT_CODE_STAGE/dcr_loader.sql;

이 튜토리얼은 클린룸에서 프로바이더와 소비자 역할을 모두 수행하기 위해 같은 계정을 사용해요. 이 시나리오는 테스트 목적으로만 지원되며, 별도의 계정을 사용하는 것에 비해 지원되는 기능에 제한이 있어요. 실제 환경에서는 프로바이더와 소비자가 다른 계정을 사용하며, 더 고급 테스트를 위해서는 별도의 계정을 사용해야 할 수도 있어요. 이 튜토리얼을 워크시트 파일로 다운로드해 Snowflake 계정에서 실행할 수 있어요.

프로바이더: 개요

프로바이더로서 클린룸을 만들기 위해 수행할 단계는 다음과 같아요.

  1. 클린룸에서 공유할 테스트 데이터를 만들어요.
  2. 클린룸을 만들어요.
  3. 데이터에 조인 권한을 설정해 소비자 쿼리에서 조인할 수 있는 컬럼을 지정해요.
  4. 클린룸용 템플릿을 만들어요. 클린룸 템플릿은 JinjaSQL로 작성되며 런타임에 SQL 쿼리로 평가돼요. 대부분의 템플릿은 협업자가 런타임에 테이블 및 컬럼 이름, WHERE 절 조건 등을 지정할 수 있는 변수를 포함해요. 클린룸 협업자는 클린룸에서 템플릿을 선택하고 실행해요.
  5. 클린룸의 기본 버전을 지정해요.
  6. 클린룸에 접근할 수 있는 소비자를 추가해요. 이 튜토리얼에서 소비자는 클린룸 관리자가 승인한 계정을 가진 Snowflake 사용자여야 해요.
  7. 클린룸을 게시해 초대한 소비자가 사용할 수 있게 해요.

참고

위에서 협업자라는 용어는 템플릿에 대해 사용했는데, 클린룸 구성 방식에 따라 프로바이더와 소비자 모두 템플릿을 만들거나 실행할 수 있기 때문이에요. 이 튜토리얼은 소비자 실행 템플릿을 활성화하는 방법만 보여 줘요.

프로바이더: 클린룸 만들기

  1. SAMOOHA_APP_ROLE 역할이 부여된 사용자로 Snowsight에 로그인하세요. 역할이 없다면 계정 관리자에게 부여를 요청하세요.
  2. Snowsight에서 클린룸 코드를 담을 새 SQL 워크시트를 만들어 워크시트 이름을 "API tutorial - Provider"로 지정하세요.

다음 스니펫은 조직 내에서만 접근할 수 있는(즉 INTERNAL로 표시된) 클린룸을 만들어요. 조직 외부로 클린룸을 공유하려면 이 튜토리얼에서 다루지 않는 추가 단계가 필요해요. 자신과 클린룸을 공유할 때는 당연히 INTERNAL이어야 해요. 대부분의 클린룸 절차에는 SAMOOHA_APP_ROLE을 사용해야 해요.

USE ROLE SAMOOHA_APP_ROLE;
SET cleanroom_name = 'Developer Tutorial';
CALL samooha_by_snowflake_local_db.provider.cleanroom_init($cleanroom_name, 'INTERNAL');

프로바이더: 데이터를 클린룸으로 가져오기

다음으로 테스트 데이터를 클린룸으로 가져와요. 데이터를 클린룸으로 가져오려면 두 단계가 있어요.

  1. 데이터를 *등록(register)*한다.
  2. 데이터를 클린룸에 *연결(link)*한다(가져오기).

데이터 등록

데이터를 가져오는 첫 단계는 클린룸 계정에서 데이터베이스, 스키마 또는 객체를 등록하는 거예요. 등록은 클린룸에 원본 데이터를 읽고 사용할 권리를 부여하는 것이에요. 전체 데이터베이스, 스키마, 테이블 또는 뷰를 등록할 수 있어요. 이 튜토리얼에서는 클린룸과 함께 설치된 샘플 데이터를 사용하며 이는 이미 등록되어 있으므로, 튜토리얼에서 샘플 데이터를 등록할 필요는 없어요.

데이터를 클린룸에 연결하기

데이터를 클린룸으로 가져오는 것을 *연결(linking)*이라고 해요. 프로바이더와 소비자 모두 자신의 데이터를 클린룸에 연결할 수 있어요. 클린룸에 연결된 뷰 또는 테이블을 가리키는 일반적인 용어는 *데이터셋(dataset)*이에요. 데이터를 연결하면 클린룸이 원본 데이터에 연결된 읽기 전용 뷰를 만들어요. 이 클린룸 뷰는 클린룸 내부의 안전하고 암호화된 뷰로, 클린룸 내의 템플릿만 접근할 수 있어요. 템플릿은 원본 데이터가 아니라 이 보안 뷰에 접근하며, 데이터를 참조해야 할 때마다 원본 소스 이름이 사용돼요.

등록과 달리 연결은 개별 테이블 또는 뷰 수준에서 이루어져요. 한 번의 호출로 여러 항목을 연결할 수 있어요.

클린룸 샘플 데이터를 클린룸에 연결하세요.

CALL samooha_by_snowflake_local_db.provider.link_datasets($cleanroom_name, ['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS']);
CALL samooha_by_snowflake_local_db.provider.view_provider_datasets($cleanroom_name);

참고

클린룸에 연결된 테이블이 삭제되거나, 이름이 바뀌거나, 이동되거나, 제한적인 권한이 추가되면, 이전 테이블을 같은 위치, 이름, 권한으로 복원하지 않는 한 해당 테이블을 클린룸에서 사용할 수 없어요.

프로바이더: 데이터에 조인 정책 설정

프로바이더와 소비자 모두 자신의 데이터에 *조인 정책(join policies)*을 지정할 수 있어요. 클린룸 조인 정책은 협업자의 쿼리가 해당 클린룸에서 테이블의 어떤 컬럼에 조인할 수 있는지 지정해요. 이는 클린룸에서 다른 사람이 데이터를 어떻게 사용할 수 있는지에 대한 추가적인 제어 수준을 제공해요. 자신의 정책은 자신의 쿼리에는 시행되지 않아요. 즉 자신의 데이터에 대한 조인 정책은 자신이 쿼리를 실행할 때 무시되며, 정책은 다른 사용자가 실행하는 쿼리에만 시행돼요.

클린룸 조인 정책은 테이블에 설정되며, 테이블이 사용되는 모든 클린룸에 적용돼요. 템플릿이 조인 정책을 명시적으로 확인하면, 여기에 나열되지 않은 컬럼은 클린룸에서 INNER JOIN 또는 OUTER JOIN 조건으로 조인할 수 없어요.

클린룸 조인 정책은 Snowflake 조인 정책과 다르다는 점을 유의하세요. 클린룸 정책은 조인할 수 있는 컬럼을 지정하고, Snowflake 조인 정책은 조인할 수 없는 컬럼을 지정해요.

팁

원본 테이블에 설정된 Snowflake 정책은 연결된 클린룸 테이블에 유지되지만 협업자에게 보고되지는 않아요. 즉 Snowflake 조인 정책은 시행되지만, 프로바이더의 클린룸 조인 정책만 보고하는 consumer.view_provider_join_policy로는 보고되지 않아요. 따라서 데이터에 설정한 Snowflake 정책에 대해 협업자에게 알려 주어야 해요.

각 컬럼에 대해 *database_name*.*schema_name*.*table_or_view_name*:*column_name* 형식을 사용해 테이블의 조인 가능한 컬럼을 지정하세요. 다음 예시는 프로바이더 데이터의 세 컬럼이 조인 가능하도록 허용해요.

-- Limit joinable columns in this table to age_band, region_code, and device_type
CALL samooha_by_snowflake_local_db.provider.set_join_policy($cleanroom_name, ['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:AGE_BAND', 'SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:REGION_CODE', 'SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:DEVICE_TYPE']);
CALL samooha_by_snowflake_local_db.provider.view_join_policy($cleanroom_name);

프로바이더: 템플릿 추가

클린룸 템플릿은 SELECT 쿼리로 평가되는 JinjaSQL 템플릿이에요. 이 쿼리는 조인 및 컬럼 정책을 조건으로 클린룸에 연결된 모든 데이터셋에 접근할 수 있어요. 이 튜토리얼에서는 JinjaSQL 템플릿 설계의 세부 사항을 다루지 않지만, 구현하려는 SQL 쿼리는 다음과 같아요.

SELECT COUNT(*), group_by_col
FROM Consumer_Table AS C
INNER JOIN Provider_Table AS P ON c.join_col = p.join_col
GROUP BY group_col;

이 쿼리는 프로바이더 테이블 하나와 소비자 테이블 하나를 지정된 조인 컬럼에서 조인하고, 지정된 그룹핑 컬럼으로 그룹화하며, 그룹 값과 각 그룹의 개수를 프로젝션해요. 이 쿼리는 사용자가 템플릿을 실행할 때 클린룸에서 실행될 쿼리예요.

소비자가 테이블이나 컬럼을 지정할 수 있는 위치에 변수를 추가한 같은 쿼리의 JinjaSQL 템플릿은 다음과 같아요. 소비자가 변수를 지정하면, 위와 비슷하지만 소비자가 제공한 테이블 및 컬럼 이름을 가진 SQL 쿼리로 평가될 거예요.

SELECT COUNT(*), IDENTIFIER({{group_by_col | column_policy}})
FROM IDENTIFIER({{my_table[0]}}) AS C
INNER JOIN IDENTIFIER({{source_table[0]}}) AS P
ON IDENTIFIER({{consumer_join_col | join_policy}}) = IDENTIFIER({{provider_join_col | join_policy}})
GROUP BY IDENTIFIER({{group_by_col | column_policy}});

템플릿에 대한 몇 가지 참고 사항:

  • {{중괄호}}로 둘러싸인 내용은 소비자가 템플릿을 실행할 때 전달하는 명명된 변수예요. 소비자가 전달하는 변수는 group_by_col, consumer_join_col, provider_join_col이에요.
  • my_table과 source_table 배열은 시스템이 만든 전역 변수로, 호출자가 전달한 소비자 및 프로바이더 테이블 이름으로 채워져요. 이 테이블들은 소비자와 프로바이더가 클린룸에 연결해야 해요.
  • 모든 프로바이더 테이블은 쿼리에서 p로 별칭을 지정해야 해요. 모든 소비자 테이블은 c로 별칭을 지정해야 해요. 여러 테이블을 사용한다면 1 기반 접미사로 별칭을 지정하세요. 즉 프로바이더 테이블에는 p, p1, p2, p3 등을, 소비자 테이블 별칭에는 c, c1, c2, c3 등을 사용해요(p와 p0은 동일해요).
  • Snowflake Data Clean Rooms는 변수에 작용하는 일부 사용자 지정 JinjaSQL 필터를 지원해요. column_policy와 row_policy 필터는 적용된 컬럼이 해당 클린룸의 컬럼 및 행 정책을 준수하는지 확인하고, 그렇지 않으면 템플릿을 실행하려는 요청이 실패해요. 따라서 {{ consumer_join_col | join_policy }}는 consumer_join_col에 전달된 값이 이 클린룸에서 프로바이더와 소비자가 설정한 조인 정책을 준수하는지 확인해요.
  • 식별자로 사용되는 변수는 SQL에서 사용하기 전에 IDENTIFIER 함수로 처리되어야 해요.

템플릿을 클린룸에 추가하세요.

-- Add the template
SET template_name = 'overlap_template';
CALL samooha_by_snowflake_local_db.provider.add_custom_sql_template(
  $cleanroom_name,
  $template_name,
  $$
  SELECT COUNT(*), IDENTIFIER({{group_by_col | column_policy}})
  FROM IDENTIFIER({{my_table[0]}}) AS C
  INNER JOIN IDENTIFIER({{source_table[0]}}) AS P
  ON IDENTIFIER({{consumer_join_col | join_policy}}) = IDENTIFIER({{provider_join_col | join_policy}})
  GROUP BY IDENTIFIER({{group_by_col | column_policy}});
  $$
);
CALL samooha_by_snowflake_local_db.provider.view_added_templates($cleanroom_name);

프로바이더: 컬럼 정책 설정

클린룸의 각 당사자는 column_policy를 설정해 상대방이 프로젝션할 수 있는 컬럼을 제한할 수 있어요. 클린룸의 컬럼 정책은 프로젝션할 수 있는 데이터의 모든 컬럼을 나열하며, 다른 컬럼은 프로젝션할 수 없어요. 데이터에 대한 컬럼 정책을 지정하지 않으면 모든 데이터를 프로젝션할 수 있어요.

컬럼 정책은 클린룸의 특정 테이블과 템플릿에 연결돼요. 서로 다른 템플릿에서 서로 다른 컬럼이 프로젝션되도록 허용할 수 있어요. 같은 컬럼은 조인 정책과 컬럼 정책에 동시에 포함될 수 없어요. 컬럼 및 조인 정책은 템플릿이 템플릿에서 column_policy 및 row_policy 필터를 사용할 때만 시행된다는 점을 유의하세요.

방금 만든 템플릿에서 데이터의 세 컬럼을 프로젝션할 수 있도록 허용하는 방법은 다음과 같아요. 컬럼 구문은 *template_name*:*table_name*:*column_name*이에요.

-- Set column policies. Column policies are tied to a specific template and table, so we
-- needed to add the template first.
CALL samooha_by_snowflake_local_db.provider.set_column_policy($cleanroom_name, [$template_name || ':SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:STATUS', $template_name || ':SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:DAYS_ACTIVE']);
CALL samooha_by_snowflake_local_db.provider.view_column_policy($cleanroom_name);

프로바이더: 릴리스 지시문 추가

모든 클린룸에는 major, minor, patch 값으로 구성된 버전 번호가 있어요. 소비자에게 제공되는 클린룸 버전을 지정해야 하며, 이를 *기본 릴리스 지시문(default release directive)*이라고 해요. 이것이 첫 번째 버전이므로 버전 번호는 1.0.0이에요.

CALL samooha_by_snowflake_local_db.provider.set_default_release_directive(
  $cleanroom_name, 'V1_0', '0');

클린룸에 코드를 업로드할 때마다 Snowflake는 클린룸의 새 버전을 만들어요. 사용자가 최신 버전을 받도록 하려면 최신 버전 번호로 새 기본 릴리스 지시문을 설정해야 해요. 이 튜토리얼에서는 코드를 업로드하지 않으므로 다시 호출할 필요는 없어요.

프로바이더: 소비자 지정

이제 클린룸에 소비자로 접근할 수 있는 사람을 지정할 거예요. 이 튜토리얼에서는 자신을 소비자로 추가할 거예요. 이렇게 하면 클린룸이 테스트 전용으로 사용되는 내부 테스트 클린룸으로 표시되며, 일부 기능이 제한되지만 이 튜토리얼에 필요한 모든 기능은 지원해요.

이 절차는 각 소비자를 식별하기 위해 두 개의 인수가 필요해요.

  • 소비자의 계정 로케이터(locator). 계정 로케이터는 다음과 같이 얻어요.

    SELECT CURRENT_ACCOUNT();
    
  • 소비자의 소비자 데이터 공유 계정 ID(*org_name*.*account_name* 형식). 올바른 형식의 소비자 데이터 공유 계정 ID는 다음과 같이 얻어요.

    SELECT CURRENT_ORGANIZATION_NAME() || '.' || CURRENT_ACCOUNT_NAME();
    

이제 클린룸을 소비자로서 자신과 공유하고, 표시된 위치에 계정 로케이터와 소비자 데이터 공유 계정 ID를 추가하세요.

CALL samooha_by_snowflake_local_db.provider.add_consumers(
  $cleanroom_name,
  '<CONSUMER_LOCATOR>',
  '<CONSUMER_DATA_SHARING_ACCOUNT_ID>');
CALL samooha_by_snowflake_local_db.provider.view_consumers($cleanroom_name);

프로바이더: 클린룸 게시

마지막으로 클린룸을 게시해요. 이렇게 하면 위에서 추가한 소비자가 클린룸을 사용할 수 있게 돼요. 이 절차는 1분 이상 걸릴 수 있어요.

-- Publish the clean room.
CALL samooha_by_snowflake_local_db.provider.create_or_update_cleanroom_listing(
  $cleanroom_name);

절차가 끝나면 프로바이더 계정의 Created 탭과 소비자 계정의 Invited 탭에 "Powered by Dev Edition" 레이블과 함께 클린룸 UI에 클린룸이 나열된 것을 볼 수 있어요. 소비자 계정은 초대 이메일을 받게 돼요. (Invited 탭에서 클린룸을 설치하지 마세요. 이후 단계에서 코드로 설치할 거예요.)

축하합니다! 첫 번째 클린룸을 게시했어요! 이제 프로바이더 모자를 벗고 소비자 모자를 써 보세요.

소비자: 클린룸 설치(참여)

이 튜토리얼에서 프로바이더와 소비자 역할에 같은 계정을 사용하므로, 같은 계정의 Snowsight에 "API Tutorial - Consumer"라는 새 SQL 워크시트를 추가하세요.

프로바이더 때처럼 세션 환경을 설정하세요.

USE WAREHOUSE app_wh;
USE ROLE SAMOOHA_APP_ROLE;

다음으로 프로바이더로서 게시하고 공유한 클린룸을 설치해요. 클린룸을 설치하려면 클린룸 이름과 사용자와 공유한 프로바이더의 계정 로케이터를 모두 지정해야 해요. 클린룸 이름과 계정 로케이터를 지정하면 이름이 같은 클린룸을 구분하는 데 도움이 돼요. SELECT CURRENT_ACCOUNT();를 실행해 프로바이더 로케이터를 얻으세요.

SET cleanroom_name = 'Developer Tutorial';
CALL samooha_by_snowflake_local_db.consumer.install_cleanroom(
  $cleanroom_name,
  <PROVIDER_LOCATOR>);

설치는 몇 분이 걸릴 수 있어요.

소비자: 데이터 연결

프로바이더 때와 마찬가지로 데이터를 등록하고 클린룸에 연결해야 해요. 다시 한 번 클린룸 설치와 함께 제공된 샘플 데이터를 사용하므로 데이터는 미리 등록되어 있어요. 클린룸과 함께 설치된 다른 샘플 테이블을 사용할 거예요. 이 테이블이 계정에 없다면 소개 페이지의 요구 사항 섹션에서 설치 방법을 확인하세요.

USE ROLE SAMOOHA_APP_ROLE;
CALL samooha_by_snowflake_local_db.consumer.link_datasets(
  $cleanroom_name, ['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS_2']);
CALL samooha_by_snowflake_local_db.consumer.view_consumer_datasets($cleanroom_name);

소비자: 정책 설정 불필요

프로바이더가 한 것과 같은 방식으로 데이터에 정책을 설정할 수 있지만, 이 템플릿은 소비자만 실행하도록 승인되어 있으므로 정책을 설정할 필요는 없어요. 그러나 프로바이더가 이 템플릿을 실행하라는 요청을 승인한다면, 먼저 데이터에 조인 및 컬럼 정책을 설정해 프로바이더가 데이터로 무엇을 할 수 있는지 제어해야 해요.

소비자: 분석 실행

쿼리를 실행하려면 다음 정보가 필요해요.

  • 실행하려는 템플릿의 이름.
  • 템플릿에 사용할 자신의 테이블 이름.
  • 템플릿에 사용할 프로바이더의 테이블 이름.
  • 전달할 기타 이름/값 변수.

템플릿 검토

템플릿이 무엇을 하는지, 어떤 인수를 받는지 보려면 템플릿을 검토할 수 있어요. 다음 예시는 클린룸의 템플릿을 나열하고, 템플릿의 코드를 보고, 받는 인수를 확인하는 방법을 보여 줘요.

-- List templates in the clean room.
CALL samooha_by_snowflake_local_db.consumer.view_added_templates($cleanroom_name);
-- See the template code.
SET template_name = 'overlap_template';
CALL samooha_by_snowflake_local_db.consumer.view_template_definition(
  $cleanroom_name, $template_name);
-- See what arguments can be passed in to the template:
CALL samooha_by_snowflake_local_db.consumer.get_arguments_from_template(
  $cleanroom_name, $template_name);

프로바이더 테이블과 컬럼 이름, 소비자 테이블과 컬럼 이름, 그룹핑 컬럼을 전달해야 한다는 것을 알 수 있어요.

사용 가능한 프로바이더 테이블 나열

프로바이더가 클린룸에 추가한 테이블을 확인하세요.

-- Table name to use is in the LINKED_TABLE column in the results.
CALL samooha_by_snowflake_local_db.consumer.view_provider_datasets($cleanroom_name);

프로바이더의 조인 가능 및 프로젝션 가능 컬럼 나열

프로바이더 데이터에서 조인하거나 프로젝션할 수 있는 컬럼을 확인하세요.

-- See which provider columns can be joined on.
CALL samooha_by_snowflake_local_db.consumer.view_provider_join_policy($cleanroom_name);
-- See which provider columns can be projected.
CALL samooha_by_snowflake_local_db.consumer.view_provider_column_policy($cleanroom_name);

분석 실행

쿼리에 무엇이 필요한지, 어떤 프로바이더 데이터를 사용할 수 있는지, 그 데이터로 무엇을 할 수 있는지 알았으니, 전달할 값을 선택할 수 있어요. 대부분의 상황에서 모든 컬럼 이름을 정규화해야 해요. 실제 테이블 이름이 아니라 테이블 별칭을 테이블 이름으로 사용해야 해요. 이 템플릿의 테이블 별칭은 프로바이더 테이블이 p, 소비자 테이블이 c라는 것을 기억하세요. 소문자 p와 c를 사용해야 해요.

첫 번째 쿼리에서는 다음 값을 사용하세요.

  • 프로바이더 테이블: 유일한 선택은 SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS예요.
  • 소비자 테이블: 유일한 선택은 SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS_2예요.
  • consumer_join_col: 소비자 테이블의 age_band를 사용하세요. 정규화된 컬럼 이름은 c.age_band예요.
  • provider_join_col: 비슷한 컬럼에 조인해야 하므로, 그에 상응하는 정규화된 프로바이더 이름은 p.age_band예요.
  • group_by_col: 나머지 프로젝션 가능한 컬럼에서 프로바이더 또는 소비자 컬럼을 선택하세요. p.device_type을 시도하되, consumer.view_provider_column_policy가 반환한 다른 프로바이더 또는 소비자 컬럼을 사용해도 돼요.

이 값들은 다음 예시와 같이 consumer.run_analysis에 전달돼요.

CALL samooha_by_snowflake_local_db.consumer.run_analysis(
  $cleanroom_name,
  $template_name,
  ['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS_2'],  -- Consumer table list.
  ['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS'],    -- Provider table list.
  OBJECT_CONSTRUCT(                              -- Additional template arguments as name-value pairs.
    'consumer_join_col','c.age_band',
    'provider_join_col','p.age_band',
    'group_by_col','p.status'
  )
);

축하합니다! Snowsight에서 쿼리 결과를 볼 수 있을 거예요. 여기서 다루지 않는 추가 기능을 사용하면 그 결과를 직접 자신의 Snowflake 계정이나, *활성화(Activation)*라고 하는 과정을 통해 승인된 타사 서비스로 내보낼 수 있어요. 더 많은 사용 사례와 클린룸 기능은 Snowflake Clean Rooms 개발자 가이드를 참고하세요.

두 계정: 정리

이제 만든 모든 리소스를 정리해 볼게요.

프로바이더 정리

프로바이더 워크시트에서 다음 코드를 실행하세요.

USE ROLE SAMOOHA_APP_ROLE;
CALL samooha_by_snowflake_local_db.provider.drop_cleanroom($cleanroom_name);

소비자 정리

소비자 워크시트에서 다음 코드를 실행하세요.

USE ROLE SAMOOHA_APP_ROLE;
CALL samooha_by_snowflake_local_db.consumer.uninstall_cleanroom($cleanroom_name);

더 알아보기