Snowflake Data Clean Rooms: 공급자 데이터 분석

이 항목에서는 클린룸 내에서 프로그래밍 방식으로 분석을 생성, 공유하고 실행하는 데 필요한 공급자 및 컨슈머 흐름을 설명합니다. 공급자 측 데이터 분석을 통해 컨슈머는 데이터를 결합하지 않고도 공급자의 데이터 세트에 대한 집계된 인사이트를 볼 수 있습니다.

이 항목에서 설명하는 흐름에는 다음 작업이 포함됩니다.

  1. 공급자:

    1. 새로운 클린룸을 만듭니다.

    2. 데이터 세트를 이 클린룸에 안전하게 연결합니다.

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

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

    5. 이를 컨슈머와 공유합니다.

  2. 컨슈머:

    1. 공급자가 공유한 클린룸을 설치합니다.

    2. 클린룸 내에 제공된 템플릿을 검토합니다.

    3. 템플릿을 사용하여 클린룸 내에서 분석을 실행합니다.

전제 조건

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

공급자

참고

다음 명령은 공급자 계정의 Snowflake 워크시트에서 실행해야 합니다.

환경 설정

개발자 APIs를 사용하여 Snowflake Data Clean Room으로 작업하기 전에 다음 명령을 실행하여 Snowflake 환경을 설정합니다. SAMOOHA_APP_ROLE 역할이 없는 경우 계정 관리자에게 문의하십시오.

use role samooha_app_role;
use warehouse app_wh;
Copy

클린룸 만들기

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

set cleanroom_name = 'Provider Data Analysis Demo Clean room';
Copy

위에서 설정한 클린룸 이름으로 새로운 클린룸을 만들 수 있습니다. 위에 설정한 클린룸 이름이 기존 클린룸으로 이미 존재하는 경우 이 프로세스는 실패합니다.

이 절차의 실행에는 약 45초가 걸립니다.

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

리전 간 공유

사용자의 계정과 다른 리전에 있는 Snowflake 고객과 클린룸을 공유하려면 클라우드 간 자동 복제를 활성화해야 합니다. 다른 리전의 컨슈머와 협업하는 데 따른 추가 비용에 대한 자세한 내용은 클라우드 간 자동 복제 비용을 참조하십시오.

개발자 APIs를 사용할 때, 리전 간 공유를 활성화하는 것은 2단계 프로세스입니다.

  1. ACCOUNTADMIN 역할이 있는 Snowflake 관리자는 Snowflake 계정에 대해 클라우드 간 자동 복제를 사용 설정할 수 있습니다. 자세한 지침은 다른 리전의 계정과 협업을 참조하십시오.

  2. provider.enable_laf_for_cleanroom 명령을 실행하여 클린룸에 클라우드 간 자동 복제를 사용하도록 설정합니다. 예:

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

클린룸에 대해 클라우드 간 자동 복제를 활성화한 후에는 평소와 같이 provider.create_cleanroom_listing 명령을 사용하여 목록에 컨슈머를 추가할 수 있습니다. 목록은 필요에 따라 원격 클라우드 및 리전에 자동으로 복제됩니다.

클린룸에 분석 템플릿 추가

이름 식별자를 사용하여 미리 지정된 템플릿 목록을 추가합니다. 이 흐름에서는 공급자가 승인한 열에 대해 안전하고 공급자가 승인한 방식으로 공급자 데이터 세트에 대한 데이터 분석을 수행할 수 있는 미리 정의된 템플릿을 추가합니다.

call samooha_by_snowflake_local_db.provider.add_templates($cleanroom_name, ['prod_provider_data_analysis']);
Copy

현재 클린룸에서 활성화된 템플릿을 보려면 다음 프로시저를 호출합니다.

참고

모든 시스템 정의 사전 설정 템플릿은 암호화되어 기본적으로 볼 수 없습니다. 하지만 사용자가 추가한 사용자 지정 템플릿은 모두 표시됩니다.

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

필요한 경우 클린룸에 추가된 모든 템플릿을 삭제할 수도 있습니다. 자세한 정보는 공급자 API 참조 가이드를 참조하십시오.

각 테이블에 열 정책 설정

테이블의 내부에 있는 열을 확인하기 위해 연결된 데이터를 표시합니다. 상위 10개 행을 보려면 다음 프로시저를 호출합니다.

select * from SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS limit 10;
Copy

모든 테이블 및 템플릿 조합에 대해 컨슈머가 그룹화, 집계(예: SUM 또는 AVG)하고 일반적으로 분석에 사용할 수 있는 열을 설정합니다. 이를 통해 유연성이 제공되므로 기본 템플릿에 따라 동일한 테이블에서도 다른 열 선택을 허용할 수 있습니다. 이 작업은 템플릿을 추가한 후에만 호출해야 합니다.

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

