Snowflake Data Clean Rooms: 공급자로 분석 실행

이 항목에서는 공급자가 클린룸을 생성하고 공유한 다음, 컨슈머가 데이터를 연결한 후 클린룸에서 분석을 실행하는 예제를 제공합니다. 공급자가 클린룸에서 분석을 실행하는 프로세스를 일반적으로 “공급자 실행 분석”이라고 합니다.

중요

컨슈머가 공급자가 템플릿에 대한 분석을 실행하도록 허용하는 경우, 공급자가 아닌 컨슈머에게 공급자의 분석에 사용된 크레딧에 대한 요금이 청구됩니다. 컨슈머가 공급자가 분석을 실행하도록 허용한 후, 컨슈머는 비용 발생을 중단하기 위해 클린룸을 제거해야 합니다.

컨슈머가 특정 기간 동안 공급자가 소비한 크레딧의 추정치를 얻고자 하는 경우 다음 쿼리를 실행할 수 있습니다. 여기서 -5 는 공급자의 지난 5일간의 컴퓨팅 소비 추정치를 반환합니다.

SELECT * FROM table(samooha_by_snowflake_local_db_dev.public.udtf(-5));
Copy

이 예제의 흐름은 공급자가 취하는 작업과 컨슈머가 취하는 작업 사이를 변환합니다. 이 흐름은 다음과 같은 작업으로 구성됩니다.

  1. 공급자:

    a. 오버레이 연구를 위한 클린룸을 생성합니다.

    b. 클린룸에 데이터 세트를 연결합니다.

    c. 분석에 사용할 수 있는 열과 조인할 수 있는 열을 관리하는 정책을 추가합니다.

    d. 미리 정의된 중복 분석 템플릿을 활성화합니다.

    e. 클린룸을 컨슈머와 공유합니다.

    f. 분석을 실행할 수 있도록 클린룸을 구성합니다.

    g. 컨슈머가 분석을 실행하지 못하도록 클린룸을 구성합니다. 이 예에서 컨슈머는 데이터 공급자 역할만 합니다.

    h. 클린룸을 설치한 컨슈머와 함께 중복 연구를 실행합니다.

  2. 컨슈머:

    a. 공급자가 공유하는 클린룸을 설치합니다.

    b. 클린룸에 데이터 세트를 연결합니다.

    c. 데이터 세트에 대한 보안 정책 설정.

    d. 클린룸에서 분석을 수행할 수 있는 공급자의 능력을 승인합니다.

전제 조건

이 예제를 완료하려면 두 개의 별도 Snowflake 계정이 필요합니다. 첫 번째 계정을 사용하여 공급자의 명령을 실행한 다음 두 번째 계정으로 전환하여 컨슈머의 명령을 실행합니다.

공급자

이 섹션의 명령을 실행하려면 공급자 계정에서 Snowflake 워크시트를 사용합니다.

환경 설정

개발자 APIs를 사용하기 전에 SAMOOHA_APP_ROLE 역할로 APIs를 실행하는 데 사용되는 웨어하우스를 지정해야 합니다. SAMOOHA_APP_ROLE 역할이 없는 경우 계정 관리자에게 문의하십시오.

다음 명령을 실행하여 환경을 설정합니다.

USE ROLE samooha_app_role;
USE WAREHOUSE app_wh;
Copy

클린룸 만들기

클린룸의 이름을 지정합니다. 기존 클린룸 이름과 충돌하지 않도록 새 클린룸 이름을 입력합니다. 클린룸 이름에는 영숫자 만 사용할 수 있습니다. 클린룸 이름에는 공백과 밑줄 외의 특수문자를 사용할 수 없습니다.

먼저 다음 명령을 실행하여 예제 클린룸의 클린룸 이름을 설정합니다.

SET cleanroom_name = 'Provider Run Analysis Overlap';
Copy

지정된 이름의 클린룸이 이미 존재하는 경우 이 프로세스는 실패합니다.

이 절차의 실행에는 일반적으로 약 30초 정도가 더 걸릴 수 있습니다.

