Explore Data Products from SAP® BDC Connect for Snowflake

Explore Data Products from SAP® BDC Connect for Snowflake (SAP® BDC Connect for Snowflake의 데이터 제품 탐색)

이 주제는 Zerocopy Connector를 사용해 사용 가능한 SAP® 데이터 제품을 나열하고, 카탈로그 연결 데이터베이스를 만들며, Snowflake에서 공유 데이터를 쿼리하는 방법을 설명해요.

출처: Snowflake Documentation

본문

이 주제의 단계를 수행하기 전에 커넥터가 CONNECTED 상태여야 해요.

SAP® BDC에서 Snowflake와 공유할 데이터 제품 선택

데이터 제품을 검색하고 Snowflake와 공유하려면 사용자가 중앙 SAP Business Data Cloud 카탈로그를 사용하고 다음 권한을 부여하는 글로벌 역할이 있어야 해요.

  • BDC Data Packages(읽기) - SAP Business Data Cloud에 접근.
  • Catalog Asset(읽기) - 카탈로그에 접근하고 Assets 및 Data Products 컬렉션의 객체를 봅니다.
  • Cloud Data Product(공유) - 데이터 제품을 대상 시스템에 공유.

이 권한이 있는 사용자는 SAP Business Data Cloud 카탈로그의 데이터 제품을 원하는 SAP Snowflake 계정과 공유해 그 계정의 특정 역할이 소비할 수 있게 만들 수 있어요.

데이터 제품을 Snowflake와 공유하려면:

  1. 중앙 SAP Business Data Cloud 카탈로그에서 SAP Snowflake 계정과 공유할 데이터 제품을 선택해요.
  2. Catalog & Marketplace에서 공유할 데이터 제품을 검색하거나(또는 필터 사용) 찾아요.
  3. 검색 결과에서 공유할 데이터 제품(예: 고객)의 Share를 선택해 Manage Share Access 대화 상자를 열어요.
  4. Overview 섹션에서 데이터 제품의 상세 정보와 사용 가능한 객체를 검토해 더 알아봐요.
  5. Target System 아래에서:
  6. 등록된 Zerocopy Connector가 있는 Snowflake 계정을 공유 대상으로 선택해요(둘 이상이라면).
  7. Update를 선택해요.

메시지가 공유 프로세스가 시작되었음을 확인해 줘요. 완료되면 알림이 결과를 보여 줘요.

Snowflake에서 공유 데이터 제품 나열

SAP® BDC가 Snowflake 계정과 공유한 데이터 제품을 나열하려면 SYSTEM$ZEROCOPY_CONNECTOR_LIST_SHARES 함수를 호출해요:

SELECT SYSTEM$ZEROCOPY_CONNECTOR_LIST_SHARES('my_db.my_schema.my_sap_connector');

이 함수는 JSON 배열을 반환해요. 각 요소는 하나의 공유 데이터 제품을 나타내요:

[
  {
    "name": "usid:b077d21c-b7a2-479a-a20e-bba1dbe91034:ns:sap.s4pce:r:SalesOrder:v:1",
    "id": "25c0de58-6e61-4bcc-ba68-c2c15b7a2d4b",
    "display_name": "Sales Order (BDF730, sap.s4pce:apiResource:SalesOrder:v1)",
    "comment": "An agreement between a vendor and a customer to provide products on a specific date.",
    "status": "MOUNTED",
    "catalog_linked_databases": [ { "name": "SALES_ORDER_CLD" } ],
    "properties": {
      "sap.ord.apiResource.ordId": "sap.s4pce:apiResource:SalesOrder:v1",
      "sap.ord.systemInstance.name": "BDF730",
      "sap.ord.systemInstance.id": "30f962e7-791c-41d7-9e72-1534823e8b21"
    }
  }
]

더 쉽게 필터링하고 검색하려면 PARSE_JSON과 LATERAL FLATTEN으로 JSON 출력을 테이블 형식으로 파싱해요:

WITH raw AS (
  SELECT PARSE_JSON(
    SYSTEM$ZEROCOPY_CONNECTOR_LIST_SHARES('my_db.my_schema.my_sap_connector')
  ) AS json_data
)
SELECT
  f.value:name::STRING                                         AS name,
  f.value:id::STRING                                           AS id,
  f.value:display_name::STRING                                 AS display_name,
  f.value:comment::STRING                                      AS comment,
  f.value:properties['sap.ord.apiResource.ordId']::STRING      AS api_resource_ord_id,
  f.value:properties['sap.ord.systemInstance.name']::STRING    AS system_instance_name,
  f.value:properties['sap.ord.systemInstance.id']::STRING      AS system_instance_id
FROM raw,
LATERAL FLATTEN(INPUT => json_data) f;

카탈로그 연결 데이터베이스 생성

공유된 SAP® 데이터 제품을 Snowflake에 마운트하려면 LINKED_ZEROCOPY_CONNECTOR 절을 사용해 카탈로그 연결 데이터베이스를 만들어요. 역할은 계정에 대한 CREATE DATABASE와 커넥터에 대한 USAGE가 필요해요. 카탈로그 연결 데이터베이스의 소유자는 커넥터의 소유자와 달라도 돼요.