컨슈머가 이러한 열을 기준으로 그룹화할 수 없도록 하려면 이메일, HEM 또는 RampID와 같은 ID 열에는 열 정책을 사용해서는 안 됩니다. 프로덕션 환경에서는 시스템이 지능적으로 PII 열을 추론하여 이 작업을 차단하지만 샌드박스 환경에서는 이 기능을 사용할 수 없습니다. 상태, 연령대, 채널, 활성 일수 등 컨슈머가 집계하고 그룹화할 수 있는 열에만 사용해야 합니다.

call samooha_by_snowflake_local_db.provider.set_column_policy($cleanroom_name, [
    'prod_provider_data_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:STATUS', 
    'prod_provider_data_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:AGE_BAND', 
    'prod_provider_data_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:DAYS_ACTIVE',
    'prod_provider_data_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_Data_Analysis_Demo_clean_room;
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

다음 절차에 따라 최근에 생성된 클린룸을 확인합니다.

call samooha_by_snowflake_local_db.provider.view_cleanrooms();
Copy

다음 절차를 통해 최근 생성된 클린룸에 대한 더 많은 인사이트를 살펴볼 수 있습니다.

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

생성된 클린룸을 삭제할 수도 있습니다. 다음 명령은 클린룸을 완전히 삭제하므로, 이전에 클린룸을 사용할 수 있었던 컨슈머는 더 이상 사용할 수 없습니다. 나중에 이름이 동일한 클린룸이 필요한 경우 위의 흐름을 사용하여 다시 초기화해야 합니다.

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

참고

이 시점에서 공급자 흐름이 완료되었습니다. 컨슈머 흐름을 계속하려면 컨슈머 계정으로 전환합니다.

컨슈머

참고

다음 명령은 컨슈머 계정의 Snowflake 워크시트에서 실행해야 합니다.

환경 설정

개발자 APIs를 사용하여 Snowflake Data Clean Room으로 작업하기 전에 다음 명령을 실행하여 Snowflake 환경을 설정합니다. SAMOOHA_APP_ROLE 역할이 없는 경우 계정 관리자에게 문의하십시오.

use role samooha_app_role;
use warehouse app_wh;
Copy

클린룸 설치

클린룸 공유가 설치되면 아래 명령을 사용하여 사용 가능한 클린룸 목록을 볼 수 있습니다.

call samooha_by_snowflake_local_db.consumer.view_cleanrooms();
Copy

공급자가 사용자와 공유한 클린룸의 이름을 지정합니다.

set cleanroom_name = 'Provider Data Analysis Demo Clean room';
Copy

다음 명령은 연결된 공급자와 선택된 클린룸을 사용하여 컨슈머 계정에 클린룸을 설치합니다.

이 절차의 실행에는 약 45초가 걸릴 수 있습니다.

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

클린룸이 설치되면 공급자는 클린룸을 사용하기 전에 공급자 측에서 클린룸 설치를 완료해야 합니다. 아래 함수을 사용하면 클린룸의 상태를 확인할 수 있습니다. 해당 기능이 활성화되면 아래의 Run Analysis 명령을 실행할 수 있습니다. 일반적으로 클린룸이 활성화되려면 약 1분이 걸립니다.

call samooha_by_snowflake_local_db.consumer.is_enabled($cleanroom_name);
Copy

분석 실행

이제 클린룸이 설치되었으므로 “run_analysis” 명령을 사용하여 공급자가 클린룸에 제공한 분석 템플릿을 실행할 수 있습니다. 아래 섹션에서 각 필드가 어떻게 결정되는지 확인할 수 있습니다.

참고

분석을 실행하기 전에 웨어하우스 크기를 변경하거나, 대규모 테이블의 경우 더 크고 새로운 웨어하우스 크기를 사용할 수 있습니다.

-- Example run analysis procedure with single provider dataset

call samooha_by_snowflake_local_db.consumer.run_analysis(
  $cleanroom_name,                    -- cleanroom
  'prod_provider_data_analysis',      -- template name

  [],                                 -- consumer tables - this is empty since this template operates only on provider data
  
  ['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS'],    -- the provider table we want to carry out analysis on

  object_construct(                        -- The keyword arguments needed for the SQL Jinja template
      'dimensions', ['p.STATUS'],          -- Group by column

      'measure_type', ['COUNT'],           -- Aggregate function you want to perform like COUNT, AVG, etc.

      'measure_column', ['p.DAYS_ACTIVE'], -- The column that you want to perform aggregate function on

      'where_clause', 'p.REGION_CODE=$$REGION_10$$'  -- Acts as a filter to consider only certain records
                                                      -- $$ is used to pass string literals
    )
);
Copy

데이터 세트 필터링 “where_clause” 또는 차원 또는 measure_columns에서 참조해야 하는 각 열에 대해, 공급자 테이블의 필드를 참조하려면 p.를 사용하고, 컨슈머 테이블의 필드를 참조하려면 c.를 사용하면 됩니다. 두 개 이상의 공급자 테이블에는 p2, p3 등을 사용하고, 두 개 이상의 컨슈머 테이블에는 c2, c3 등을 사용합니다.

참고: 이 흐름에서 클린룸에 공급자 데이터 분석이 활성화되어 있는 것을 볼 수 있습니다. 즉, 클린룸에서 공급자 데이터 세트에 대해 안전하고 비공개적인 데이터 분석을 실행할 수 있습니다. 데이터 세트를 연결할 필요는 없습니다. 양측이 데이터 세트를 연결하여 공동 분석할 수 있는 예제는 엔드투엔드: 중첩 분석 흐름에서 확인할 수 있습니다.

run_analysis에 대한 입력을 결정하는 방법

분석을 실행하려면 run_analysis 함수에 여러 매개 변수를 전달해야 합니다. 이 섹션에서는 전달할 매개 변수를 결정하는 방법을 설명합니다.

템플릿 이름

먼저, 다음 프로시저를 호출하여 지원되는 분석 템플릿을 볼 수 있습니다.

call samooha_by_snowflake_local_db.consumer.view_added_templates($cleanroom_name);
Copy

템플릿을 사용하여 분석을 실행하려면 이 시점에서 어떤 인자를 지정해야 하는지, 어떤 타입이 예상되는지 알 수 없습니다. 따라서 템플릿이 사용자 지정 템플릿인 경우 이를 통해 템플릿을 시각적으로 살펴볼 수 있습니다.

참고

모든 시스템 정의 사전 설정 템플릿은 암호화되어 기본적으로 볼 수 없습니다. 하지만 사용자가 추가한 사용자 지정 템플릿은 모두 표시됩니다.

call samooha_by_snowflake_local_db.consumer.view_template_definition($cleanroom_name, 'prod_provider_data_analysis');
Copy

여기에는 많은 수의 다양한 SQL Jinja 매개 변수가 포함되는 경우가 많습니다. 다음 기능은 SQL Jinja 템플릿의 구문을 분석하고 run_analysis에 지정해야 하는 인자를 간이 목록으로 추출합니다.

참고

모든 시스템 정의 사전 설정 템플릿은 암호화되므로 이 함수는 이러한 템플릿에 대한 인자를 가져오지 않습니다. 하지만 사용자 지정 템플릿에 대한 매개 변수는 검색할 수 있습니다.

call samooha_by_snowflake_local_db.consumer.get_arguments_from_template($cleanroom_name, 'prod_provider_data_analysis');
Copy

데이터 세트 이름

공급자가 클린룸에 추가한 데이터 세트 이름을 보려면 다음 프로시저를 호출합니다. 클린룸의 보안 속성으로 인해 공급자가 클린룸에 추가한 데이터 세트에 있는 데이터를 볼 수 없습니다.

call samooha_by_snowflake_local_db.consumer.view_provider_datasets($cleanroom_name);
Copy

차원 및 측정 열

분석을 실행하는 동안 특정 열을 기준으로 필터링, 그룹화 및 집계를 수행할 수 있습니다. 공급자가 클린룸에 추가한 열 정책을 보려면 다음 프로시저를 호출합니다.

call samooha_by_snowflake_local_db.consumer.view_provider_column_policy($cleanroom_name);
Copy

일반적인 오류

실행한 분석의 결과로 승인되지 않음: 승인되지 않은 열이 사용됨 오류가 발생하는 경우 공급자가 설정한 조인 정책 및 열 정책을 다시 확인해 보십시오.

call samooha_by_snowflake_local_db.consumer.view_provider_join_policy($cleanroom_name);
call samooha_by_snowflake_local_db.consumer.view_provider_column_policy($cleanroom_name);
Copy

또한 개인정보 보호 예산이 소진되어 더 이상 쿼리를 실행할 수 없을 수도 있습니다. 잔여 개인정보 보호 예산은 아래 명령을 사용하여 볼 수 있습니다. 이는 매일 재설정되며, 클린룸 공급자가 재설정할 수도 있습니다.

call samooha_by_snowflake_local_db.consumer.view_remaining_privacy_budget($cleanroom_name);
Copy

다음 API를 사용하여 클린룸에 대해 차등 개인정보 보호가 활성화되었는지 확인할 수 있습니다.

call samooha_by_snowflake_local_db.consumer.is_dp_enabled($cleanroom_name);
Copy