오픈 데이터 공유(Open Data Sharing)
오픈 데이터 공유(Open Data Sharing)
프리뷰 기능 — 모든 계정에서 사용 가능.
Snowflake의 오픈 데이터 공유는 전통적인 데이터 공유를 Snowflake 생태계 너머로 확장해요. 이 기능을 사용하면 Snowflake를 사용하지 않는 소비자와 라이브 읽기 전용 데이터 자산을 안전하게 공유할 수 있어 복잡한 ETL 파이프라인, 데이터 중복, 수동 파일 내보내기의 필요성을 없애줘요.
공개 프리뷰 기간 동안 공유 데이터의 지원되는 유일한 대상 리전은 공급자 계정이 위치한 리전이에요.
본문
오픈 데이터 공유를 사용하는 이유
- 보편적 접근: 소비자는 이 프로토콜이 지원되는 모든 분석 도구나 플랫폼에서 표준 오픈소스 Iceberg REST Catalog API로 라이브 데이터를 쿼리해요.
- 데이터 이동 없음: 데이터는 Snowflake 스토리지 계층에 안전하게 남아 단일 진실 공급원을 보장하면서 데이터 이그레스 비용과 스토리지 중복을 제거해요.
- 세분화된 제어: 제한된 외부 소비자 신원과 직접 관리하는 리전별 프로그래매틱 액세스 토큰(PAT)을 사용한 안전한 데이터 배포.
- 자동화된 복제: 기본 프레임워크가 리스팅 구성에 따라 크로스 리전 복제를 원활하게 처리해 데이터를 외부 소비자에게 더 가까이 배치해 최적의 성능을 제공해요.
외부 소비자와 안전한 데이터 공유
다음 단계는 최소한의 오픈 데이터 공유 워크플로를 안내해요: 외부 소비자와 액세스 토큰 만들기, 공유 Iceberg 테이블 데이터 준비, 공유 및 리스팅 만들기, 외부 소비자용 카탈로그 URL 검색.
계정 리전 확인
다음 명령을 실행해 계정 리전을 반환하세요:
SELECT CURRENT_REGION();
결과는 계정의 Snowflake 리전 ID예요(예: AWS_US_WEST_2 또는 PUBLIC.AWS_US_WEST_2).
계정 URL에서도 리전을 식별할 수 있어요. URL에 *organization*-*account*.*us-east-2*.*aws*.snowflakecomputing.com의 us-east-2 같은 클라우드 리전 ID가 포함되면 계정이 해당 클라우드 리전에 호스팅된 것이에요. 자세한 내용은 계정 식별자를 참조하세요.
1단계: 필수 권한이 있는 역할 사용
이 워크플로를 완료하려면 다음 중 하나가 있는 역할을 사용하세요:
ACCOUNTADMIN역할, 또는- 계정 수준에서 부여된
CREATE EXTERNAL CONSUMER권한과 함께, 공유, 리스팅, 계획한 공유 데이터베이스 객체를 만드는 데 필요한 권한.
커스텀 역할에 CREATE EXTERNAL CONSUMER를 부여하려면:
GRANT CREATE EXTERNAL CONSUMER ON ACCOUNT TO ROLE my_role;
다음 예제는 ACCOUNTADMIN을 사용해요:
USE ROLE ACCOUNTADMIN;
2단계: 외부 소비자 만들기
Snowflake 외부에서 공유 데이터에 접근할 당사자를 위한 외부 소비자를 만들어요:
CREATE EXTERNAL CONSUMER test_ext_consumer;
SHOW EXTERNAL CONSUMERS LIKE '%test_ext_consumer%';
외부 소비자는 생성 시점에 특정 리전에 바인딩된 제한된 사용자예요. 이 계정에 역할이나 다른 표준 사용자 옵션을 부여할 수 없어요.
3단계: 프로그래매틱 액세스 토큰 추가
외부 소비자를 위한 PAT(Programmatic Access Token)를 추가해요:
ALTER EXTERNAL CONSUMER test_ext_consumer ADD PAT test_ext_consumer_pat;
Snowflake가 PAT secret을 반환할 때 반드시 저장해야 해요. 나중에 secret을 검색할 수 없어요.
공개 프리뷰 기간 동안 외부 소비자 인증에는 PAT만 지원돼요. 다른 인증 방법은 이후 릴리스 단계에서 제공될 예정이에요.
계정이 네트워크 정책을 사용한다면 접근을 부여하려는 각 외부 소비자에 대한 항목을 추가해야 해요. 계정이 네트워크 정책을 사용하지 않으면 외부 소비자는 추가 구성 없이 연결할 수 있어요.
4단계: 공유 데이터 만들기
공유하려는 데이터를 위한 데이터베이스, 스키마, Iceberg 테이블을 만들어요. 다음 예제는 가장 간단한 데모 설정을 위해 Snowflake 관리 스토리지를 사용해요:
CREATE DATABASE test_db;
CREATE SCHEMA test_db.test_schema;
CREATE ICEBERG TABLE test_db.test_schema.test_table (id INT, val STRING)
EXTERNAL_VOLUME = 'SNOWFLAKE_MANAGED'
CATALOG = 'SNOWFLAKE';
INSERT INTO test_db.test_schema.test_table VALUES (1, 'A'), (2, 'B'), (3, 'C');
SELECT * FROM test_db.test_schema.test_table;
외부 볼륨에서 데이터 공유 (선택)
Snowflake 관리 스토리지를 사용하지 않는다면 대신 외부 볼륨을 참조하는 Iceberg 테이블을 만들 수 있어요. 위에서 Snowflake 관리 테이블을 사용했다면 이 섹션을 건너뛰어도 돼요.
먼저 외부 볼륨을 만들어요:
CREATE OR REPLACE EXTERNAL VOLUME exvol
STORAGE_LOCATIONS = (
(
NAME = 'exvol'
STORAGE_PROVIDER = 'S3'
STORAGE_BASE_URL = 's3://bucket/basepath'
STORAGE_AWS_ROLE_ARN = ''
)
);
그런 다음 외부 볼륨을 사용하는 Iceberg 테이블을 만들어요:
CREATE ICEBERG TABLE test_db.test_schema.test_table_ex_vol (id INT, val STRING)
EXTERNAL_VOLUME = exvol
CATALOG = 'SNOWFLAKE';
5단계: 공유 만들기 및 권한 부여
공유를 만들고 데이터베이스, 스키마, 테이블에 필요한 권한을 부여해요:
CREATE SHARE test_share;
GRANT USAGE ON DATABASE test_db TO SHARE test_share;
GRANT USAGE ON SCHEMA test_db.test_schema TO SHARE test_share;
GRANT SELECT ON TABLE test_db.test_schema.test_table TO SHARE test_share;
6단계: 외부 리스팅 만들기
공유를 외부 소비자에게 연결하는 외부 리스팅을 만들어요:
CREATE EXTERNAL LISTING test_listing SHARE test_share AS
$$
title: "test open sharing"
description: "test open sharing"
open_sharing:
catalog_identifier: "test-open-sharing"
listing_terms:
type: "OFFLINE"
external_targets:
access:
- external_consumers: [TEST_EXT_CONSUMER]
$$;
리스팅 매니페스트 필드에 대한 자세한 내용은 리스팅 매니페스트 참조를 참조하세요.
7단계: 리스팅 검증
리스팅이 생성됐는지 확인하고 속성을 검토해요:
SHOW LISTINGS LIKE 'TEST_LISTING';
DESC LISTING test_listing;
8단계: 외부 소비자용 카탈로그 URL 가져오기
SYSTEM$GET_LISTING_URL_FOR_EXTERNAL_CONSUMER를 호출해 외부 소비자용 catalog와 catalog_uri 값을 검색해요:
CALL SYSTEM$GET_LISTING_URL_FOR_EXTERNAL_CONSUMER('TEST_LISTING');
반환된 카탈로그 URL과 3단계의 PAT를 외부 소비자에게 제공해 Iceberg REST Catalog 클라이언트로 연결할 수 있게 하세요.
리스팅 매니페스트 속성
예제 리스팅은 다음 매니페스트 필드를 사용해요:
- title 및 description — 공급자와 외부 소비자에게 리스팅을 식별해요.
- listing_terms — 소비자가 리스팅의 약관을 수락하는 방식을 지정해요. 예제는
OFFLINE을 사용해요. - external_targets.access.external_consumers — 리스팅에 접근할 수 있는 외부 소비자 신원을 나열해요.
- open_sharing.catalog_identifier — Iceberg REST Catalog API를 통해 외부 소비자에게 노출되는 카탈로그의 고유 식별자. 소비자가 공유 데이터에 연결하도록 Iceberg REST Catalog 클라이언트를 구성할 때 이 값을 사용해요.