Publish data from Snowflake to SAP® BDC Connect for Snowflake
Publish data from Snowflake to SAP® BDC Connect for Snowflake (Snowflake에서 SAP® BDC Connect for Snowflake로 데이터 게시)
이 주제는 공유를 만들고, 데이터베이스·스키마·테이블에 대한 접근을 부여하며, 공유를 Zerocopy Connector와 연결해 Snowflake 데이터를 SAP® BDC Connect for Snowflake로 다시 게시하는 방법을 설명해요.
본문
Note
SAP 및 Snowflake 제로 카피 통합·커넥터의 종단 간 수명 주기를 관리하는 manage-zerocopy-sapbdc 스킬은 커넥터 생성, SAP® BDC 데이터 제품 소비, Snowflake 데이터를 SAP® BDC로 게시, 공유 데이터 분석, 문제 해결을 모두 대화형 단계별 워크플로로 처리해요. 이 스킬은 이제 Cortex Code(CoCo)에 번들되어 있으며 이 주제의 단계를 자동화하는 데 사용할 수 있어요.
공유를 연결하기 전에 커넥터가 CONNECTED 상태이고 SHARE_BACK이 활성화되어 있어야 해요. 자세한 내용은 SAP® BDC Connect for Snowflake Zerocopy Connector 설정 참고.
share back 활성화
SAP® BDC Connect for Snowflake에 데이터를 게시하기 전에 커넥터에서 share back을 활성화해요:
ALTER ZEROCOPY CONNECTOR IF EXISTS my_db.my_schema.my_sap_connector
SET SHARE_BACK = TRUE;
Note
공유를 만드는 데 사용되는 역할은 계정에 대한 CREATE SHARE 권한이 있어야 해요. 필요한 전체 권한 목록은 SAP® BDC Connect for Snowflake Zerocopy Connector — 보안 및 권한 참고.
Snowflake 객체에 접근 부여
Snowflake 데이터를 SAP® BDC Connect for Snowflake에 게시하려면 먼저 Snowflake 공유를 만들고 게시하려는 데이터베이스·스키마·테이블에 대한 접근을 부여해요. 공유 생성·관리에 대한 자세한 내용은 CREATE SHARE를 참고해요.
Note
- 테이블은 Iceberg V3 테이블이어야 해요. 테이블 생성 시
ICEBERG_VERSION = 3을 설정하거나 데이터베이스·스키마 수준에서ICEBERG_VERSION_DEFAULT = 3을 설정해요. 자세한 내용은 ICEBERG_VERSION과 ICEBERG_VERSION_DEFAULT 참고. - 테이블은 Iceberg 카탈로그로 Snowflake를 사용해야 해요(Snowflake 관리형 Iceberg 테이블). 테이블 생성 시
CATALOG = 'SNOWFLAKE'를 설정해요. 자세한 내용은 CREATE ICEBERG TABLE (Snowflake를 Iceberg 카탈로그로 사용) 참고. - 테이블은 Snowflake 저장소를 사용해야 하며, Snowflake를 카탈로그로 사용할 때 기본값이에요. 자세한 내용은 Apache Iceberg™ 테이블용 Snowflake 저장소 참고.
- 테이블은 copy-on-write가 활성화되어야 해요. 테이블 생성 시
ICEBERG_MERGE_ON_READ_BEHAVIOR = 'DISABLED'를 설정해요. 자세한 내용은 행 수준 삭제 사용 참고. - SAP® BDC Connect for Snowflake가 게시된 데이터를 소비할 수 있도록 테이블은 호환 가능한 저장 직렬화 정책을 사용해야 해요. 테이블 생성 시
STORAGE_SERIALIZATION_POLICY = 'COMPATIBLE'을 설정해요. 자세한 내용은 STORAGE_SERIALIZATION_POLICY 참고. - 각 공유 데이터 제품은 단일 전용 데이터베이스에 매핑해야 해요. 직접 공유에 대한 자세한 내용은 보안 데이터 공유 소개 참고.
이 속성들을 데이터베이스 또는 스키마 수준에서 설정해 모든 테이블이 자동으로 상속하도록 할 수도 있어요.
Snowflake는 모든 테이블이 올바른 설정을 자동으로 상속하도록 필수 Iceberg 구성을 데이터베이스 수준에서 설정할 것을 권장해요. 새 데이터베이스에는 CREATE DATABASE를, 기존 데이터베이스 업데이트에는 ALTER DATABASE를 사용해요:
-- New database
CREATE DATABASE my_publish_db
ICEBERG_VERSION_DEFAULT = 3
CATALOG = 'SNOWFLAKE'
ICEBERG_MERGE_ON_READ_BEHAVIOR = 'DISABLED'
STORAGE_SERIALIZATION_POLICY = 'COMPATIBLE';
-- Existing database
ALTER DATABASE my_publish_db SET
ICEBERG_VERSION_DEFAULT = 3
CATALOG = 'SNOWFLAKE'
ICEBERG_MERGE_ON_READ_BEHAVIOR = 'DISABLED'
STORAGE_SERIALIZATION_POLICY = 'COMPATIBLE';
이 속성들을 테이블 수준에서 설정하는 것을 선호한다면 각 테이블을 만들 때 명시적으로 지정해요:
CREATE ICEBERG TABLE my_publish_db.my_schema.my_iceberg_table (
id STRING PRIMARY KEY,
name STRING,
value NUMBER(38,0)
)
ICEBERG_VERSION = 3
CATALOG = 'SNOWFLAKE'
ICEBERG_MERGE_ON_READ_BEHAVIOR = 'DISABLED'
STORAGE_SERIALIZATION_POLICY = 'COMPATIBLE';
Note
SAP® BDC Connect for Snowflake에 게시하는 각 Iceberg 테이블에 기본 키를 정의해야 해요. 앞선 예에서 id가 기본 키예요. 데이터 제품을 게시할 때 CSN 문서에서 같은 컬럼을 키("key": true)로 표시해요.
동적 Iceberg 테이블도 게시할 수 있어요. 다른 요구 사항은 앞서 설명한 Iceberg 테이블과 같아요. 만들려면 CREATE DYNAMIC ICEBERG TABLE을 사용한 다음 ALTER DYNAMIC TABLE로 기본 키를 추가해요.
CREATE DYNAMIC ICEBERG TABLE my_publish_db.my_schema.my_dynamic_table
TARGET_LAG = '20 minutes'
WAREHOUSE = my_warehouse
ICEBERG_VERSION = 3
CATALOG = 'SNOWFLAKE'
ICEBERG_MERGE_ON_READ_BEHAVIOR = 'DISABLED'
STORAGE_SERIALIZATION_POLICY = 'COMPATIBLE'
AS
SELECT id, name, value
FROM my_publish_db.my_schema.my_iceberg_table;
ALTER DYNAMIC TABLE my_publish_db.my_schema.my_dynamic_table
ADD PRIMARY KEY (id);
Iceberg 테이블과 동적 Iceberg 테이블 모두 영구 또는 일시(transient)일 수 있어요. 둘 중 하나를 일시 테이블로 만들려면 CREATE TRANSIENT ICEBERG TABLE 또는 CREATE TRANSIENT DYNAMIC ICEBERG TABLE처럼 문에 TRANSIENT를 추가해요. 두 테이블 유형의 차이는 일시 테이블을 참고해요.
게시 전에 테이블이 기본 키를 가졌는지 확인하려면 SHOW PRIMARY KEYS를 사용해요. 각 기본 키 컬럼에 대해 행 하나를 반환해요:
SHOW PRIMARY KEYS IN TABLE my_publish_db.my_schema.my_iceberg_table;
SHOW PRIMARY KEYS IN TABLE my_publish_db.my_schema.my_dynamic_table;
공유 생성
공유를 만들려면 역할이 계정에 대한 CREATE SHARE 권한이 있어야 해요. 필요한 전체 권한 목록은 SAP® BDC Connect for Snowflake Zerocopy Connector — 보안 및 권한 참고.
CREATE SHARE로 공유를 만들어요:
CREATE SHARE IF NOT EXISTS my_share;
공유에 접근 부여
데이터베이스에 USAGE를 부여해요:
GRANT USAGE ON DATABASE my_publish_db TO SHARE my_share;
스키마에 USAGE를 부여해요:
GRANT USAGE ON SCHEMA my_publish_db.my_schema TO SHARE my_share;
특정 테이블에 SELECT를 부여해요:
GRANT SELECT ON TABLE my_publish_db.my_schema.my_iceberg_table TO SHARE my_share;
GRANT SELECT ON TABLE은 모든 지원 테이블 유형에서 동작해요. GRANT SELECT ON ICEBERG TABLE을 사용할 수도 있고, 동적 Iceberg 테이블의 경우 GRANT SELECT ON DYNAMIC TABLE을 사용할 수 있어요.
공유를 커넥터와 연결
접근을 부여한 후 공유를 Zerocopy Connector와 연결해요:
ALTER ZEROCOPY CONNECTOR my_db.my_schema.my_sap_connector
ADD SHARE my_share;
Zerocopy Connector와 연결된 공유를 보려면 DESC ZEROCOPY CONNECTOR를 사용해요:
DESC ZEROCOPY CONNECTOR my_db.my_schema.my_sap_connector;
접근 회수
Zerocopy Connector에서 공유를 분리하려면:
ALTER ZEROCOPY CONNECTOR my_db.my_schema.my_sap_connector
REMOVE SHARE my_share;
이전에 부여된 객체에 대한 접근을 공유에서 회수하려면:
REVOKE USAGE ON DATABASE my_publish_db FROM SHARE my_share;
REVOKE USAGE ON SCHEMA my_publish_db.my_schema FROM SHARE my_share;
REVOKE SELECT ON TABLE my_publish_db.my_schema.my_iceberg_table FROM SHARE my_share;
SAP® BDC Connect for Snowflake에 데이터 제품 게시
Snowflake 객체에 접근을 부여한 후 SYSTEM$SAP_PUBLISH_DATA_PRODUCT 함수를 호출해 데이터 제품을 SAP® BDC에 게시해요. 이렇게 하면 데이터 제품이 SAP® BDC 측에서 발견 가능하고 접근 가능해져요.
Note
SYSTEM$SAP_PUBLISH_DATA_PRODUCT를 호출하려면 커넥터에 대한 OPERATE 권한이 필요해요.
SELECT SYSTEM$SAP_PUBLISH_DATA_PRODUCT(
'<connector_name>',
'<snowflake_share_name>',
'<open_resource_discovery_metadata>',
'<csn_document_json>'
);
예:
SELECT SYSTEM$SAP_PUBLISH_DATA_PRODUCT(
'my_db.my_schema.my_sap_connector',
'my_share',
'{
"title": "Airline Data Product",
"shortDescription": "Airline dimension data from Snowflake.",
"description": "Contains airline identifiers and attributes published from Snowflake to SAP BDC."
}',
'{
"csnInteropEffective": "1.0",
"$version": "2.0",
"i18n": {},
"meta": {
"creator": "Snowflake CSN Interop Generator - Minimal",
"flavor": "inferred"
},
"definitions": {
"MY_SCHEMA": { "kind": "context" },
"MY_SCHEMA.MY_TABLE": {
"kind": "entity",
"elements": {
"ID": {
"type": "cds.String",
"key": true,
"notNull": true
},
"NAME": {
"type": "cds.String"
},
"VALUE": {
"type": "cds.Decimal",
"precision": 38,
"scale": 0
}
}
}
}
}'
);
| 파라미터 | 설명 |
|---|---|
| connector_name | Zerocopy Connector의 정규화된 이름(예: my_db.my_schema.my_sap_connector). |
| snowflake_share_name | Snowflake 공유의 이름이며 SAP® BDC 측 공유의 이름이기도 함. |
| open_resource_discovery_metadata | SAP® BDC에서 데이터 제품을 설명하는 JSON 객체. 다음 필드를 포함: title(데이터 제품의 표시 이름), shortDescription(데이터 제품의 간략 요약), description(데이터 제품의 전체 설명). |
| csn_document_json | 데이터 제품의 구조를 설명하는 SAP® Core Schema Notation(CSN) JSON 페이로드. 호출자가 제공. |
Note
함수가 connector_name 또는 snowflake_share_name을 해석하지 못하면 이름이 올바른 대소문자를 사용하는지 확인해요. Snowflake 식별자는 따옴표로 묶으면 대소문자를 구분해요. 자세한 내용은 식별자 요구 사항 참고.
더 알아보기 (Learn more)
- Set Up SAP® BDC Connect for Snowflake Zerocopy Connector — 커넥터 설정
- Explore Data Products from SAP® BDC Connect for Snowflake — 데이터 제품 탐색
- CREATE SHARE — 공유 생성
- About Secure Data Sharing — 보안 데이터 공유