Snowflake Data Clean Rooms 개발자 가이드¶
이 페이지는 Snowflake에서 Clean Rooms 또는 템플릿을 프로그래밍 방식으로 만들거나 관리하려는 사용자를 위한 몇 가지 지침을 제공합니다.
Snowflake는 Clean Rooms를 만들거나 제어하는 애플리케이션을 개발할 수 있는 저장 프로시저를 노출합니다. 이러한 저장 프로시저는 Clean Room 환경과 연결된 Snowflake 계정에 액세스할 수 있는 모든 인터페이스에서 실행할 수 있으며, 여기에는 Snowsight 노트북 또는 워크시트뿐만 아니라 Snowflake CLI 도 포함됩니다. 이러한 프로시저는 SQL 또는 Snowflake 인터페이스에서 지원하는 모든 언어로 호출할 수 있습니다.
환경 설정하기¶
개발 도구¶
Clean Rooms를 위한 주요 개발자 도구는 다음과 같습니다.
코딩 환경: Snowflake 계정에서 저장 프로시저를 실행할 수 있는 모든 코딩 환경이 작동합니다. 대부분의 개발자는 Snowsight(브라우저 기반 도구) 또는 Snowflake CLI 에서 워크시트를 사용합니다.
Clean Rooms UI: Clean Rooms UI 를 사용하여 Clean Rooms를 구성, 관리 또는 생성할 수 있습니다. 대부분의 Clean Room 분석가들은 코드가 아닌 UI 를 사용하므로 UI 에서 Clean Rooms의 환경을 확인하고 테스트하는 것이 유용할 수 있습니다. 또한 Clean Rooms UI 에서만 사용할 수 있는 기능 도 몇 가지 있습니다.
Snowsight 는 데이터베이스 및 기타 오브젝트를 탐색하고 오브젝트를 검색하는 데 유용합니다.
코딩 설정¶
요구되는 역할 및 웨어하우스¶
Clean Rooms API 에는 모든 API 액세스 권한을 위한 SAMOOHA_APP_ROLE 역할이 필요합니다. Clean Rooms 관리자에게 모든 API 액세스 권한을 부여 해 달라고 요청하십시오.
Clean Rooms는 또한 API 프로시저의 하위 세트에 액세스할 수 있는 역할 생성 을 지원합니다.
SAMOOHA_APP_ROLE 에서 사용할 수 있는 웨어하우스에서 Clean Rooms API 를 사용해야 합니다. Clean Rooms는 웨어하우스 APP_WH 에 Clean Rooms API 액세스 권한을 제공합니다.
-- Set up environment.
USE ROLE samooha_app_role;
USE WAREHOUSE app_wh;
-- Call your clean rooms API functions.
...
다른 웨어하우스를 사용하는 경우 해당 웨어하우스에 SAMOOHA_APP_ROLE 사용 권한을 부여해야 합니다.
GRANT USAGE ON WAREHOUSE <your warehouse> TO SAMOOHA_APP_ROLE;`
Clean Rooms 정보 API 정보¶
Snowflake Data Clean Rooms 는 공급자가 Clean Room을 생성, 구성 및 공유할 수 있는 저장 프로시저 세트를 노출합니다. 이러한 프로시저는 노트북, 통합 문서 및 Snowflake CLI 를 포함하여 Snowflake 프로시저를 지원하는 모든 명령줄 환경에서 액세스할 수 있습니다. 저장 프로시저를 지원하는 모든 언어로 Clean Rooms API 를 사용할 수 있습니다. 여기서 SQL 사용법을 보여주는 문서가 있지만 Python이나 다른 모든 지원되는 언어 를 사용할 수도 있습니다.
프로시저는 다음 스키마 안에 존재합니다.
samooha_by_snowflake_local_db.provider
- 공급자별 프로시저. 이러한 프로시저는 현재 계정에서 생성된 Clean Rooms에서만 호출할 수 있습니다.samooha_by_snowflake_local_db.consumer
- 컨슈머 전용 프로시저. 이러한 프로시저는 현재 계정이 컨슈머로 초대된 클린룸에서만 호출할 수 있습니다.samooha_by_snowflake_local_db.library
- 클린룸 생성자(공급자) 또는 클린룸 공동 작업자(컨슈머)가 호출하는 일반 프로시저입니다. (이는 공급자 및 컨슈머 참조 페이지에 모두 설명되어 있습니다.)
일부 프로시저에는 공급자 버전과 컨슈머 버전이 모두 있습니다. 예를 들어 provider.view_cleanrooms
는 공급자인 현재 계정의 모든 Clean Rooms를 나열하고 consumer.view_cleanrooms
는 컨슈머인 현재 계정의 모든 Clean Rooms를 나열하는 등 스키마에 맞는 결과를 표시합니다.
API 프로시저의 Clean Room 이름 정보¶
많은 Clean Room API 프로시저는 cleanroom_name
인자를 받습니다.
API 를 사용하여 Clean Room을 만든 경우 Clean Room 이름 을 사용합니다.
Clean Rooms UI 를 사용하여 Clean Rooms를 생성한 경우 Clean Rooms ID 를 사용합니다.
describe_cleanroom
을 호출하여 Clean Room 이름과 ID 를 확인할 수 있습니다.
계정, 사용자 및 역할 설정하기¶
기술적으로 Clean Rooms를 개발하기 위해 Clean Rooms UI 를 사용할 필요는 없습니다. 대부분의 Clean Room 기능은 저장 프로시저를 사용하여 사용할 수 있습니다. 그러나 일부 기능은 UI 에서만 사용할 수 있으며 일부는 UI 에서 더 빠르게 수행할 수 있습니다. 그리고 많은 사용자가 UI 전용으로 사용하기 때문에 특히 자신이 만든 Clean Room에 대한 사용자 구성 웹 양식을 만드는 경우 UI 에서 Clean Room이 어떻게 작동하는지 확인하는 것이 중요합니다. 따라서 Clean Room 관리자에게 해당 Clean Room 계정의 Clean Room 관리자 이상으로 자신을 추가해 달라고 요청해야 합니다.
최소한 Clean Room의 양쪽을 테스트하기 위해 공급자 및 컨슈머 Snowflake 계정을 별도로 만드는 것이 좋습니다. 사용 사례에 따라 다른 웹 호스팅 리전에 추가 Snowflake 계정을 설정하여 클라우드 간 동작 을 테스트할 수도 있습니다.
“컨슈머 계정”, “공급자 계정”, “클라우드 간 계정” 등 일반적인 용도를 나타내는 의미 있는 이름을 테스트 Snowflake 계정에 지정합니다 여러 개의 테스트 계정이 있고 어느 계정에 로그인할지 알아야 할 때 유용합니다.
가이드라인 및 권장 사항¶
Clean Rooms UI 와 코드에서 동일한 계정을 사용하고 있는지 확인하기¶
예를 들어 코드에서 Clean Room을 만든 다음 Clean Rooms UI 에서 그 모양을 확인할 때와 같이 코딩 환경과 Clean Rooms UI 를 동일한 Snowflake 계정으로 열어야 하는 경우가 많습니다. 각각에서 동일한 Snowflake 계정을 사용하고 있는지 확인하는 것이 중요합니다.
Snowsight에는 동일한 계정에 대해 Clean Rooms UI 를 열거나 그 반대로 열 수 있는 바로 가기가 없으므로 Clean Rooms UI 와 Snowsight가 모두 동일한 계정에서 열려 있는지 확인해야 합니다.
Clean Room 이름과 Clean Room ID¶
API 를 사용할 때 cleanroom_name
인자가 필요한 프로시저의 경우 Clean Room 이름을 사용할지 Clean Room ID 를 사용할지 다음과 같이 결정합니다.
API 를 사용하여 Clean Room을 생성한 경우 Clean Room 이름 을 사용합니다.
Clean Room이 웹 앱에서 생성된 경우 Clean Room ID 를 사용하십시오.
provider.view_cleanrooms
또는provider.describe_cleanroom
을 호출하면 Clean Room 이름과 ID 를 모두 확인할 수 있습니다.
변경 사항이 있을 때마다 Clean Room 업데이트하기¶
템플릿, 권한 또는 정책을 포함한 모든 Clean Room 설정을 변경하려면 provider.create_or_update_cleanroom_listing
을 호출하여 변경을 활성화하십시오. 경우에 따라 이 프로시저를 호출하기 전에 변경 사항이 표시될 수 있지만 provider.create_or_update_cleanroom_listing
을 호출할 때까지 변경 사항이 제대로 적용되지 않을 수 있습니다.
코드 또는 UI 에서 생성된 Clean Rooms 간의 상호 운용성¶
API 에서 Clean Room을 만들면 Clean Rooms UI 에서 일부 기능을 수정할 수 없습니다. 예를 들어 UI 에서 생성된 Clean Room에 대해서는 코드에 추가 템플릿, 심지어 기본 제공 Snowflake 템플릿을 추가할 수 없습니다. 차등 개인정보 보호 설정도 변경할 수 없습니다.
Clean Room 오브젝트에 대한 설명¶
Snowflake Data Clean Rooms는 설치 시 많은 로컬 데이터베이스를 생성합니다. 다음은 몇 가지 유용한 오브젝트입니다.
SAMOOHA_CLEANROOM_cleanroom_id
이 계정에서 생성된 각 Clean Room에 대한 정보를 포함합니다. 다음 항목이 포함됩니다.
관리자: 암호화 키, 개인정보 보호 예산, 요청 로그, 공급자 분석 요청 등.
Shared_schema: 조인 정책, LAF 상태, 연결된 테이블, 버전.
템플릿: 이 Clean Room의 활성화 템플릿, 사용자 지정 템플릿 및 템플릿 체인의 목록입니다.
SAMOOHA_CLEANROOM_REQUESTS_cleanroom_id
다중 공급자 요청, 템플릿 요청, 쿼리 요청 등의 요청 기록을 포함합니다.
- SAMOOHA_BY_SNOWFLAKE_LOCAL_DB:
Provider.procedures: 모든 공급자 API 프로시저의 정의입니다.
Consumer.procedures: 모든 컨슈머 API 프로시저의 정의입니다.
Library.procedures: 공급자와 컨슈머 모두를 위한 모든 API 프로시저의 정의입니다.
Public.consumer_activation_summary: 컨슈머 활성화 결과입니다.
Public.provider_activation_summary: 공급자 활성화 결과입니다.
- SAMOOHA_BY_SNOWFLAKE.TEMPLATES.TEMPLATES:
이 계정에서 Clean Rooms에 사용할 수 있는 모든 기본 제공 Snowflake 템플릿의 목록과 정의를 보관합니다.
(컨슈머) 조인된 Clean Room에서 조인 정책을 설정하거나 기타 기본 작업을 수행할 수 없습니다¶
적절한 역할(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>');
일반적인 예기치 않은 결과¶
해당 프로시저의 적절한 consumer
또는 provider
버전을 호출해야 합니다. 많은 프로시저에는 공급자 버전과 컨슈머 버전이 모두 있습니다.
생성한 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을 게시한 후 공동 작업자가 볼 수 있는 시점까지는 약간의 지연이 있습니다.
알 수 없는 함수¶
프로시저를 호출할 때 다음과 같은 오류가 발생하는 경우: .. code-block:: sqlexample
Unknown user-defined function SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.CONSUMER.<procedure name>
SAMOOHA_APP_ROLE 이 없거나 함수 이름을 잘못 입력했습니다.
또한 액세스 권한이 제한된 실행 역할이 부여되었으며 호출 중인 함수가 역할에서 허용되지 않음을 의미할 수도 있습니다. consumer.grant_run_on_cleanrooms_to_role
에 허용된 프로시저 중 하나를 실행하여 테스트해 볼 수 있습니다. 프로시저가 성공하면 제한된 역할을 사용하고 있을 수 있습니다. 실패하면 이 계정에 Clean Rooms API 를 실행할 권한이 없는 것일 수 있습니다.
SAMOOHA_APP_ROLE 이 있는지 확인하려면 다음 명령을 실행합니다.
SELECT IS_ROLE_IN_SESSION( 'SAMOOHA_APP_ROLE' );
다음과 같은 오류가 발생하는 경우:
Database <cleanroom name> does not exist or not authorized. in RUN_ANALYSIS_STRING
임시 실행 역할이 부여되었으나 취소되었습니다. Clean Rooms 관리자에게 새 실행 역할 또는 전체 SAMOOHA_APP_ROLE 액세스 권한을 요청하십시오.
쿼리 기록 확인하기¶
UI 또는 코드에서 실행된 쿼리에 대한 쿼리 기록을 확인할 수 있습니다. 이러한 기록은 별도로 저장되고 확인됩니다.
UI 쿼리 기록¶
Clean Rooms UI 에서는 이 계정에 대한 모든 이전 쿼리 및 결과 목록을 Analyses & Queries 페이지에 표시합니다. 이러한 결과는 UI 에서 실행된 쿼리에만 해당됩니다.
API 쿼리 기록¶
API 를 사용하여 실행한 쿼리의 계정 기록을 보려면 다음을 수행하십시오.
Snowsight에 로그인합니다.
Monitoring » Query History 를 선택합니다.
필터를 사용하여 분석과 관련된 쿼리를 찾은 다음 쿼리 ID를 복사합니다.
워크시트를 열고 쿼리의 쿼리 ID에 따라 결과를 검색하는 쿼리를 실행합니다. 예를 들어 쿼리 ID 가
ABC123
인 경우 다음을 실행합니다.SELECT * FROM TABLE(result_scan(ABC123));
API 분석을 실행하고 이 쿼리를 사용하여 결과를 검색하는 도중에 웨어하우스가 일시 중단되면 결과를 얻지 못할 수 있습니다.
확장된 예¶
Developer API의 다양한 기능을 사용하는 방법에 대한 이해를 돕기 위해 Clean Rooms 설명서의 Use cases 섹션에 있는 예제를 참조할 수 있습니다.