Snowflake Data Clean Rooms: Consumer API 참조 가이드예요.

Snowflake Data Clean Rooms: Consumer API 참조 가이드예요.

서비스 종료 공지

레거시 Provider 및 Consumer Data Clean Rooms는 지원이 중단됩니다. 날짜와 마이그레이션 지침은 end-of-life timeline을 참조하세요.

이 페이지에서는 Clean Rooms API 소비자가 자신의 Clean Rooms를 관리하는 데 사용하는 절차를 설명합니다. 코딩 설정 지침은 Coding setup을 참조하세요.

출처: 문서

본문


Manage role access

grant_run_on_cleanrooms_to_role

Schema:

CONSUMER

설명: 지정된 역할에 지정된 clean room에서 일부 프로시저를 실행할 수 있는 권한을 부여해요. Clean room은 이 계정에 설치된 것이어야 하며, 이 계정에서 생성된 것이 아니어야 해요. (즉, 소비자(consumer)인 clean room만 해당해요.)

자신의 clean room에 제한된 사용 권한을 부여하려면 사용자에게 SAMOOHA_APP_ROLE 대신 지정된 역할을 부여해요. 역할 액세스에 대한 자세한 내용은 Grant limited API access (run roles)를 참조하세요.

여기에 지정된 역할을 사용하여 다음 프로시저를 실행할 수 있어요:

  • consumer.view_added_templates

  • consumer.view_added_template_chains

  • consumer.get_arguments_from_template

  • consumer.view_column_policy

  • consumer.view_consumer_datasets

  • consumer.view_join_policy

  • consumer.view_provider_column_policy

  • consumer.view_provider_datasets

  • consumer.view_provider_join_policy

  • consumer.view_remaining_privacy_budget

  • consumer.run_analysis

  • consumer.view_provider_activation_policy

  • consumer.view_activation_policy

  • consumer.run_activation

인자:

  • cleanroom_names (Array of strings) - 지정된 역할에 제한된 액세스를 부여할 모든 clean room의 이름이에요.

  • run_role_name - (String) 지정된 clean room에 대해 제한된 권한을 가진 역할의 이름이에요. 이 프로시저를 호출하기 전에 역할을 만들어야 해요.

반환 값: (String) - 성공 메시지예요.

예시:

CREATE ROLE MARKETING_ANALYST_ROLE;
CALL samooha_by_snowflake_local_db.consumer.grant_run_on_cleanrooms_to_role(
  ['overlap_cleanroom', 'market_share_cleanroom'],
  'MARKETING_ANALYST_ROLE'
);

revoke_run_on_cleanrooms_from_role

Schema:

CONSUMER

설명: 지정된 clean room에서 지정된 역할의 권한을 회수해요. 사용자가 권한이 회수되지 않은 역할에 액세스할 수 있거나 SAMOOHA_APP_ROLE을 보유한 경우, 해당 clean room에서 clean room 프로시저를 계속 실행할 수 있어요.

인자:

  • cleanroom_names (Array of strings) - 이 계정에 있는 하나 이상의 clean room 이름이에요.

  • run_role_name - (String) 이 계정의 지정된 clean room에서 더 이상 제한된 권한을 가지지 않아야 할 역할의 이름이에요.

반환 값: (String) - 성공 메시지예요.

예시:

CALL samooha_by_snowflake_local_db.consumer.revoke_run_on_cleanrooms_from_role(
  ['overlap_cleanroom', 'market_share_cleanroom'],
  'TEMP_USERS_ROLE'
);

Install a clean room

clean room을 설치하거나 제거하는 프로시저예요.

install_cleanroom

Schema:

CONSUMER

설명: 지정된 공급자가 생성한 clean room을 설치(참여)해요. 이 프로시저를 여러 번 호출하면 매번 기존 clean room이 지워져요. 두 번째 설치가 완료되기 전에 중단하면 clean room이 손상되며, clean room을 사용할 수 있게 하려면 이 프로시저를 완료해야 해요.

인자:

  • cleanroom_name (String) - 설치할 clean room의 이름이에요.

  • provider_account_locator - (String) 이 clean room을 생성한 공급자의 계정 로케이터(account locator)예요.

반환 값: (String) 성공 메시지예요.

오류 처리:

“Cross-Cloud Auto-Fulfillment is not enabled for this account”라는 오류가 발생하면, 공급자가 다른 클라우드 호스팅 리전에 있다는 뜻이에요. Managing Cross-Cloud Auto-Fulfillment in Snowflake Data Clean Rooms에 설명된 대로 Cross-Cloud Auto-Fulfillment를 활성화해야 해요.

예시:

CALL samooha_by_snowflake_local_db.consumer.install_cleanroom(
  $cleanroom_name,
  $provider_locator);

is_enabled

Schema:

CONSUMER

설명: clean room 설치 후 사용할 준비가 되기까지 약간의 지연이 있을 수 있어요. 설치 후 clean room을 사용할 준비가 되었는지 확인하려면 이 프로시저를 호출할 수 있어요.

인자:

  • cleanroom_name (String) - 상태를 확인할 clean room의 이름이에요.

반환 값: (Boolean) 지정된 clean room이 설치되어 사용할 준비가 되었는지 여부예요.

예시:

CALL samooha_by_snowflake_local_db.consumer.is_enabled($cleanroom_name);

uninstall_cleanroom

Schema:

CONSUMER

설명: 소비자 계정에서 clean room을 제거해요. 이렇게 하면 공유된 clean room 데이터베이스를 포함하여 clean room과 연결된 모든 데이터베이스가 삭제돼요. consumer.install_cleanroom을 호출하면 clean room을 언제든지 다시 설치할 수 있어요.

인자:

반환 값: (String) 성공 메시지예요.

예시:

CALL samooha_by_snowflake_local_db.consumer.uninstall_cleanroom($cleanroom_name);

Cross-cloud collaboration

다른 클라우드 리전에서 생성된 clean room을 설치해요. Learn more.

enable_laf_on_account

Schema:

LIBRARY

설명: 현재 계정에서 Cross-Cloud Auto-Fulfillment를 활성화해요. ACCOUNTADMIN 역할이 필요해요.

중요

먼저 SYSTEM$ENABLE_GLOBAL_DATA_SHARING_FOR_ACCOUNT를 호출하여 계정에 Cross-Cloud Auto-Fulfillment를 활성화해야 해요.


자동 이행에 대해 자세히 알아보기 및 자동 이행 권한 관리를 참조하세요.

인수: 없음

반환: (String) 성공 메시지.

예:

USE ROLE ACCOUNTADMIN;
CALL samooha_by_snowflake_local_db.library.enable_laf_on_account();

disable_laf_on_account

스키마:

LIBRARY

설명: 현재 계정에서 Cross-Cloud Auto-Fulfillment를 비활성화합니다. ACCOUNTADMIN 역할이 필요합니다.

중요

이 프로시저를 호출하기 전에 SYSTEM$ENABLE_GLOBAL_DATA_SHARING_FOR_ACCOUNT를 호출해야 합니다.

자동 이행에 대해 자세히 알아보기 및 자동 이행 권한 관리를 참조하세요.

인수: 없음

반환: (String) 성공 메시지.

예:

USE ROLE ACCOUNTADMIN;
CALL samooha_by_snowflake_local_db.library.disable_laf_on_account();

is_laf_enabled_for_cleanroom

스키마:

CONSUMER

설명: 이 클린룸에 대해 cross-cloud auto-fulfillment가 활성화되었는지 여부를 설명합니다. Cross-cloud auto-fulfillment는 계정 관리자가 구성해야 합니다.

인수:

반환: 이 클린룸에 대해 cross-cloud auto-fulfillment가 활성화되었는지 여부입니다.

예:

CALL samooha_by_snowflake_local_db.consumer.is_laf_enabled_for_cleanroom($cleanroom_name);

request_laf_cleanroom

스키마:

CONSUMER

설명: 다른 클라우드 리전에서 생성된 클린룸을 설치하기 위한 사전 요구 사항을 설정합니다. 이 프로시저를 호출하기 전에 consumer.install_cleanroom을 호출하면 실패합니다. 이 프로시저는 호출할 때마다 현재 상태를 반환합니다. 상태가 FULFILLED가 될 때까지 주기적으로 호출한 다음 consumer.install_cleanroom을 호출하세요. 상태가 FULFILLED가 되기까지 최대 10분이 걸릴 수 있습니다.