CREATE DATABASE my_sales_order
  LINKED_ZEROCOPY_CONNECTOR = (
    CONNECTOR_NAME = 'my_db.my_schema.my_sap_connector',
    SHARE_NAME = 'usid:b077d21c-b7a2-479a-a20e-bba1dbe91034:ns:sap.s4pce:r:SalesOrder:v:1',
    SYNC_INTERVAL_SECONDS = 86400
  );

Note

카탈로그 연결 데이터베이스가 생성되면 SNOWFLAKE$라는 읽기 전용 스키마가 그 안에 자동으로 생성돼요. 이 스키마에는 SAP® Core Schema Notation(CSN)에서 생성된 시맨틱 뷰가 포함돼요. 시맨틱 뷰는 메트릭, 엔티티, 관계를 정의해 들어오는 공유 데이터에 비즈니스 의미를 더하며, 일관된 비즈니스 정의를 가능하게 하고 Snowflake의 SAP® 데이터 위에서 직접 Cortex Analyst 같은 AI 기능을 구동해요.

SYNC_INTERVAL_SECONDS를 사용해 Snowflake가 공유 데이터 제품의 스키마와 테이블 변경을 자동으로 발견하는 빈도를 제어해요. 값은 30~86400초(하루) 범위예요. SAP® BDC의 기본값은 86400초예요.

같은 커넥터에서 SAP® BDC에서 공유된 데이터 제품당 하나씩 여러 카탈로그 연결 데이터베이스를 만들 수 있어요.

데이터베이스가 생성되었는지 확인하려면 SHOW DATABASES를 사용해요:

SHOW DATABASES LIKE 'MY_SALES_ORDER%';

PII 태깅 및 마스킹

Snowflake는 데이터 제품과 함께 공유된 SAP® Core Schema Notation(CSN)의 주석에 따라 컬럼을 개인 식별 정보(PII)로 태깅해요.

  • CSN 메타데이터에서 PII로 식별된 컬럼은 카탈로그 연결 데이터베이스가 생성될 때 태깅돼요.
  • 마스킹 정책이 PII 태그에 연결되므로 ACCOUNTADMIN과 데이터베이스 소유 역할을 포함한 모든 역할에 대해 쿼리 결과가 기본적으로 마스킹돼요.

Important

PII를 볼 권한이 있는 역할에만 마스킹 해제 접근을 부여해요.

PII를 마스킹 해제하려면 데이터베이스 소유 역할이 마스킹 해제된 데이터를 봐야 하는 역할에 카탈로그 연결 데이터베이스의 자동 생성된 SNOWFLAKE$ 스키마의 UNMASK_PII 태그를 설정할 수 있어요:

ALTER ROLE my_role SET TAG my_sales_order."SNOWFLAKE$".UNMASK_PII = 'true';

데이터 탐색

카탈로그 연결 데이터베이스에서 사용 가능한 스키마와 테이블을 나열해요:

SHOW SCHEMAS IN DATABASE my_sales_order;

SHOW TABLES IN DATABASE my_sales_order;

데이터를 쿼리해요:

SELECT * FROM my_sales_order.salesorder.salesorder LIMIT 100;

여러 카탈로그 연결 데이터베이스에 걸쳐 테이블을 조인할 수 있어요. 예를 들어 두 공유 데이터 제품의 데이터로 매출 상위 고객을 찾으려면:

SELECT
  s.salesorder,
  s.soldtoparty,
  c.customername,
  c.country,
  s.totalnetamount
FROM my_sales_order.salesorder.salesorder s
JOIN my_customers.customer.customer c
  ON s.soldtoparty = c.customer
WHERE s.overallsdprocessingstatus != 'C'
ORDER BY s.totalnetamount DESC
LIMIT 10;

Create table as select (CTAS)

쿼리 결과를 네이티브 Snowflake 테이블로 영구화하려면 CREATE TABLE AS SELECT(CTAS)를 사용해요. 결과를 담을 새 데이터베이스를 만들어요:

CREATE DATABASE IF NOT EXISTS my_ctas_db;
USE DATABASE my_ctas_db;

CREATE OR REPLACE TABLE top_customers_by_revenue AS
SELECT
  c.customer,
  c.customername,
  c.country,
  c.region,
  c.businesstype,
  COUNT(DISTINCT s.salesorder)           AS num_orders,
  SUM(s.totalnetamount)                  AS total_revenue,
  AVG(s.totalnetamount)                  AS avg_order_amount
FROM my_customers.customer.customer c
JOIN my_sales_order.salesorder.salesorder s
  ON c.customer = s.soldtoparty
WHERE c.deletionindicator = FALSE
GROUP BY 1, 2, 3, 4, 5;

-- Query the result table
SELECT * FROM top_customers_by_revenue LIMIT 10;

카탈로그 연결 데이터베이스 드롭

커넥터를 연결 해제하거나 드롭하기 전에 모든 카탈로그 연결 데이터베이스를 드롭해야 해요. 카탈로그 연결 데이터베이스는 UNDROP을 지원하지 않아요.

DROP DATABASE my_sales_order;

더 알아보기 (Learn more)