provider.cleanroom_init 의 두 번째 인자는 클린룸의 분포입니다. 이는 INTERNAL 또는 EXTERNAL일 수 있습니다. 테스트 목적으로 클린룸을 같은 조직의 계정과 공유하는 경우 INTERNAL을 사용하여 애플리케이션 패키지를 공동 작업자에게 릴리스하기 전에 수행해야 하는 자동화된 보안 검사를 우회할 수 있습니다. 그러나 이 클린룸을 다른 조직의 계정과 공유하는 경우에는 EXTERNAL 클린룸 배포를 사용해야 합니다.

CALL samooha_by_snowflake_local_db.provider.cleanroom_init($cleanroom_name, 'INTERNAL');
Copy

보안 검사 상태를 보려면 다음 명령을 실행합니다.

CALL samooha_by_snowflake_local_db.provider.view_cleanroom_scan_status($cleanroom_name);
Copy

클린룸을 만든 후에는 공동 작업자와 공유하기 전에 릴리스 지시문을 설정해야 합니다. 그러나 배포가 EXTERNAL로 설정된 경우에는 먼저 보안 검사가 완료될 때까지 기다린 후 릴리스 지시문을 설정해야 합니다. 나머지 단계를 계속 실행하고 스캔이 실행되는 동안 provider.create_cleanroom_listing 단계 전에 여기로 돌아올 수 있습니다.

릴리스 지시문을 설정하려면 다음 명령을 실행합니다.

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

데이터 세트에 대한 조인 정책 설정

조인 정책으로 사용할 열을 결정하려면 데이터 집합을 살펴보고 PII 열을 결정하면 됩니다. 예를 들어, 테이블의 상위 10개 행을 보려면 다음 쿼리를 실행합니다.

SELECT * FROM SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS LIMIT 10;
Copy

다음으로, 클린룸 내에서 템플릿을 실행할 때 컨슈머가 조인할 수 있는 열을 지정합니다. 이 절차는 이메일과 같은 ID 열에 대해 호출되어야 합니다. 참여 정책을 두 번째로 설정하면 이전에 설정한 참여 정책이 새 정책으로 완전히 대체됩니다.

CALL samooha_by_snowflake_local_db.provider.set_join_policy($cleanroom_name, ['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:HEM']);
Copy

클린룸에 추가된 조인 정책을 보려면 다음 명령을 실행합니다.

CALL samooha_by_snowflake_local_db.provider.view_join_policy($cleanroom_name);
Copy

클린룸에 분석 템플릿 추가

템플릿은 클린룸에서 실행할 수 있는 분석 유형을 결정합니다. 이 예에서는 협력자가 공급자의 데이터 세트와 컨슈머의 데이터 세트 사이의 중복에 대한 분석을 실행할 수 있도록 하는 미리 정의된 템플릿을 사용하고 있습니다.

이 템플릿은 차등 개인정보 보호에서 제공되는 추가적인 보안 보장을 기본적으로 구현합니다.

CALL samooha_by_snowflake_local_db.provider.add_templates($cleanroom_name, ['prod_overlap_analysis']);
Copy

각 테이블에 열 정책 설정

테이블에 열 정책을 설정하기 전에 쿼리를 실행하여 테이블의 열을 표시합니다. 예를 들어, 상위 10개 행을 보려면 다음 명령을 실행합니다.

SELECT * FROM SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS LIMIT 10;
Copy

모든 테이블 및 템플릿 조합에 대해 분석가가 분석에 사용할 수 있는 열(예: 그룹화하거나 집계할 수 있는 열)을 설정합니다. 이를 통해 유연성이 제공되므로 기본 템플릿에 따라 동일한 테이블에서도 다른 열 선택을 허용할 수 있습니다. 템플릿을 추가한 후에 테이블의 열 정책을 설정합니다.

열 정책은 바꾸기 전용 이므로 함수가 다시 호출되면 이전에 설정된 열 정책이 새 정책으로 완전히 바뀝니다.