인수:

  • cleanroom_name (String) - 설치할 교차 리전 클린룸의 이름입니다.

  • provider_locator - (String) 이 클린룸을 생성한 공급자의 계정 로케이터입니다.

반환: (String) 요청의 상태 메시지입니다. 상태가 FULFILLED가 될 때까지 계속 호출하세요.

예:

CALL SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.consumer.request_laf_cleanroom(
  $cleanroom_name,$provider_locator);

setup_cleanroom_request_share_for_laf

스키마:

CONSUMER

설명: 특정 클린룸에 대해 지정된 공급자와의 cross-cloud 요청 공유를 활성화합니다. 이 기능은 교차 리전 클린룸이 요청 로그, 소비자 템플릿 요청, 공급자 실행 분석을 포함한 전체 기능을 갖추기 위해 필요합니다.

인수:

반환: (String) 성공 메시지.

예:

CALL samooha_by_snowflake_local_db.consumer.setup_cleanroom_request_share_for_laf(
      $cleanroom_name, $provider_account_name);

setup_activation_share_to_laf_consumer

스키마:

CONSUMER

설명: 서로 다른 클라우드 리전에 있는 공급자와 소비자 간의 공급자 활성화를 활성화합니다.

인수:

반환: (String) 성공 메시지.

예:

CALL samooha_by_snowflake_local_db.consumer.setup_activation_share_to_laf_consumer(
  'org1.locator1,org2.locator2'
);

공급자 실행 분석

공급자 실행 분석에 대한 자세한 내용은 공급자 실행 분석을 참조하세요.

is_provider_run_enabled

스키마:

LIBRARY

설명: 이 클린룸에서 공급자 실행 분석을 허용하는지 확인합니다. 공급자가 이 클린룸에서 분석을 실행하려면 먼저 소비자가 consumer.enable_templates_for_provider_run을 호출하여 명시적 권한을 부여해야 합니다.

인수:

반환: (String) 클린룸이 공급자 실행 분석을 지원하는지 여부에 대한 설명입니다.

예:

CALL samooha_by_snowflake_local_db.library.is_provider_run_enabled($cleanroom_name)

approve_template

스키마:

CONSUMER

설명: 지정된 클린룸에서 공급자 실행 분석을 위해 단일 템플릿을 승인합니다. 클린룸 공급자는 일반적으로 클린룸에서 특정 템플릿을 실행할 수 있는 권한을 요청하기 위해 사전에 사용자와 소통합니다. 공급자 실행 분석용으로 템플릿을 승인하기 전에 템플릿에 조인 및 열 정책을 설정해야 합니다:

  • 소비자 조인 정책이 없는 클린룸은 공급자가 모든 소비자 열에 조인할 수 있음을 의미합니다.

  • 소비자 열 정책이 없는 클린룸은 공급자가 모든 소비자 열을 프로젝션할 수 있음을 의미합니다.

  • 승인된 템플릿을 포함하지 않는 소비자 열 정책이 있는 클린룸은 공급자가 이 템플릿을 사용할 때 어떤 소비자 열도 프로젝션할 수 없음을 의미합니다.


consumer.approve_template은(는) 프로바이더가 지정된 clean room에서 지정된 템플릿을 원하는 만큼 실행할 수 있는 권한을 부여해요. 프로바이더가 provider.submit_analysis_request를 호출하면 마지막으로 승인된 템플릿 버전을 기준으로 실행돼요. 프로바이더가 나중에 템플릿을 수정해도 provider.submit_analysis_request를 호출하면 마지막으로 승인된 버전이 실행돼요.

여러 템플릿을 한 번에 승인하려면 provider.enable_templates_for_provider_run을 호출하면 돼요.

Arguments:

  • cleanroom_name (String) - 승인할 템플릿이 있는 clean room의 이름이에요.

  • template_name - (String) 지정된 clean room에서 프로바이더가 실행할 수 있는 템플릿의 이름이에요.

Returns: (String) 성공 메시지예요.

Example:

CALL samooha_by_snowflake_local_db.consumer.approve_template(
  $cleanroom_name,
  $template_name);

enable_templates_for_provider_run

Schema:

CONSUMER

Description: 요청된 clean room에서 프로바이더가 지정된 하나 이상의 템플릿을 실행할 수 있는 권한을 부여해요. 컨슈머가 이 프로시저를 호출하려면 먼저 프로바이더가 clean room에서 프로바이더 실행 분석(provider-run analysis)을 활성화해야 해요. 이 프로시저는 consumer.approve_template의 다중 템플릿 버전이며, 동일한 요구 사항과 제한 사항이 모두 적용돼요.

consumer.enable_templates_for_provider_run은(는) 프로바이더가 지정된 clean room에서 지정된 템플릿을 원하는 만큼 실행할 수 있는 권한을 부여해요. 프로바이더가 provider.submit_analysis_request를 호출하면 마지막으로 승인된 템플릿 버전을 기준으로 실행돼요. 프로바이더가 나중에 템플릿을 수정해도 provider.submit_analysis_request를 호출하면 마지막으로 승인된 버전이 실행돼요.

프로바이더는 활성화된 템플릿을 컨슈머의 계정에서 실행하며, 사용량은 컨슈머에게 청구돼요. 특정 템플릿을 실행할 때 프로바이더에게 허용되는 웨어하우스 유형이나 크기를 제한하려면 set_provider_run_configuration을 호출하면 돼요.

Arguments:

cleanroom_name (String) - 프로바이더가 분석을 실행할 수 있는 clean room의 이름이에요.

template_names - (Array of strings) 프로바이더가 실행할 수 있는 clean room의 템플릿 이름 하나 이상으로 구성된 배열이에요.

enable_differential_privacy - (Boolean) TRUE이면 template_names에 나열된 모든 템플릿에 대해 차등 프라이버시를 활성화해요. 차등 프라이버시는 clean room 자체에서 차등 프라이버시가 활성화된 경우에만 이 템플릿들에 대해 활성화할 수 있어요. clean room의 차등 프라이버시 상태는 consumer.is_dp_enabled를 호출하여 확인할 수 있어요. 프라이버시 설정은 consumer.set_privacy_settings를 호출하여 사용자 지정할 수 있어요. Learn more.

template_configuration - (Object, optional) template_names의 각 템플릿에 대한 추가 설정을 지정하는 선택적 객체예요. 이 객체는 키-값 쌍을 포함하며, 키는 template_names의 템플릿 이름이고 값은 프로바이더가 이 템플릿을 사용하는 방법에 대한 제한을 설정하는 객체예요. 템플릿 구성을 제공하지 않으면 template_names의 모든 템플릿에 대해 모든 속성의 기본값은 ‘ALL’이에요. 템플릿 구성을 제공하는 경우 template_names에 나열된 모든 템플릿에 대한 구성을 제공하고 해당 템플릿 구성의 모든 속성을 정의해야 해요. 템플릿에 허용되는 값은 consumer.set_provider_run_configuration을 호출하여 설정할 수도 있어요.

지원되는 속성은 다음과 같아요.

warehouse_type (String) - 프로바이더가 이 템플릿과 함께 사용할 수 있는 허용된 웨어하우스 유형이에요. 허용되는 값:

  • ALL - 모든 웨어하우스 유형을 허용해요.

  • STANDARD - 표준 웨어하우스만 허용해요.

  • SNOWPARK-OPTIMIZED - Snowpark 최적화 웨어하우스만 허용해요.

warehouse_size (Array of strings) - 이 웨어하우스 유형 및 템플릿과 함께 사용할 수 있는 하나 이상의 허용된 웨어하우스 크기예요. 허용되는 값은 WAREHOUSE_SIZE에 정의된 값 또는 해당 동의어(예: XLARGE 또는 X-LARGE)예요. ‘ALL’을 지정하면 모든 웨어하우스 크기를 허용해요.

Returns: (String) 성공 메시지예요.

Examples:

-- Simple example
CALL samooha_by_snowflake_local_db.consumer.enable_templates_for_provider_run(
  $cleanroom_name,
  ['prod_overlap_analysis'],
  FALSE);

