Snowflake Data Clean Rooms 개발자 가이드

이 항목에서는 프로그래밍 방식으로 Snowflake Data Clean Rooms를 생성하거나 관리하려는 사용자를 위한 지침을 제공합니다.

Snowflake는 클린룸을 생성 및 제어할 수 있는 저장 프로시저의 API를 노출합니다. 이러한 저장 프로시저는 클린룸 환경과 연결된 Snowflake 계정에 액세스할 수 있는 모든 인터페이스에서 실행할 수 있으며, 여기에는 Snowsight 노트북 및 워크시트뿐만 아니라 :doc:`/developer-guide/snowflake-cli/index`도 포함됩니다. 이러한 프로시저는 SQL 또는 Snowflake 환경에서 지원하는 모든 언어로 호출할 수 있습니다.

환경 설정하기

다음은 클린룸 API를 효과적으로 사용하기 위한 코딩 환경 설정에 관한 몇 가지 팁입니다.

개발 도구

Clean Rooms를 위한 주요 개발자 도구는 다음과 같습니다.

  • 코딩 환경: Snowflake 계정에서 저장 프로시저를 실행할 수 있는 모든 코딩 환경이 작동합니다. 대부분의 개발자는 Snowsight(브라우저 기반 도구) 또는 Snowflake CLI 에서 워크시트를 사용합니다.

  • 클린룸 UI: 클린룸 UI를 사용하여 클린룸을 구성, 관리 또는 생성할 수 있습니다. 대부분의 클린룸 분석가는 코드가 아닌 UI를 사용하므로 UI에서 클린룸의 환경을 확인하고 테스트하는 것이 유용할 수 있습니다. 또한 :ref:`클린룸 UI 에서만 사용할 수 있는 기능<label-dcr_web_app_api_comparison>`도 몇 가지 있습니다.

  • Snowsight 는 데이터베이스 및 기타 오브젝트를 탐색하고 오브젝트를 검색하는 데 유용합니다.

  • 클린룸 API: API 설명서는 공급자컨슈머 항목 페이지로 나뉩니다.

코딩 설정

클린룸을 위한 코딩 환경을 설정하는 방법은 다음과 같습니다.

요구되는 역할 및 웨어하우스

클린룸 API에는 전체 API에 액세스할 수 있는 SAMOOHA_APP_ROLE 역할이 필요합니다. 클린룸 관리자에게 :ref:`전체 API 액세스 권한 부여<label-cleanrooms_add_developers>`를 요청합니다. 클린룸은 :ref:`API 프로시저의 하위 세트에 액세스할 수 있는 역할 생성<label-dcr_grant_limited_access>`도 지원합니다.

SAMOOHA_APP_ROLE이 사용할 수 있는 웨어하우스에서 클린룸 API를 사용해야 합니다. ``app_wh``는 API에 대한 액세스 권한이 있는 여러 웨어하우스 중 하나입니다. 요구 사항에 적합한 웨어하우스를 선택합니다.

일반적인 클린룸 편집, 생성, 삭제 명령에는 XS 웨어하우스를 사용하는 것이 좋습니다. 머신 러닝 워크로드와 같은 대규모 분석을 실행할 때는 더 큰 웨어하우스 또는 Snowpark에 최적화된 웨어하우스를 사용하는 것이 좋습니다.

-- Set up environment.
USE ROLE SAMOOHA_APP_ROLE;
USE WAREHOUSE app_wh;

-- Call your clean rooms API functions.
...
Copy

다른 웨어하우스를 사용하는 경우 해당 웨어하우스에 SAMOOHA_APP_ROLE 사용 권한을 부여해야 합니다.