열 정책은 분석가가 이러한 열을 기준으로 그룹화할 수 없도록 하려면 이메일, HEM 또는 RampID와 같은 ID 열에는 사용하지 않아야 합니다. 프로덕션 환경에서는 Snowflake가 PII 열을 추론하여 이 작업을 차단하지만, 샌드박스 환경에서는 이 추론을 사용할 수 없습니다. 이는 분석가가 상태, 연령대, 리전 코드 또는 활성 일수와 같이 집계 및 그룹화할 수 있는 열에만 사용해야 합니다.

템플릿/테이블 조합에 대한 열 정책을 설정하려면 다음 명령을 실행합니다.

CALL samooha_by_snowflake_local_db.provider.set_column_policy($cleanroom_name, [
'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:STATUS', 
'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:AGE_BAND', 
'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:DAYS_ACTIVE', 
'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:REGION_CODE']);
Copy

클린룸에 추가된 열 정책을 보려면 다음 명령을 실행합니다.

call samooha_by_snowflake_local_db.provider.view_column_policy($cleanroom_name);
Copy

컨슈머와 공유

마지막으로, 아래와 같이 Snowflake 계정 로케이터와 계정 이름을 추가하여 클린룸에 데이터 컨슈머를 추가합니다. Snowflake 계정 이름은 <ORGANIZATION>.<ACCOUNT_NAME> 형식이어야 합니다.

참고

다음 명령을 실행하기 전에 provider.set_default_release_directive 를 사용하여 릴리스 지시문을 설정했는지 확인합니다. 다음 명령을 실행하여 사용 가능한 최신 버전과 패치를 확인할 수 있습니다.

SHOW VERSIONS IN APPLICATION PACKAGE samooha_cleanroom_Provider_Run_Analysis_Overlap;
Copy

컨슈머와 클린룸을 공유하려면 다음 명령을 실행합니다.

CALL samooha_by_snowflake_local_db.provider.add_consumers($cleanroom_name, '<CONSUMER_ACCOUNT_LOCATOR>', '<CONSUMER_ACCOUNT_NAME>');
CALL samooha_By_snowflake_local_db.provider.create_cleanroom_listing($cleanroom_name, '<CONSUMER_ACCOUNT_NAME>');
Copy

여러 개의 컨슈머 계정 로케이터를 provider.add_consumers 함수에 쉼표로 구분된 문자열로 전달하거나 provider.add_consumers 에 대한 별도의 호출로 전달할 수 있습니다.

클린룸에 추가된 컨슈머를 보려면 다음 명령을 실행합니다.

CALL samooha_by_snowflake_local_db.provider.view_consumers($cleanroom_name);
Copy

분석을 실행할 수 있는 사용자 구성하기

참고

이 섹션의 APIs는 클린룸을 컨슈머와 공유한 에 사용하되, 컨슈머가 클린룸을 설치하기 에 사용해야 합니다. 컨슈머가 클린룸을 설치한 후에 클린룸의 구성을 변경할 경우, 컨슈머는 클린룸을 다시 설치해야 합니다.

이 예에서는 공급자가 분석을 실행할 수 있지만 컨슈머는 분석을 실행할 수 없도록 클린룸을 구성하려고 합니다. 즉, 컨슈머는 데이터 세트를 추가하고 보안 정책을 설정할 수만 있습니다.

공급자가 분석을 실행할 수 있도록 클린룸을 구성하려면 다음 명령을 실행합니다.

CALL samooha_by_snowflake_local_db.provider.enable_provider_run_analysis($cleanroom_name, ['<CONSUMER_ACCOUNT_LOCATOR>']);
Copy

참고

이 예제에서는 사용되지 않았지만 공급자는 provider.disable_provider_run_analysis 명령을 실행하여 구성을 되돌리고 분석을 실행하지 못하게 할 수 있습니다.

기본적으로 컨슈머는 클린룸에서 분석을 실행할 수 있습니다. 컨슈머가 분석을 실행하지 못하도록 클린룸을 구성하려면 다음 명령을 실행합니다.

CAll samooha_by_snowflake_local_db.provider.disable_consumer_run_analysis($cleanroom_name, ['<CONSUMER_ACCOUNT_LOCATOR>']);
Copy

참고

이 예제에서는 사용되지 않았지만, 공급자가 구성을 역으로 변경하고 컨슈머가 provider.enable_consumer_run_analysis 명령을 실행하여 분석을 실행할 수 있도록 할 수 있습니다.