-- Specify what types of warehouse the provider can use to run these templates.
CALL samooha_by_snowflake_local_db.CONSUMER.enable_templates_for_provider_run(
  $cleanroom_name,
  ['template1', 'template2', 'template3'],
  TRUE,
  {
    'template1': {'warehouse_type': 'ALL', 'warehouse_size': ['MEDIUM', 'LARGE']},
    'template2': {'warehouse_type': 'SNOWPARK-OPTIMIZED', 'warehouse_size': ['MEDIUM', 'XLARGE']},
    'template3': {'warehouse_type': 'STANDARD', 'warehouse_size': ['MEDIUM', 'XLARGE']}
  });

set_provider_run_configuration

Schema:

CONSUMER

Description: clean room에서 프로바이더가 지정된 템플릿을 실행하는 방법을 제어하는 설정을 템플릿에 적용해요. 컨슈머가 템플릿에 대한 구성을 제공하지 않으면 기본값이 적용돼요. 프로바이더는 컨슈머가 consumer.approve_template을 호출하여 프로바이더 실행 분석을 위해 템플릿을 승인할 때까지 템플릿을 실행할 수 없어요.

Arguments:

cleanroom_name (String) - clean room의 이름이에요. 이 clean room에 템플릿이 없으면 프로시저에서 오류가 발생해요. 템플릿은 아직 프로바이더 실행 분석을 위해 승인될 필요는 없지만, 컨슈머가 승인할 때까지 프로바이더는 템플릿을 실행할 수 없어요.



template_configuration - (Object) 이 클린 룸에서 공급자가 특정 템플릿을 실행하는 방법에 대한 제한을 제공하는 객체예요. 공급자가 실행하는 분석은 소비자 계정에서 실행되고 소비자에게 청구되므로, 소비자는 특정 템플릿에 사용할 수 있는 웨어하우스에 제한을 설정할 수 있어요. 구성 객체의 형태는 다음과 같아요.

{
  <template_name>: {
    'warehouse_type': '<warehouse_type>',
    'warehouse_size': '<warehouse_size>'
  }
}

다음 값들을 모두 제공해야 해요:

  • *template_name* - 객체 키는 템플릿 이름이에요. 이 구성은 해당 템플릿에 적용돼요. 이 템플릿은 클린 룸에 존재해야 해요.

  • *warehouse_type* (String) - 공급자가 이 템플릿을 실행하는 데 사용할 수 있는 웨어하우스 유형이에요. 허용되는 값은 다음과 같아요.

  • ALL - (기본값) 모든 웨어하우스 유형을 허용해요.

  • STANDARD - 표준 웨어하우스만 허용해요.

  • SNOWPARK-OPTIMIZED - Snowpark 최적화 웨어하우스만 허용해요. XLARGE 또는 X-LARGE)가 지원돼요.

  • ALL - (기본값) 모든 웨어하우스 크기가 허용돼요.

  • WAREHOUSE_SIZE에 정의된 모든 크기 또는 그 동의어(예: XLARGE 또는 X-LARGE)가 지원돼요.

반환: (String) 성공 메시지.

예시:

CALL samooha_by_snowflake_local_db.consumer.set_provider_run_configuration(
  $cleanroom_name,
  {
    'some_template': {
      'warehouse_type': 'STANDARD',
      'warehouse_size': ['MEDIUM', 'LARGE']
    }
  }
);

데이터 등록 및 등록 취소

데이터베이스, 스키마, 객체를 등록하고 등록을 취소하려면 다음 프로시저를 사용해요. 테이블과 뷰는 클린 룸에 연결하려면 먼저 등록되어 있어야 해요. 데이터베이스나 스키마를 등록하면 해당 데이터베이스나 스키마의 모든 객체가 등록돼요. 데이터 등록에 대한 자세한 내용은 Registering data를 참조해요.

register_db

스키마:

CONSUMER

설명: 계정의 데이터베이스를 등록하여 해당 데이터베이스의 모든 객체를 그 계정의 클린 룸에 연결할 수 있게 해요. 더 세밀한 제어가 필요하면 register_schema, register_managed_access_schema, 또는 register_object를 대신 호출할 수 있어요. 데이터베이스를 등록한 후에 추가된 객체는 연결되지 않을 수 있어요. 이 경우 데이터베이스를 다시 등록하거나(또는 객체 자체를 등록하거나) 해야 해요.

이 프로시저를 실행하려면 데이터베이스에 대한 MANAGE GRANTS 권한이 있어야 해요.

인수:

  • db_name - (String) 이 계정에 등록할 데이터베이스 이름이에요.

반환: (String) 성공 메시지.

예시:

USE ROLE <ROLE_WITH_MANAGE_GRANTS>;
CALL samooha_by_snowflake_local_db.consumer.register_db('SAMOOHA_SAMPLE_DATABASE');

register_schema

스키마:

LIBRARY

설명: 계정의 스키마를 등록하여 해당 스키마의 모든 객체를 그 계정의 클린 룸에 연결할 수 있게 해요. 더 세밀한 제어가 필요하면 register_object를 대신 호출할 수 있어요. 스키마를 등록한 후에 추가된 객체는 연결되지 않을 수 있어요. 이 경우 스키마를 다시 등록하거나(또는 객체 자체를 등록하거나) 해야 해요.

관리형 액세스 스키마(즉, WITH MANAGED ACCESS 매개 변수로 생성된 스키마)를 등록하려면 대신 library.register_managed_access_schema를 사용해요.

인수:

  • schema_names - (문자열 배열) 등록할 정규화된 스키마 배열이에요.

반환: (String) 성공 메시지.

예시:

USE ROLE <ROLE_WITH_MANAGE_GRANTS>;
CALL samooha_by_snowflake_local_db.library.register_schema(
  ['SAMOOHA_SAMPLE_DATABASE.DEMO']
);

register_managed_access_schema

스키마:

LIBRARY

설명: 계정의 관리형 액세스 스키마를 등록하여 해당 스키마의 모든 객체를 그 계정의 클린 룸에 연결할 수 있게 해요. 더 세밀한 제어가 필요하면 register_object를 대신 호출할 수 있어요. 스키마를 등록한 후에 추가된 객체는 연결되지 않을 수 있어요. 이 경우 스키마를 다시 등록하거나(또는 객체 자체를 등록하거나) 해야 해요.

인수:

  • schema_names - (문자열 배열) 등록할 정규화된 관리형 스키마 배열이에요.

반환: (String) 성공 메시지.

예시:

USE ROLE <ROLE_WITH_MANAGE_GRANTS>;
CALL samooha_by_snowflake_local_db.library.register_managed_access_schema(
  ['SAMOOHA_SAMPLE_DATABASE.DEMO']
);

register_objects

스키마:

LIBRARY

설명: 모든 유형의 테이블과 뷰에 대한 액세스 권한을 클린 룸에 부여하여 consumer.link_datasets를 호출해 클린 룸에 연결할 수 있게 해요. library.register_schema, library.register_managed_access_schema, 또는 consumer.register_db를 호출하여 더 넓은 범위의 객체 그룹을 등록할 수 있어요. 이 프로시저를 실행하려면 데이터베이스에 대한 MANAGE GRANTS 권한이 있어야 해요.

인수:

  • object_names - (배열) 정규화된 객체 이름 배열이에요. 이 객체들은 그런 다음 클린 룸에 연결할 수 있어요.

반환: (String) 성공 메시지.

예시

테이블과 뷰를 등록하려면:

USE ROLE <ROLE_WITH_MANAGE_GRANTS>;
CALL samooha_by_snowflake_local_db.library.register_objects(
  [
    'SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS',
    'SAMOOHA_SAMPLE_DATABASE.INFORMATION_SCHEMA.FIELDS'
  ]
);

enable_external_tables_on_account

스키마:

LIBRARY

설명: 이 계정의 모든 클린 룸에서 Iceberg 또는 외부 테이블을 사용할 수 있게 해요. 공급자와 소비자 계정 모두에서 ACCOUNTADMIN이 호출해야 Iceberg 또는 외부 테이블을 양쪽 계정에서 연결할 수 있어요. 이 기능을 이 계정의 특정 클린 룸으로 제한하려면 대신 enable_external_tables_for_cleanroom을 호출해요.

인수: 없음

반환: (String) 성공 메시지.

예시:

USE ROLE ACCOUNTADMIN;
CALL samooha_by_snowflake_local_db.library.enable_external_tables_on_account();

enable_external_tables_for_cleanroom

스키마:

CONSUMER