GRANT USAGE ON WAREHOUSE <your_warehouse> TO SAMOOHA_APP_ROLE;`
Copy

Clean Rooms 정보 API 정보

|samooha-clean-room-plural|는 공급자가 클린룸을 생성, 구성 및 공유할 수 있는 저장 프로시저 세트를 노출합니다. 이러한 프로시저는 노트북, 워크시트, |sf-cli| 등 Snowflake 프로시저를 지원하는 모든 명령줄 환경에서 호출할 수 있습니다. 다음 설명서에서는 SQL 사용법을 보여주지만 Python 또는 :ref:`지원되는 기타 모든 Snowflake 언어<label-stored-procedures-handler-languages>`를 사용할 수도 있습니다.

프로시저는 다음 스키마 안에 존재합니다.

  • samooha_by_snowflake_local_db.provider - 공급자별 프로시저. 이러한 프로시저는 현재 계정에서 생성된 Clean Rooms에서만 호출할 수 있습니다.

  • samooha_by_snowflake_local_db.consumer - 컨슈머 전용 프로시저. 이러한 프로시저는 현재 계정이 컨슈머로 초대된 클린룸에서만 호출할 수 있습니다.

  • samooha_by_snowflake_local_db.library - 클린룸 생성자(공급자) 또는 클린룸 공동 작업자(컨슈머)가 호출하는 일반 프로시저입니다. 이 프로시저는 공급자 및 컨슈머 참조 페이지에 모두 설명되어 있습니다.

일부 프로시저에는 공급자 버전과 컨슈머 버전이 모두 있습니다. 예를 들어 `provider.view_cleanrooms`는 공급자인 현재 계정의 모든 클린룸을 나열하고 `consumer.view_cleanrooms`는 컨슈머인 현재 계정의 모든 클린룸을 나열하는 등 스키마에 맞는 결과를 표시합니다. 필요한 네임스페이스에서 프로시저를 호출해야 합니다.

API 프로시저의 Clean Room 이름 정보

많은 Clean Room API 프로시저는 cleanroom_name 인자를 받습니다.

  • 클린룸이 API를 사용하여 생성된 경우 클린룸 :emph:`이름`을 사용하세요. 패키지 이름의 일부로 사용되는 경우 공백을 밑줄로 바꿉니다.

    -- Spaces work here:
    CALL samooha_by_snowflake_local_db.provider.describe_cleanroom('my code created clean room');
    
    -- Underscores required here:
    SHOW VERSIONS IN APPLICATION PACKAGE SAMOOHA_CLEANROOM_my_code_created_clean_room;
    
    Copy
  • 클린룸이 클린룸 UI를 사용하여 생성된 경우 클린룸 :emph:`ID`를 사용합니다.

describe_cleanroom 또는 ``view_cleanrooms``를 호출하여 클린룸 이름과 ID를 볼 수 있습니다.

API를 사용하여 생성된 클린룸은 클린룸 UI에서 :ui:`Supported with Developer APIs`로 레이블이 지정됩니다.

계정, 사용자 및 역할 설정하기

클린룸을 개발하는 데 클린룸 UI를 사용할 필요는 없습니다. 대부분의 클린룸 기능은 API를 호출하여 사용할 수 있습니다. 그러나 몇 가지 기능은 :ref:`UI<label-dcr_web_app_api_comparison>`에서만 사용 가능하며, 일부는 UI에서 더 빠르게 수행됩니다. 그리고 많은 사용자가 UI를 독점적으로 사용하기 때문에 클린룸이 UI에서 어떻게 동작하는지 확인하는 것이 중요합니다. 따라서 클린룸 관리자에게 적절한 클린룸 계정에서 자신을 클린룸 관리자 이상으로 추가해 달라고 요청해야 합니다.

사용 사례에 따라 다른 웹 호스팅 리전에 추가 Snowflake 계정을 설정하여 :doc:`클라우드 간 동작</user-guide/cleanrooms/enabling-laf>`을 테스트할 수도 있습니다.

“컨슈머 계정”, “공급자 계정”, “클라우드 간 계정” 등 일반적인 용도를 나타내는 의미 있는 이름을 테스트 Snowflake 계정에 지정합니다 이는 여러 개의 테스트 계정이 있고 클린룸 로그인 페이지에서 계정을 선택해야 할 때 유용할 수 있습니다.

내부 테스트 클린룸

클린룸을 자신과 공유하여 개발 중에 클린룸을 테스트할 수 있습니다. 이러한 클린룸을 *내부 테스트 클린룸*이라고 합니다. 공급자와 컨슈머 모두에게 단일 계정을 사용하면 빠른 기능 테스트에 편리합니다.

내부 테스트 클린룸을 만들려면 공급자 계정을 ``provider.add_consumers``에 유일한 컨슈머로 전달하기만 하면 됩니다.

내부 테스트 클린룸에는 다음과 같은 제한 사항이 있습니다.

  • 내부 테스트 클린룸은 나중에 다른 계정과 공유할 수 없습니다. 내부 테스트 클린룸은 항상 내부 테스트 클린룸입니다.

  • 다음 기능은 내부 테스트 클린룸에서 지원되지 않습니다.

    • 공급자 활성화

    • 공급자 실행 분석

    • 요청 로그(provider.mount_request_logs_for_all_consumers``또는 ``provider.view_request_logs) 마운트 또는 보기

    • 컨슈머 정의 템플릿

    • 다중 공급자 분석

    • 차등 개인정보 보호

    내부 테스트룸에서 지원되지 않는 기능을 테스트하려면 별도의 공급자 및 컨슈머 Snowflake 계정을 설정하여 클린룸의 양쪽을 테스트해야 합니다.

공급자와 컨슈머 모두에게 단일 계정에서 클린룸을 사용하는 방법을 보여주는 :download:`샘플 워크시트</samples/clean-rooms/internal-testing-cleanroom.ipynb>`를 다운로드합니다.

클린룸 환경에 설치된 항목 확인

Snowflake Data Clean Rooms는 설치 시 많은 로컬 데이터베이스를 생성합니다. :doc:`/user-guide/cleanrooms/installation-details`에서 클린룸 패키지로 실행되거나 설치된 작업 및 오브젝트에 대한 세부 정보를 찾을 수 있습니다.

샘플 데이터

클린룸 환경은 사용할 수 있는 :ref:`몇 가지 샘플 데이터 세트<label-dcr_samooha_sample_database>`를 설치합니다.

Snowflake를 사용하여 :doc:`합성 테스트 데이터를 생성</user-guide/synthetic-data>`할 수도 있습니다.

가이드라인 및 권장 사항

클린룸 작업 시 문제를 방지하기 위한 몇 가지 지침은 다음과 같습니다.

Clean Rooms UI 와 코드에서 동일한 계정을 사용하고 있는지 확인하기

예를 들어 코드에서 Clean Room을 만든 다음 Clean Rooms UI 에서 그 모양을 확인할 때와 같이 코딩 환경과 Clean Rooms UI 를 동일한 Snowflake 계정으로 열어야 하는 경우가 많습니다. 각각에서 동일한 Snowflake 계정을 사용하고 있는지 확인하는 것이 중요합니다.

Snowsight에는 동일한 계정에 대해 클린룸 UI를 열거나 그 반대로 열 수 있는 바로 가기가 없으므로 각 환경에서 동일한 계정으로 로그인해야 합니다.

Clean Room 이름과 Clean Room ID

API를 사용할 때 클린룸 이름 인자를 사용하는 프로시저의 경우 클린룸 이름을 사용할지 또는 클린룸 ID를 사용할지 여부를 다음과 같이 결정합니다.

  • API 를 사용하여 Clean Room을 생성한 경우 Clean Room 이름 을 사용합니다.

  • 클린룸이 클린룸 UI에 생성된 경우 클린룸 **ID**를 사용합니다. provider.view_cleanrooms 또는 ``provider.describe_cleanroom``을 호출하여 클린룸 이름과 ID를 모두 볼 수 있습니다.

UI 변경 사항이 있을 때마다 클린룸 업데이트하기

UI에 영향을 미치는 클린룸 속성을 변경하는 경우, ``provider.create_or_update_cleanroom_listing``을 호출하여 변경 사항을 전파합니다.

코드 또는 UI 에서 생성된 Clean Rooms 간의 상호 운용성

API를 사용하여 클린룸을 만들면 클린룸 UI에서 일부 기능을 수정할 수 없습니다. 예를 들어 UI에서 생성된 클린룸에 대해서는 코드에 추가 템플릿, 심지어 기본 제공 Snowflake 템플릿을 추가할 수 없습니다. 차등 개인정보 보호 설정도 변경할 수 없습니다.

문제 해결하기

다음은 몇 가지 일반적인 문제 해결 팁입니다.

컨슈머가 조인 정책을 설정하거나 조인된 클린룸에서 다른 기본 작업을 수행할 수 없음

적절한 역할(SAMOOHA_APP_ROLE)로 Clean Room을 설치했는지 확인합니다. Clean Room을 설치할 때 SAMOOHA_APP_ROLE 을 사용하지 않았다면 일반적으로 권한 오류와 같은 많은 문제가 발생할 수 있습니다. 이 경우 consumer.uninstall_cleanroom 조차도 실패하므로 올바른 역할을 하는 Clean Room을 제거한 다음 다시 설치하는 추가 단계를 수행해야 합니다.

-- Who owns the clean room?
SHOW SHARES LIKE 'SAMOOHA_CLEANROOM_REQUESTS_<cleanroom_name>';

-- If the owner role is not SAMOOHA_APP_ROLE, you must drop the share, then
-- uninstall the clean room.
DROP SHARE SAMOOHA_CLEANROOM_REQUESTS_<cleanroom_name>;
CALL samooha_by_snowflake_local_db.consumer.uninstall_cleanroom($cleanroom_name);
USE ROLE SAMOOHA_APP_ROLE;
CALL samooha_by_snowflake_local_db.consumer.install_cleanroom($cleanroom_name, '<provider_locator>');
Copy

생성한 Clean Room을 찾을 수 없음

한 계정에서 Clean Room을 만들었는데 공동 작업자의 계정에서 볼 수 없는 경우 몇 가지 이유가 있을 수 있습니다.

  • Clean Room이 다른 클라우드 호스팅 리전에서 생성되었으며 클라우드 간 자동 복제 를 활성화하지 않았습니다.

  • provider.create_or_update_cleanroom_listing 을 호출하여 Clean Room을 게시하지 않았습니다.

  • provider.view_cleanrooms() 대신 consumer.view_cleanrooms() 를 호출하고 있습니다(또는 그 반대).

  • Clean Room을 공유하지 않았거나, 잘못된 계정으로 Clean Room을 공유했거나, Snowsight/Clean rooms UI/CLI 에서 잘못된 공동 작업자 계정에 로그인했습니다. Clean Room을 볼 수 있는 계정이 Clean Room을 공유한 계정인지, 그리고 해당 공유 계정에 로그인되어 있는지 확인합니다.

  • Clean Room을 게시한 후 공동 작업자가 볼 수 있는 시점까지는 약간의 지연이 있습니다.

알 수 없는 함수

프로시저를 호출하고 다음 코드 조각과 같은 오류가 발생하는 경우:

Unknown user-defined function SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.CONSUMER.<procedure name>

다음은 몇 가지 가능한 원인입니다.

네임스페이스를 잘못 입력했습니다.

해당 프로시저의 적절한 consumer 또는 provider 버전을 호출해야 합니다. 많은 프로시저에는 공급자 버전과 컨슈머 버전이 모두 있습니다.

함수 이름을 잘못 입력했습니다.

올바른 명명은 참조 가이드를 확인하세요.

제한된 액세스 실행 역할이 부여되었으며 호출한 함수가 자신의 역할에서 허용되지 않습니다.

다음 SQL 코드를 실행하여 이를 테스트합니다.

USE DATABASE samooha_by_snowflake_local_db;
CALL IS_DATABASE_ROLE_IN_SESSION('samooha_run_role');
Copy

코드 조각이 TRUE를 반환하는 경우 클린룸 API에 대한 제한된 액세스 실행 역할 권한이 있습니다. 더 많은 액세스 권한이 필요한 경우 클린룸 관리자에게 전체 액세스 권한을 요청하세요. :ref:`consumer.grant_run_on_cleanrooms_to_role documentation<label-dcr_sproc_consumer_manage_role_access>`에서 허용되는 실행 역할 프로시저 목록을 참조하세요.

SAMOOHA_APP_ROLE이 없음

SAMOOHA_APP_ROLE을 사용할 수 있는지 확인하려면 다음 명령을 실행합니다.

-- Get current user name.
SELECT current_user();

-- Add current user name in place as indicated.
SHOW GRANTS TO USER <current_user_name> ->> select * from $1 where "role" = 'SAMOOHA_APP_ROLE';
Copy

결과를 얻지 못한 경우 관리자에게 클린룸에 대한 API 액세스를 요청하세요.

사용자가 클린룸을 설치했는지 확인

다음 SQL 코드를 실행하여 지정된 사용자가 지정된 클린룸을 설치했는지 확인할 수 있습니다. $consumer_locator``$cleanroom_name``을 컨슈머 로케이터 및 클린룸 이름으로 바꿉니다.

SELECT * FROM snowflake.data_sharing_usage.application_state
  WHERE consumer_account_locator = $consumer_locator
    AND CONTAINS(package_name, UPPER(REPLACE($cleanroom_name, ' ', '_')));
Copy

쿼리 또는 분석 기록 확인

UI 또는 코드에서 실행된 분석에 대한 쿼리 기록을 볼 수 있습니다. 이러한 기록은 별도로 저장되고 확인됩니다.

UI 분석 기록

클린룸 UI는 :ui:`Analyses & Queries`페이지에서 이 계정에 대한 모든 이전 분석 목록을 표시합니다. 이러한 결과는 UI에서 실행되는 쿼리에만 해당됩니다.

클린룸을 수정하거나 삭제하면 보고서가 다음 템플릿 중 하나를 사용하지 않는 한 해당 클린룸에 대한 UI의 분석 보고서가 삭제됩니다.

  • Audience Overlap & Segmentation

  • SQL Query

  • 사용자 지정 템플릿.

위에 나열된 템플릿에 대한 쿼리 기록은 클린룸이 수정되거나 삭제되더라도 유지됩니다.

API 쿼리 기록

API를 사용하여 실행된 모든 호출의 계정 기록과 템플릿 분석을 보려면 다음을 수행하세요.

  1. Snowsight 에 로그인합니다.

  2. 탐색 메뉴에서 Monitoring » Query History 를 선택합니다.

  3. 필터를 사용하여 분석과 관련된 쿼리를 찾고, 쿼리 또는 분석을 선택합니다.

확장된 예

Developer APIs의 다양한 기능을 사용하는 방법에 대한 이해를 돕기 위해 클린룸 설명서의 Use casesFeatures 섹션에 있는 예제를 참조할 수 있습니다.