컨슈머

이제 클린룸의 컨슈머 역할로 전환합니다. 이 섹션의 명령을 실행하려면 컨슈머 계정에서 Snowflake 워크시트를 사용하십시오.

환경 설정

개발자 APIs를 사용하기 전에 SAMOOHA_APP_ROLE 역할로 APIs를 실행하는 데 사용되는 웨어하우스를 지정해야 합니다. SAMOOHA_APP_ROLE 역할이 없는 경우 계정 관리자에게 문의하십시오.

다음 명령을 실행하여 환경을 설정합니다.

USE ROLE samooha_app_role;
USE WAREHOUSE app_wh;
Copy

클린룸 설치

공급자가 공유한 클린룸을 설치하기 전에 클린룸의 이름을 지정합니다.

SET cleanroom_name = 'Provider Run Analysis Overlap';
Copy

다음 명령은 컨슈머 계정에 클린룸을 설치합니다.

CALL samooha_by_snowflake_local_db.consumer.install_cleanroom($cleanroom_name, '<PROVIDER_ACCOUNT_LOCATOR>');
Copy

데이터 세트 연결

이제 일부 데이터 세트를 클린룸에 연결할 수 있습니다. 공급자는 클린룸에서 분석을 실행할 때 이 데이터를 사용합니다.

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

참고

테이블이 존재하더라도 이 단계가 동작하지 않으면, 해당 테이블이 포함된 데이터베이스가 등록되지 않았을 수 있습니다. 데이터베이스를 등록하려면 ACCOUNTADMIN 역할이 있는 사용자로 다음 명령을 실행합니다.

USE ROLE accountadmin;
CALL samooha_by_snowflake_local_db.provider.register_db('<DATABASE_NAME>');
USE ROLE samooha_app_role;
Copy

클린룸에 추가한 데이터 세트를 보려면 다음 프로시저를 호출합니다.

CALL samooha_by_snowflake_local_db.consumer.view_consumer_datasets($cleanroom_name);
Copy

데이터 세트에 대한 보안 조인 정책 설정

이 섹션에서는 클린룸에서 분석을 실행할 때 공급자가 결합할 수 있는 열을 지정합니다. 이메일과 같은 ID 열에서 다음 명령을 실행해야 합니다. 조인 정책은 “바꾸기 전용”이므로 함수가 다시 호출되면 이전에 설정된 조인 정책이 새 정책으로 완전히 바뀝니다.

CALL samooha_by_snowflake_local_db.consumer.set_join_policy($cleanroom_name, ['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:HEM']);
Copy

데이터 세트에 대한 열 정책 설정

모든 테이블 및 템플릿 조합에 대해 공급자가 분석에 사용할 수 있는 열(예: 그룹화하거나 집계할 수 있는 열)을 설정합니다. 이를 통해 유연성이 제공되므로 기본 템플릿에 따라 동일한 테이블에서도 다른 열 선택을 허용할 수 있습니다. 템플릿을 추가한 후에 테이블의 열 정책을 설정합니다.

열 정책은 바꾸기 전용 이므로 함수가 다시 호출되면 이전에 설정된 열 정책이 새 정책으로 완전히 바뀝니다.

열 정책은 공급자가 이러한 열을 기준으로 그룹화할 수 없도록 하려면 이메일, HEM 또는 RampID와 같은 ID 열에는 사용하지 않아야 합니다. 프로덕션 환경에서는 Snowflake가 PII 열을 추론하여 이 작업을 차단하지만, 샌드박스 환경에서는 이 추론을 사용할 수 없습니다. 공급자가 상태, 연령대, 리전 코드 또는 활성 일수와 같이 집계 및 그룹화할 수 있도록 하려는 열에만 사용해야 합니다.

템플릿/테이블 조합에 대한 열 정책을 설정하려면 다음 명령을 실행합니다.

CALL samooha_by_snowflake_local_db.consumer.set_column_policy($cleanroom_name, [
    'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:STATUS', 
    'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:AGE_BAND', 
    'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:DAYS_ACTIVE', 
    'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:REGION_CODE'
]);
Copy