설명: 소비자가 이 계정의 지정된 클린 룸에 Iceberg 또는 외부 테이블을 연결할 수 있게 해요. 이 계정의 모든 클린 룸에서 Iceberg 및 외부 테이블을 허용하려면 대신 enable_external_tables_on_account를 호출해요.

인수:

  • cleanroom_name (String) - 공급자가 Iceberg 테이블 또는 외부 테이블을 연결할 수 있는 클린 룸의 이름이에요.


반환: (String) 성공 메시지예요. 성공하면 보안 스캔을 실행하고, 보안 스캔이 성공하면 생성되는 패치 번호도 제공해요.

예제:

CALL samooha_by_snowflake_local_db.provider.enable_external_tables_for_cleanroom(
  $cleanroom_name);

unregister_db

스키마:

LIBRARY

설명: SAMOOHA_APP_ROLE 역할과 Snowflake Data Clean Room 네이티브 애플리케이션에 부여된 데이터베이스 수준 권한을 제거해요. 이 데이터베이스에서 clean room에 연결된 모든 데이터는 이 계정에서 더 이상 액세스할 수 없게 돼요. 이 프로시저를 실행하려면 데이터베이스에 대한 MANAGE GRANTS 권한이 있어야 해요.

인자:

  • db_name - (String) 등록을 해제할 데이터베이스의 이름이에요.

반환: (String) 성공 메시지예요.

예제:

USE ROLE <ROLE_WITH_MANAGE_GRANTS>;
CALL samooha_by_snowflake_local_db.library.unregister_db('SAMOOHA_SAMPLE_DATABASE');

unregister_schema

스키마:

LIBRARY

설명: 하나 이상의 스키마 등록을 해제해서 사용자가 테이블과 뷰를 clean room에 연결하지 못하도록 해요.

관리형 액세스 스키마(즉, WITH MANAGED ACCESS 파라미터로 생성된 스키마)의 등록을 해제하려면 library.unregister_managed_access_schema를 대신 사용해요. 이 프로시저를 실행하려면 데이터베이스에 대한 MANAGE GRANTS 권한이 있어야 해요.

인자:

  • schema_names - (Array of strings) 등록을 해제할 스키마의 정규화된 이름이에요.

반환: (String) 성공 메시지예요.

예제:

USE ROLE <ROLE_WITH_MANAGE_GRANTS>;
CALL samooha_by_snowflake_local_db.library.unregister_schema(
  ['SAMOOHA_SAMPLE_DATABASE.PUBLIC', 'MY_DB.MY_SCH']
);

unregister_managed_access_schema

스키마:

LIBRARY

설명: 하나 이상의 관리형 액세스 스키마 등록을 해제해서 사용자가 테이블과 뷰를 clean room에 연결하지 못하도록 해요.

인자:

  • schema_names - (Array of strings) 등록을 해제할 스키마의 정규화된 이름이에요.

반환: (String) 성공 메시지예요.

예제:

CALL samooha_by_snowflake_local_db.library.unregister_managed_access_schema(
  ['SAMOOHA_SAMPLE_DATABASE.DEMO']
);

unregister_objects

스키마:

LIBRARY

설명: 모든 유형의 테이블과 뷰에 대한 clean room 액세스를 취소해요. 이 계정에서 관리하는 모든 clean room의 모든 사용자는 해당 객체를 더 이상 사용할 수 없게 돼요.

인자:

  • object_names - (Array) 액세스를 취소할 정규화된 객체 이름의 배열이에요.

반환: (String) 성공 메시지예요.

예제

테이블과 뷰의 등록을 해제하려면:

USE ROLE <ROLE_WITH_MANAGE_GRANTS>;
CALL samooha_by_snowflake_local_db.library.unregister_objects(
  ['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS','MY_DB.MY_SCH.MY_VIEW']
);

데이터셋 연결 및 연결 해제

데이터셋이 등록된 후에는 해당 데이터셋의 테이블이나 뷰를 특정 clean room에 연결할 수 있어요. 또한 특정 clean room에서 테이블이나 뷰의 연결을 해제해서 해당 clean room에서 그 데이터에 대한 액세스를 제거할 수도 있어요.

link_datasets

스키마:

CONSUMER

설명: 테이블이나 뷰를 clean room에 연결해서, 지정한 조인 및 열 정책에 따라 해당 clean room 내 템플릿이 테이블에 액세스할 수 있게 해요.

데이터셋에 다른 데이터베이스에 저장된 Snowflake 정책이 포함된 경우, 데이터를 clean room에 연결하려면 사용자(또는 clean room 관리자)가 grant your clean room access to that policy database를 따라 clean room에 해당 정책 데이터베이스에 대한 액세스 권한을 부여해야 해요.

인자:

  • cleanroom_name (String) - 데이터를 연결할 clean room의 이름이에요.

  • full_tables - (Array of strings) clean room에 노출할 정규화된 테이블 또는 뷰 이름의 목록이에요. 이러한 객체는 먼저 적절한 registration method로 등록(clean room 환경에서 사용할 수 있도록)되어 있어야 해요.

참고

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

반환: (String) 성공 메시지예요.

예제:

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

unlink_datasets

스키마:

CONSUMER

설명: 지정한 clean room에서 모든 사용자에 대해 지정된 테이블 또는 뷰에 대한 액세스를 제거해요. 이 기능은 사용자가 clean room에 연결한 데이터에 대해서만 작동해요.

인자:

  • cleanroom_name (String) - 액세스를 제거할 clean room의 이름이에요.

  • tables_list - (Array of strings) 액세스를 차단할 정규화된 테이블 또는 뷰 이름의 목록이에요.

반환: (String) 성공 메시지예요.

예제:

CALL samooha_by_snowflake_local_db.consumer.unlink_datasets(
  $cleanroom_name,
  ['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS', 'MYDB.MYSCH.EXPOSURES']);

view_consumer_datasets

스키마:

CONSUMER

설명: 모든 consumer가 지정된 clean room에 연결한 모든 테이블과 뷰를 확인해요.

인자:

반환: 지정된 clean room에 연결된 객체의 테이블과 각 객체에 대한 clean room 내부 뷰 이름이에요.

예제:

CALL samooha_by_snowflake_local_db.consumer.view_consumer_datasets($cleanroom_name);

정책 관리 및 보기

설치한 clean room에서 데이터에 대한 정책은 Manage policies에서 관리할 수 있어요.

set_join_policy

스키마:

CONSUMER

설명: 지정된 clean room에서 다른 사용자가 템플릿을 실행할 때 조인할 수 있는 열을 지정해요.

이 함수를 호출하면 이전 정책이 새 정책으로 완전히 대체돼요.

와일드카드가 포함된 쿼리는 조인 정책을 우회할 수 있으므로 분석 템플릿을 설계할 때 신중하게 결정해야 해요.



Clean Room 정책에 대해 자세히 알아보세요: Understanding Snowflake Data Clean Room policies.

인수:

  • cleanroom_name (String) - 조인 정책이 적용되는 Clean Room의 이름입니다.

  • table_col_names - (String array) 조인할 수 있는 열의 정규화된 이름입니다. 형식은 {database name}.{schema name}:{column name}입니다.

반환 값: (String) 성공 메시지입니다.

예:

CALL samooha_by_snowflake_local_db.consumer.set_join_policy(
  $cleanroom_name,
  ['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:HASHED_EMAIL', 'MYDB.MYSCH.EXPOSURES:HASHED_EMAIL']
);

view_join_policy

스키마:

CONSUMER

설명: 이 Clean Room에서 내 데이터에 대한 열 정책을 보여줍니다.

Clean Room 정책에 대해 자세히 알아보세요: Understanding Snowflake Data Clean Room policies.

인수:

반환 값: 조인 정책(테이블)

예:

CALL samooha_by_snowflake_local_db.consumer.view_join_policy($cleanroom_name);

view_provider_join_policy

스키마:

CONSUMER

설명: 지정된 Clean Room에서 consumer가 조인할 수 있는 provider 열을 보여줍니다.

Clean Room 정책에 대해 자세히 알아보세요: Understanding Snowflake Data Clean Room policies.

인수:

반환 값: (Table) 조인 정책입니다.

예:

CALL samooha_by_snowflake_local_db.consumer.view_provider_join_policy($cleanroom_name);

set_column_policy

스키마:

CONSUMER

설명: 다른 협업자가 실행하는 템플릿에서 내 데이터의 어떤 열을 프로젝션할 수 있는지 지정합니다.

이 함수를 호출하면 이전 정책이 새 정책으로 완전히 대체됩니다.

일반적으로 이러한 데이터가 프로젝션되는 것을 원하지 않으므로 ID 열이나 이메일과 같은 민감한 열에는 열 정책을 설정하지 마세요.

와일드카드가 포함된 쿼리는 이러한 검사로 감지되지 않을 수 있으므로 분석 템플릿을 설계할 때 주의하세요.

Clean Room 정책에 대해 자세히 알아보세요: Understanding Snowflake Data Clean Room policies.

인수:

  • cleanroom_name (String) - 열 정책이 적용되는 Clean Room의 이름입니다.

  • analysis_table_cols - (String array) 프로젝션할 수 있는 열의 정규화된 이름입니다. 형식은 {database name}.{schema name}:{column name}입니다.

반환 값: (String) 성공 메시지입니다.

예:

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'
  ]
);

view_column_policy

스키마:

CONSUMER

설명: 지정된 Clean Room에서 내 열 정책을 보여줍니다. provider의 열 정책을 보려면 consumer.view_provider_column_policy를 호출하세요.

Clean Room 정책에 대해 자세히 알아보세요: Understanding Snowflake Data Clean Room policies.

인수:

반환 값: (Table) Clean Room에 있는 모든 consumer 열 정책에 대한 정보입니다.

예:

CALL samooha_by_snowflake_local_db.consumer.view_column_policy($cleanroom_name);

view_provider_column_policy

스키마:

CONSUMER

설명: provider의 열 정책을 보여줍니다.

Clean Room 정책에 대해 자세히 알아보세요: Understanding Snowflake Data Clean Room policies.

인수:

반환 값: 열 정책(테이블)

예:

CALL samooha_by_snowflake_local_db.consumer.view_provider_column_policy($cleanroom_name);

템플릿

다음 프로시저를 사용하면 Clean Room에서 템플릿을 작업할 수 있습니다.

view_template_definition

스키마:

CONSUMER

설명: 지정된 템플릿의 원시 JinjaSQL을 봅니다. 템플릿이 is_obfuscated 인수를 적용하여 was obscured된 경우 템플릿 소스 코드를 볼 수 없습니다.

인수:

  • cleanroom_name (String) - 템플릿이 있는 Clean Room의 이름입니다.

  • template_name - (String) 볼 템플릿의 이름입니다.

반환 값: (String) 템플릿 정의입니다.

예:

CALL samooha_by_snowflake_local_db.consumer.view_template_definition(
  $cleanroom_name,
  'prod_overlap_analysis');

get_arguments_from_template

스키마:

CONSUMER

설명: 템플릿에서 사용하는 인수 목록을 가져옵니다. consumer.run_analysis를 호출할 때 이러한 인수에 대한 값을 템플릿에 전달할 수 있습니다.

인수:

  • cleanroom_name (String) - 템플릿이 있는 Clean Room의 이름입니다.

  • template_name - (String) 인수를 반환할 템플릿의 이름입니다.

반환 값: (Table) 인수 목록 및 사양입니다.

예:

CALL samooha_by_snowflake_local_db.consumer.get_arguments_from_template(
  $cleanroom_name,
  'prod_overlap_analysis');

템플릿 체인

다음 프로시저를 사용하면 Clean Room에서 template chains을 작업할 수 있습니다.

view_added_template_chains

스키마:

CONSUMER

설명: 지정된 Clean Room에 정의된 모든 템플릿 체인을 나열합니다.



Arguments:

  • cleanroom_name (String) - 템플릿 체인을 나열할 clean room의 이름입니다.

Returns: (Table) 지정된 clean room에 있는 모든 템플릿 체인에 대한 정보입니다.

Example:

CALL samooha_by_snowflake_local_db.consumer.view_added_template_chains(
  $cleanroom_name);

view_template_chain_definition

Schema:

CONSUMER

Description: 지정된 템플릿 체인의 속성을 반환합니다.

Arguments:

  • cleanroom_name (String) - 설명할 템플릿 체인이 있는 clean room의 이름입니다.

  • template_chain_name - (String) 설명할 템플릿 체인의 이름입니다.

Returns: (String) 지정된 템플릿 체인의 정의입니다.

Example:

CALL samooha_by_snowflake_local_db.consumer.view_template_chain_definition(
  $cleanroom_name,
  'insights_chain');

Consumer 실행 분석

다음 프로시저는 지정된 템플릿을 기반으로 분석 또는 활성화를 실행합니다.

run_analysis

Schema:

CONSUMER

Description: 템플릿 또는 템플릿 체인을 사용하여 분석을 실행하고 결과 테이블을 반환합니다.

중요

  • differential privacy가 활성화된 경우, 이 템플릿에 대한 예산 한도에 도달하면 쿼리가 실패할 수 있습니다.

  • is_obfuscated 인수를 적용하여 템플릿이 was obscured 상태인 경우, 템플릿을 실행하려면 Snowflake Enterprise Edition 이상을 사용해야 합니다.

Arguments:

cleanroom_name (String) - 분석을 실행할 clean room의 이름입니다.

template_name - (String) clean room에서 실행할 템플릿 또는 템플릿 체인의 이름입니다. 이 템플릿은 provider 또는 consumer가 clean room에 추가했어야 합니다.

consumer_tables - (Array of strings) 정규화된 consumer 테이블 이름의 배열입니다. 이 값들은 my_table 템플릿 변수에 할당됩니다. 이 테이블들은 이미 clean room에 연결되어 있어야 합니다. 사용 가능한 테이블을 보려면 consumer.view_consumer_datasets를 호출하세요.

provider_tables - (Array of strings) 정규화된 provider 테이블 이름의 배열입니다. 이 값들은 source_table 템플릿 변수에 할당됩니다. 이 테이블들은 clean room에 연결되어 있어야 합니다. 사용 가능한 테이블을 보려면 consumer.view_provider_datasets를 호출하세요.

analysis_arguments - (Object) 템플릿에 전달되는 키-값 쌍을 가진 객체입니다. 템플릿은 키 이름으로 변수에 접근할 수 있습니다. {'age': 20}을 전달하면 템플릿은 해당 값을 {{age}}로 접근합니다. 필요한 값이 없으면 빈 객체를 전달하세요. 어떤 값이 필요한지 확인하려면 consumer.view_template_definition을 호출하여 해당 템플릿을 살펴보세요. 템플릿을 검토하여 사용된 열 이름을 정규화해야 하는지 확인하세요. 템플릿에서 테이블이 p 또는 c로 별칭이 지정된 경우 열 이름에 소문자 p 및 c 테이블 별칭을 사용하세요.

이 객체에는 선택적인 예약 값이 하나 있습니다:

use_cache - (Boolean, optional) 동일한 쿼리에 대해 캐시된 결과를 사용할지 여부입니다. 기본값은 FALSE입니다.

Returns: (Table) 쿼리 결과입니다.

Example:

CALL samooha_by_snowflake_local_db.consumer.run_analysis(
  $cleanroom_name,
  'prod_overlap_analysis',
  ['DB1.MYDATA.CONVERSIONS'],  -- Consumer tables
  ['MYDB.MYSCH.EXPOSURES'],    -- Provider tables
  object_construct(
    'max_age', 30
  )
);

활성화

다음 프로시저는 activation, 즉 결과를 consumer 또는 provider의 Snowflake 계정에 저장하는 것을 관리합니다. API를 사용하여 제3자 계정으로 데이터를 활성화할 수 없습니다.

view_activation_policy

Schema:

CONSUMER

Description: 지정된 clean room에서 consumer의 활성화 정책을 표시합니다.

Arguments:

Returns: (Table) 지정된 clean room에서 consumer의 활성화 정책입니다.

Example:

CALL samooha_by_snowflake_local_db.consumer.view_activation_policy($cleanroom_name);

view_external_activation_history

Schema:

LIBRARY

Description: 현재 계정의 활성화 요청 기록을 봅니다.

Arguments: 없음

Returns: 활성화 요청의 세부 정보와 상태가 포함된 테이블입니다.

Example:

CALL samooha_by_snowflake_local_db.library.view_external_activation_history();

set_activation_policy

Schema:

CONSUMER

Description: 활성화가 허용되어야 하는 열을 나타냅니다.