공급자가 분석을 실행하도록 허용

컨슈머는 공급자가 템플릿별로 분석을 실행할 수 있는 권한을 명시적으로 승인해야 합니다. 이 승인 없이는 공급자는 클린룸을 구성하여 분석을 실행하더라도 분석을 실행할 수 없습니다.

첫째, 공급자가 분석을 실행할 수 있도록 클린룸을 구성했는지 확인할 수 있습니다.

CALL samooha_by_snowflake_local_db.library.is_provider_run_enabled($cleanroom_name)
Copy

다음으로, 공급자가 분석을 실행하도록 허용하려면 다음 명령을 실행하면 됩니다. 공급자가 사용할 수 있도록 할 모든 템플릿에 대해 명령을 실행해야 합니다. 공급자가 보호되지 않은 데이터에 대한 분석을 실행하지 못하도록 하려면 조인 및 열 정책을 설정한 후에 승인을 해야 합니다.

CALL samooha_by_snowflake_local_db.consumer.enable_templates_for_provider_run($cleanroom_name, ['prod_overlap_analysis']);
Copy

공급자

이제 클린룸에서 분석을 실행하기 위해 공급자 계정으로 다시 변환합니다. 이 섹션의 명령을 실행하려면 공급자 계정에서 Snowflake 워크시트를 사용합니다.

컨슈머로부터 정보에 액세스합니다

공급자가 분석을 실행하면 컨슈머 계정의 데이터가 처리됩니다. 분석 결과를 검색하려면 서비스 공급자는 컨슈머로부터 서비스 공급자에게 돌아오는 정보에 액세스해야 합니다. 컨슈머로부터 얻은 정보에 액세스하려면 다음 명령을 실행합니다.

CALL samooha_by_snowflake_local_db.provider.mount_request_logs_for_all_consumers($cleanroom_name);
Copy

분석 실행

공급자는 분석을 실행하고자 할 때 provider.submit_analysis_request 명령을 실행합니다.

CALL samooha_by_snowflake_local_db.provider.submit_analysis_request(
    $cleanroom_name, 
    '<CONSUMER_ACCOUNT>',
    'prod_overlap_analysis', 
    ['SAMOOHA_SAMPLE_DATABASE.demo.customers'], 
    ['SAMOOHA_SAMPLE_DATABASE.demo.customers'], 
    object_construct(       
      'dimensions', ['c.REGION_CODE'],        
      'measure_type', ['AVG'],           
      'measure_column', ['c.DAYS_ACTIVE'],
      'where_clause', 'p.hem=c.hem'                                         
    ));
Copy

provider.submit_analysis_request 명령은 요청 식별자를 반환합니다. 분석 요청 상태를 확인하고 분석 결과를 검색하려면 이 식별자를 저장 해야 합니다. 예를 들어, 다음을 실행하여 식별자를 로컬 변수에 저장할 수 있습니다.

SET request_id = '<REQUEST_ID>';
Copy

분석 수행 요청을 제출한 후 다음 명령을 실행하여 요청 상태를 볼 수 있습니다. 처음으로 명령을 실행할 때 지연이 발생할 수 있습니다.

CALL samooha_by_snowflake_local_db.provider.check_analysis_status(
    $cleanroom_name, 
    $request_id, 
    '<CONSUMER_ACCOUNT_LOCATOR>'
);
Copy

참고

이 API가 실패하는 경우, 클린룸을 컨슈머로 설치하기 전에 공급자가 분석을 실행할 수 있도록 클린룸을 구성했는지 확인하세요. 컨슈머가 클린룸을 설치한 후에 클린룸을 구성한 경우, 컨슈머는 클린룸을 재설치해야 합니다.

provider.check_analysis_status 명령이 반환한 상태가 COMPLETED인 경우 다음 명령을 실행하여 분석 결과를 검색할 수 있습니다.

CALL samooha_by_snowflake_local_db.provider.get_analysis_result(
    $cleanroom_name, 
    $request_id, 
    '<CONSUMER_ACCOUNT_LOCATOR>'
);
Copy