사용자의 활성화 정책은 다른 사용자의 쿼리에만 적용되며, 사용자 자신의 쿼리에는 적용되지 않습니다.

이 함수를 호출하면 이전 정책이 새 정책으로 완전히 대체됩니다.

clean room 정책에 대해 자세히 알아보기: Understanding Snowflake Data Clean Room policies.

Arguments:

  • cleanroom_name (String) - 활성화 정책을 설정할 clean room의 이름입니다.

  • columns - (Array) 활성화할 수 있는 사용자 데이터 열의 이름입니다. 형식은 {template name}:{database name}.{schema name}.{table name}:*column_name*입니다.

Returns: (String) 성공 메시지입니다.

Example:

CALL samooha_by_snowflake_local_db.consumer.set_activation_policy(
  $cleanroom_name,
  [
    'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE_NAME.DEMO.CUSTOMERS:HASHED_EMAIL',
    'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE_NAME.DEMO.CUSTOMERS:REGION_CODE' ]);

approve_provider_activation_consent


스키마:

CONSUMER

설명: 공급자의 요청을 승인하여 공급자 활성화를 허용해요. 공급자 활성화는 결과를 공급자의 Snowflake 계정으로 푸시할 수 있는 기능이에요.

인자:

  • cleanroom_name (String) - 공급자가 템플릿을 실행하도록 요청하는 clean room의 이름이에요.

  • activation_template_name - (String) 공급자가 실행하려는 활성화 템플릿의 이름이에요.

반환 값: (String) 성공 메시지예요. 이 프로시저는 공급자가 지정된 템플릿으로 이 clean room에서 provider.request_provider_activation_consent를 호출하지 않은 경우 실패해요.

예:

CALL samooha_by_snowflake_local_db.consumer.approve_provider_activation_consent(
  $cleanroom_name,
  'activation_my_template');

run_activation

스키마:

CONSUMER

설명: 결과를 소비자 또는 공급자의 Snowflake 계정으로 다시 푸시하는 템플릿을 실행해요. consumer_direct_activation 인자는 이 작업이 소비자 활성화인지 공급자 활성화인지를 결정해요.

인자:

  • cleanroom_name (String) - 활성화를 실행할 clean room의 이름이에요.

  • segment_name - (String) 이 활성화 실행으로 생성되는 행에 레이블을 지정하는 임의의 문자열이에요. 각 활성화 실행은 기존 결과 테이블에 새 행을 추가해요. 특정 실행 결과를 필터링할 수 있도록 이 프로시저를 호출할 때마다 이 필드에 고유한 문자열을 제공해요.

  • template_name - (String) 호출할 활성화 템플릿의 이름이에요.

  • consumer_tables - (Array of strings) 템플릿에 전달할 정규화된 소비자 테이블 이름의 배열이에요.

  • provider_tables - (Array of strings) 템플릿에 전달할 정규화된 공급자 테이블 이름의 배열이에요.

  • activation_arguments - (Object) 템플릿에 전달할 키-값 인자 집합이에요.

  • consumer_direct_activation - (Boolean, optional) TRUE이면 결과를 소비자 계정으로 다시 푸시하고, FALSE이면 결과를 공급자에게 보내요. 기본값은 FALSE예요.

반환 값: (String) 성공 메시지예요.

예:

-- Run a consumer activation, as specified by the final TRUE argument.
SET segment_name = 'my_activation_segment';
CALL samooha_by_snowflake_local_db.consumer.run_activation(
  $cleanroom_name,
  $segment_name,
  $template_name,
  ['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS'],
  ['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS'],
  object_construct(
    'c_join_col', 'c.hashed_email',
    'p_join_col', 'p.hashed_email'
  ),
  TRUE);

dcr_health.provider_run_provider_activation_history

설명: 지정된 clean room에 대한 공급자 활성화 요청 기록을 반환해요. 공급자와 소비자 모두가 시작한 공급자 활성화 요청이 표시돼요. 이 프로시저는 공급자 활성화 문제를 디버깅하는 데 도움이 되는 추가 정보를 제공해요.

인자:

  • cleanroom_name (String) - 활성화가 요청된 clean room의 이름이에요. 이 clean room의 공급자 또는 소비자여야 해요.

반환 값: (Table) - 각 요청에 대한 정보가 포함된 활성화 요청 목록이에요. 템플릿 및 세그먼트 이름, 상태, 소비자의 계정 로케이터, 요청에서 반환된 오류 메시지가 포함돼요.

예:

CALL samooha_by_snowflake_local_db.dcr_health.provider_run_provider_activation_history(
  $cleanroom_name);

Consumer-defined templates

다음 API를 사용하면 clean room에 소비자 정의 템플릿을 추가할 수 있어요. 자세한 내용은 consumer-written templates을(를) 참조하세요.

create_template_request

스키마:

CONSUMER

설명: clean room의 공급자에게 요청을 보내서 사용자 지정 템플릿을 승인해 달라고 요청해요. 그러면 해당 템플릿을 clean room에 추가할 수 있어요. Consumer-written custom templates을(를) 참조하세요.

인자:

  • cleanroom_name (String) - 템플릿이 추가되는 clean room의 이름이에요.

  • template_name - (String) 추가할 템플릿의 이름이에요. 반드시 모두 소문자, 숫자, 공백 또는 밑줄이어야 해요. 활성화 템플릿 이름은 “activation”으로 시작해야 해요.

  • template_definition - (String) JinjaSQL 템플릿이에요. Learn the template syntax.

반환 값: (String) 성공 메시지예요.

예:

CALL samooha_by_snowflake_local_db.consumer.create_template_request(
  $cleanroom_name,
  $template_name,
  $$
  SELECT
      identifier({{ dimensions[0] | column_policy }})
  FROM
      identifier({{ my_table[0] }}) c
    INNER JOIN
      identifier({{ source_table[0] }}) p
        ON
          c.identifier({{ consumer_id  }}) = p.identifier({{ provider_id | join_policy }})
        {% if where_clause %} where {{ where_clause | sqlsafe | join_and_column_policy }} {% endif %};
  $$);

get_sql_jinja

스키마:

CONSUMER

설명: JinjaSQL 템플릿을 SQL 문으로 평가해요. 이 프로시저는 사용자 지정 템플릿을 개발할 때 주어진 매개변수 집합으로 처리한 후 템플릿이 어떻게 렌더링되는지 확인하는 데 사용해요.

이 프로시저는 표준 JinjaSQL 문만 처리할 수 있어요. join_policy 또는 column_policy와 같은 clean room 확장 기능은 처리할 수 없어요.

인자:

  • template_string - (String) 처리할 JinjaSQL 코드예요. 표준 JinjaSQL만 지원돼요.

  • arguments - (Object) 필드 이름이 템플릿에서 사용되는 변수에 해당하는 객체예요.

반환 값: (String) 제공된 변수 값으로 제출된 템플릿에서 생성된 SQL 문이에요.

예:

CALL samooha_by_snowflake_local_db.consumer.get_sql_jinja(
$$
SELECT COUNT(*), IDENTIFIER({{ group_by_col }})
  FROM IDENTIFIER({{ my_table | sqlsafe }})
  INNER JOIN IDENTIFIER({{ source_table | sqlsafe }})
  ON IDENTIFIER({{ consumer_join_col }}) = IDENTIFIER({{ provider_join_col }})
  GROUP BY IDENTIFIER({{ group_by_col }});
$$,
object_construct(
'group_by_col', 'city',
'consumer_join_col', 'hashed_email',
'provider_join_col', 'hashed_email',
'my_table', 'mydb.mysch.t1',
'source_table', 'mydb.mysch.t2'));

응답:

SELECT COUNT(*), IDENTIFIER('city')
  FROM IDENTIFIER(mydb.mysch.t1)
  INNER JOIN IDENTIFIER(mydb.mysch.t2)
  ON IDENTIFIER('hashed_email') = IDENTIFIER('hashed_email')
  GROUP BY IDENTIFIER('city');

generate_python_request_template

스키마:

CONSUMER

설명: 사용자 지정 Python 코드가 포함된 소비자 clean room 템플릿을 생성해요. 생성된 템플릿에는 Python 코드와 JinjaSQL 템플릿을 위한 자리 표시자가 포함돼요. 최종 템플릿을 consumer.create_template_request에 전달해요.

For more information about consumer-defined templates, see Consumer-written custom templates.

인수:

  • function_name - (String) 템플릿이 여러분의 함수를 호출할 때 사용하는 함수 이름입니다.

  • arguments - (Array of String pairs) function_name 함수에 필요한 인수 배열입니다. 각 요소는 공백으로 구분된 쌍으로, 인수 이름과 해당 Snowflake SQL 데이터 타입을 나타냅니다. 예: ['size INT', 'start_date DATE'].

  • packages - (Array of strings) Python 코드에 필요한 패키지 이름 배열입니다. 없으면 빈 배열을 지정하세요. See the full list of supported packages. 예: ['pandas','numpy'].

  • imports - 지원되지 않음: 사용하지 마세요.

  • rettype - (String) 함수의 Snowflake SQL 반환 타입입니다. 예: INTEGER, VARCHAR.

  • handler - (String) Python 코드에서 주요 핸들러 함수의 이름입니다. 일반적으로 'main'입니다.

  • code - (String) Python 코드 구현입니다. import를 포함하고 지정된 핸들러가 import에 정의된 경우, 이 값은 빈 문자열일 수 있습니다.

반환 값: (String) JinjaSQL 템플릿의 자리 표시자가 포함된 Python UDF를 반환합니다. 템플릿 문자열을 consumer.create_template_request에 전달하기 전에 중첩된 $$ 또는 작은따옴표 *‘*를 올바르게 이스케이프해야 합니다. Consumer-submitted code를 읽어보세요.

예:

간단한 Python 예제로 헬퍼 함수를 호출해 보세요.

CALL SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.CONSUMER.GENERATE_PYTHON_REQUEST_TEMPLATE(
  'my_func',                         -- SQL should use this name to call your function.
  ['data VARIANT', 'index INTEGER'], -- Arguments and types for the function.
  ['pandas', 'numpy'],               -- Standard libraries used.
  [],                                -- Reserved.
  'INTEGER',                         -- SQL return type.
  'main',                            -- Standard main handler.
  $$
  import pandas as pd
  import numpy as np

  def main(data, index):
      df = pd.DataFrame(data)  # you can do something with df but this is just an example
      return np.random.randint(1, 100)
      $$
  );

다음 예제는 생성된 코드를 보여줍니다. <INSERT SQL TEMPLATE HERE>를 템플릿 JinjaSQL 코드로 바꾸세요.

BEGIN

-- First define the Python UDF
CREATE OR REPLACE FUNCTION CLEANROOM.my_func(data VARIANT, index INTEGER)
RETURNS INTEGER
LANGUAGE PYTHON
RUNTIME_VERSION = 3.10
PACKAGES = ('pandas', 'numpy')

HANDLER = 'main'
AS $$
import pandas as pd
import numpy as np

def main(data, index):
    df = pd.DataFrame(data)  # you can do something with df but this is just an example
    return np.random.randint(1, 100)
    $$;

-- Then define and run the SQL query
LET SQL_TEXT varchar := $$<INSERT SQL TEMPLATE HERE>$$;

-- Run the query and return the result
LET RES resultset := (EXECUTE IMMEDIATE :SQL_TEXT);
RETURN TABLE(RES);

END;

list_template_requests

스키마:

CONSUMER

설명: 소비자가 클린룸에 템플릿을 추가하기 위해 만든 모든 요청을 표시합니다.

인수:

  • cleanroom_name (String) - 템플릿 요청을 나열할 클린룸입니다.

반환 값: 다음 열이 포함된 테이블입니다:

  • request_id - 클린룸 시스템에서 생성된 요청의 ID입니다.

  • provider_identifier - 공급자의 계정 로케이터입니다.

  • template_name - 소비자가 요청에서 제공한 템플릿 이름입니다.

  • template_definition - 소비자가 클린룸에 추가하도록 요청한 템플릿의 소스 코드입니다.

  • request_status - 요청 상태: PENDING, APPROVED 또는 REJECTED입니다.

  • reason - 요청 상태가 REJECTED인 경우, 공급자는 여기에 거부 사유를 제공해야 합니다.

예:

CALL samooha_by_snowflake_local_db.consumer.list_template_requests($cleanroom_name);

클린룸 메타데이터 조회 메서드

다음 메서드는 클린룸의 관련 속성을 보여줍니다.

describe_cleanroom

스키마:

CONSUMER

설명: 지정된 클린룸에 대한 주요 정보(템플릿, 데이터 세트, 정책 포함)의 요약을 제공합니다. is_obfuscated 인수를 적용하여 템플릿이 was obscured된 경우, 템플릿 이름을 보려면 Snowflake Enterprise Edition 이상을 사용해야 합니다.

인수:

반환 값: (String) 클린룸에 대한 설명입니다.

예:

CALL samooha_by_snowflake_local_db.consumer.describe_cleanroom($cleanroom_name);

view_provider_datasets

스키마:

CONSUMER

설명: 공급자가 클린룸에 추가한 모든 데이터 세트를 나열합니다.

인수:

반환 값: (Table) 공급자가 추가한 데이터 세트의 테이블입니다. 여기서 반환된 테이블 이름을 쿼리에서 사용하세요.

예:

CALL samooha_by_snowflake_local_db.consumer.view_provider_datasets($cleanroom_name);

view_added_templates

스키마:

CONSUMER

설명: 클린룸의 모든 템플릿을 나열합니다. is_obfuscated 인수를 적용하여 템플릿이 was obscured된 경우, 템플릿을 보려면 Snowflake Enterprise Edition 이상을 사용해야 합니다.

인수:

반환 값: 이 클린룸의 템플릿 목록과 각 템플릿의 소스 코드입니다(공급자가 템플릿을 난독화하지 않은 경우).

예:

CALL samooha_by_snowflake_local_db.consumer.view_added_templates($cleanroom_name);

is_consumer_run_enabled

스키마:

LIBRARY

설명: 지정된 클린룸에서 소비자 실행 분석이 활성화되어 있는지 확인합니다. 기본적으로 활성화되어 있지만, 클린룸 공급자가 비활성화할 수 있습니다.

인수:

반환 값: (String) 클린룸이 소비자 실행 분석을 허용하는지 여부입니다.

예:

CALL samooha_by_snowflake_local_db.library.is_consumer_run_enabled($cleanroom_name);

view_cleanrooms

스키마:

CONSUMER

설명: 이 계정이 참여(설치)했거나 참여할 수 있는 모든 클린룸을 나열합니다. 설치된 클린룸만 보려면 consumer.view_installed_cleanrooms를 실행하세요. 이 계정에서 생성한 클린룸을 보려면 provider.view_cleanrooms를 호출하세요.

인수: 없음



반환: (Table) 이 계정에 설치되었거나 초대된 모든 clean room입니다.

예시:

CALL samooha_by_snowflake_local_db.consumer.view_cleanrooms();

view_installed_cleanrooms

스키마:

CONSUMER

설명: 이 계정에 설치된(조인된) 모든 clean room을 나열합니다. 조인된 clean room과 조인되지 않은 clean room을 모두 보려면 consumer.view_cleanrooms를 호출하세요. 이 계정에서 생성된 모든 clean room을 보려면 provider.view_cleanrooms를 호출하세요.

인자: 없음

반환: (Table) 이 계정에 설치된 clean room입니다.

예시:

CALL samooha_by_snowflake_local_db.consumer.view_installed_cleanrooms();

차등 프라이버시

이 절차들은 클린 룸에서 differential privacy를 제어합니다. consumer.enable_templates_for_provider_run을 호출할 때 템플릿 수준에서 차등 프라이버시를 지정할 수도 있습니다.

is_dp_enabled

스키마:

CONSUMER

설명: clean room에서 차등 프라이버시가 활성화되어 있는지 확인합니다. 이 값을 확인하려면 clean room이 설치되어 있어야 합니다.

인자:

반환: (Boolean) clean room에 차등 프라이버시가 활성화되어 있는지 여부입니다.

예시:

CALL samooha_by_snowflake_local_db.consumer.is_dp_enabled($cleanroom_name);

view_remaining_privacy_budget

스키마:

CONSUMER

설명: clean room에서 쿼리를 실행하는 데 사용할 수 있는 남은 프라이버시 예산을 조회합니다. 예산이 모두 소진되면 예산이 재설정될 때까지 run_analysis를 더 이상 호출할 수 없습니다. 예산은 매일 재설정됩니다.

인자:

  • cleanroom_name (String) clean room의 이름입니다. 이 절차가 성공하려면 clean room이 설치되어 있어야 합니다.

반환: (Float) 남은 프라이버시 예산입니다.

예시:

CALL samooha_by_snowflake_local_db.consumer.view_remaining_privacy_budget($cleanroom_name);

set_privacy_settings

스키마:

CONSUMER

설명: 사용자 지정 템플릿을 사용하는 공급자 실행 분석(활성화 포함)에 대한 프라이버시 설정을 지정합니다. 이 절차는 이전에 설정된 모든 값을 덮어씁니다. 이 메서드를 호출할 때마다 이전 구성 설정이 모두 지워집니다.

인자:

cleanroom_name (String) - 이 설정이 적용되어야 하는 clean room의 이름입니다.

privacy_settings - (String) 공급자가 사용자 지정 템플릿을 실행할 때 프라이버시 설정을 지정하는 문자열 JSON 객체입니다. 객체의 구문은 다음과 같습니다:

'{
  "null" : <template_config>
}'

*template_config*는 differential privacy 및 집계 설정이 포함된 객체입니다. 확인하세요.

Available privacy settings에서 이 객체에 제공할 수 있는 필드를 확인할 수 있습니다.

예시:

-- Apply differential privacy for provider-run analysis using all custom templates.
CALL samooha_by_snowflake_local_db.consumer.set_privacy_settings(
  $cleanroom_name,
  PARSE_JSON('{
    "null":{ "differential": 1, "epsilon": 0.1, "privacy_budget": 3 }
    }')
  );

반환: (String) 성공 메시지입니다.

Snowpark Container Services 절차

Read more about using Snowpark Container Services in your clean rooms.

start_or_update_service

스키마:

CONSUMER

설명: 이 clean room에서 공급자가 정의한 최신 버전의 Snowpark Container Services를 생성하고 시작합니다. 공급자가 컨테이너를 생성하거나 업데이트하기 위해 provider.load_service_into_cleanroom을 호출할 때마다 소비자는 서비스를 업데이트하기 위해 consumer.start_or_update_service를 호출해야 합니다.

소비자는 이 절차를 호출하기 전에 풀을 정의하고 시작해야 합니다.

인자:

  • cleanroom_name (String) - 컨테이너가 로드되어야 하는 clean room의 이름입니다.

  • compute_pool_name - (String) 이 clean room에서 소비자가 정의한 컴퓨트 풀의 이름입니다. 풀은 이미 생성되어 있어야 하며, clean room에 풀에 액세스할 수 있는 권한이 있어야 합니다.

  • service_options - (Object, optional) 이 서비스에 대한 매개변수를 지정하는 객체입니다. 다음 속성이 지원됩니다:

  • query_warehouse - (String, optional) 이 서비스에 사용할 웨어하우스의 이름입니다. clean room을 실행하는 웨어하우스와 동일할 필요는 없습니다.

  • min_instances - (Integer, optional) 이 서비스에 사용할 최소 인스턴스 수입니다.

  • max_instances - (Integer, optional) 이 서비스에 사용할 최대 인스턴스 수입니다.

반환: (Table) 성공하면 로드 결과입니다. 실패하면 오류를 발생시킵니다.

예시:

CALL samooha_by_snowflake_local_db.consumer.start_or_update_service(
  $cleanroom_name,
  'dcr_lal_pool',
  object_construct(
        'query_warehouse', 'app_wh',
        'min_instances', '1',
        'max_instances', '1'
));

환경 관리

일반적인 clean room 기능을 지원하려면 다음 메서드를 사용하세요.

set_cleanroom_ui_accessibility

스키마:

CONSUMER

설명: 현재 계정의 소비자에게 clean rooms UI에서 clean room을 표시하거나 숨깁니다.

인자:

  • cleanroom_name (String) - clean room의 이름입니다.

  • visibility_status - (String) 다음 대소문자 구분 값 중 하나입니다:

  • HIDDEN - 현재 소비자 계정의 모든 사용자에게 clean rooms UI에서 지정된 clean room을 숨깁니다. clean room은 API 호출을 사용하여 계속 액세스할 수 있습니다.

  • EDITABLE - clean rooms UI에서 clean room을 표시합니다.

반환: (String) 성공 메시지입니다.

예시:

CALL samooha_by_snowflake_local_db.consumer.set_cleanroom_ui_accessibility(
  $cleanroom_name,
  'HIDDEN');

manage_datastats_task_on_account


스키마:

CONSUMER

설명: clean room 통계를 계산하는 백그라운드 작업을 활성화하거나 비활성화합니다. 이 작업은 기본적으로 실행되지만, 비용을 줄이기 위해 비활성화할 수 있습니다.

중요

이 작업을 관리하려면 모든 협업자가 동일한 값으로 이 프로시저의 적절한 provider 또는 consumer 버전을 호출해야 합니다.

인수:

  • enable - (Boolean) 작업을 활성화하려면 TRUE, 비활성화하려면 FALSE입니다.

반환 값: (String) 성공 메시지입니다.

예시:

-- Disable the task in this account.
CALL samooha_by_snowflake_local_db.consumer.manage_datastats_task_on_account(FALSE);

enable_local_db_auto_upgrades

스키마:

LIBRARY

설명: 새 프로시저나 기능이 릴리스될 때 Snowflake Data Clean Rooms 환경을 자동으로 업그레이드하는 작업을 활성화합니다. (이 작업은 samooha_by_snowflake_local_db.admin.expected_version_task입니다.) 각 새 릴리스마다 library.apply_patch를 호출하는 대신 이 프로시저를 호출하여 업그레이드를 자동화하세요.

이 작업을 비활성화하면 비용을 줄일 수 있지만, 시스템에 최신 버전의 clean rooms 환경이 유지되도록 실행 상태로 두는 것을 권장합니다.

인수: 없음

반환 값: (String) 성공 또는 실패 메시지입니다.

예시:

CALL samooha_by_snowflake_local_db.library.enable_local_db_auto_upgrades();

disable_local_db_auto_upgrades

스키마:

LIBRARY

설명: 새 버전이 릴리스될 때 Snowflake Data Clean Rooms 환경을 자동으로 업그레이드하는 작업을 비활성화합니다. 자동 업그레이드를 비활성화하면 각 새 릴리스마다 library.apply_patch를 호출해야 합니다.

인수: 없음

반환 값: (String) 성공 또는 실패 메시지입니다.

예시:

CALL samooha_by_snowflake_local_db.library.disable_local_db_auto_upgrades();

apply_patch

스키마:

LIBRARY

설명: clean rooms 환경을 업데이트하여 환경에 새로운 기능과 수정 사항을 활성화합니다. clean rooms 환경의 새 버전이 릴리스되었을 때 호출하세요. (일반적으로 매주 발생합니다. 최근 기능 업데이트에서 clean rooms 항목을 참조하세요.) 이 프로시저는 SAMOOHA_BY_SNOWFLAKE_LOCAL_DB를 업데이트합니다.

library.enable_local_db_auto_upgrades를 호출하여 패치 업데이트를 자동화할 수 있습니다. 자동 업데이트를 활성화하는 것을 권장합니다.

인수: 없음

반환 값: (String) 성공 메시지입니다.

예시:

CALL samooha_by_snowflake_local_db.library.apply_patch();

patch_cleanroom

스키마:

CONSUMER

설명: 지정된 clean room을 최신 버전으로 업데이트하여 해당 clean room에 새로운 기능과 수정 사항을 활성화합니다. 일반적으로 Snowflake 지원팀이 호출하라고 안내할 때만 이 프로시저를 호출합니다.

provider는 consumer가 library.patch_cleanroom을 호출하기 전에 library.patch_cleanroom을 호출해야 합니다. 그렇지 않으면 적용할 패치가 없습니다.

인수:

반환 값: (String) 성공 메시지입니다.

예시:

CALL samooha_by_snowflake_local_db.consumer.patch_cleanroom($cleanroom_name);

dcr_health.dcr_tasks_health_check

설명: 실행 중이거나 최근에 중지된 clean room 작업에 대한 정보를 표시합니다.

인수: 없음

반환 값: (Table) 일정, 웨어하우스 이름, 웨어하우스 크기를 포함한 clean room 작업에 대한 정보입니다.

예시:

CALL samooha_by_snowflake_local_db.dcr_health.dcr_tasks_health_check();

더 알아보기 (Learn more)