Explore data products from Salesforce Data Cloud

Explore data products from Salesforce Data Cloud (Salesforce Data Cloud의 데이터 제품 탐색)

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

출처: Snowflake Documentation

본문

이 주제의 단계를 수행하기 전에:

공유 데이터 제품 나열

Salesforce 관리자가 Snowflake V2 Data Share Target에 Data Share를 연결한 후 SYSTEM$ZEROCOPY_CONNECTOR_LIST_SHARES를 호출해 사용 가능한 것을 확인해요:

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

이 함수는 JSON 배열을 반환해요. 각 요소는 하나의 공유 데이터 제품을 나타내요. name 필드는 카탈로그 연결 데이터베이스를 만들 때 SHARE_NAME 또는 SHARE_NAME_FILTER로 전달하는 값이에요.

[
  {
    "name": "contact_v1",
    "status": "UNMOUNTED",
    "catalog_linked_databases": []
  },
  {
    "name": "opportunity_v1",
    "status": "MOUNTED",
    "catalog_linked_databases": [ { "name": "MARKETINGSHARE" } ]
  }
]

status 필드는 데이터 공유가 마운트 가능한지 또는 이미 마운트되었는지 나타내요.

상태 설명
UNMOUNTED Salesforce Data Cloud가 공유함. 아직 카탈로그 연결 데이터베이스가 생성되지 않음.
MOUNTED 이 공유에 대한 카탈로그 연결 데이터베이스가 존재함.

출력을 테이블 형식으로 파싱하려면:

WITH raw AS (
  SELECT PARSE_JSON(
    SYSTEM$ZEROCOPY_CONNECTOR_LIST_SHARES('my_db.my_schema.my_sfdc_connector')
  ) AS json_data
)
SELECT
  f.value:name::STRING                                              AS share_name,
  f.value:status::STRING                                           AS status,
  CASE
    WHEN ARRAY_SIZE(f.value:catalog_linked_databases) > 0
    THEN f.value:catalog_linked_databases[0]:name::STRING
    ELSE NULL
  END                                                              AS mounted_database
FROM raw,
LATERAL FLATTEN(INPUT => json_data) f;

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

공유를 마운트하면 공유 데이터를 쿼리 가능한 스키마로 포함하는 카탈로그 연결 데이터베이스가 생성돼요. Snowflake가 그 위에 뷰를 자동으로 만들어요.

Snowsight UI 또는 SQL로 마운트할 수 있어요.

Snowsight 사용

  1. Snowsight에서 Ingestion » Zero-Copy로 이동해요.
  2. Available connectors 탭을 선택하고 Salesforce 커넥터를 클릭해요.
  3. Catalog linked databases 탭에서 Mount all data shares를 클릭해요.

카탈로그 연결 데이터베이스가 즉시 생성돼요.

SQL 사용

-- (Recommended) Mount all shares — each share becomes a schema
CREATE DATABASE my_sfdc_db
  LINKED_ZEROCOPY_CONNECTOR = (
    CONNECTOR_NAME = 'my_db.my_schema.my_sfdc_connector',
    ALL_SHARES = TRUE
  );

-- Mount a filtered set of shares
CREATE DATABASE my_sfdc_db
  LINKED_ZEROCOPY_CONNECTOR = (
    CONNECTOR_NAME = 'my_db.my_schema.my_sfdc_connector',
    SHARE_NAME_FILTER = ('share1', 'share2')
  );

-- Mount a single share
CREATE DATABASE my_sfdc_db
  LINKED_ZEROCOPY_CONNECTOR = (
    CONNECTOR_NAME = 'my_db.my_schema.my_sfdc_connector',
    SHARE_NAME = 'my_share'
  );

-- Mount all shares, setting the optional properties
CREATE DATABASE my_sfdc_db
  LINKED_ZEROCOPY_CONNECTOR = (
    CONNECTOR_NAME = 'my_db.my_schema.my_sfdc_connector',
    ALL_SHARES = TRUE,
    SYNC_INTERVAL_SECONDS = 300,
    LEGACY_SALESFORCE_SCHEMA_ALIAS = FALSE,
    SALESFORCE_USER_FRIENDLY_NAME = TRUE
  );

LEGACY_SALESFORCE_SCHEMA_ALIAS와 SALESFORCE_USER_FRIENDLY_NAME은 Salesforce 커넥터에만 적용되며 데이터베이스를 만들 때만 설정할 수 있어요.

다음 속성들은 모두 선택 사항이에요.

속성 기본값 설명
SYNC_INTERVAL_SECONDS Salesforce 커넥터는 300(5분) 자동 테이블 발견이 Salesforce 카탈로그의 구조적 변경(예: 새 데이터 공유)을 찾는 빈도. 값은 30~86400초(하루) 범위. 다른 두 속성과 달리 생성 후 ALTER DATABASE <cld_name> UPDATE LINKED_ZEROCOPY_CONNECTOR SET SYNC_INTERVAL_SECONDS = 로 변경할 수 있음.
LEGACY_SALESFORCE_SCHEMA_ALIAS FALSE TRUE이면 각 마운트된 공유를 Data Cloud V1 스키마 이름(schema_<share_name>)으로도 노출해, 레거시 대상에서 만든 데이터베이스에 대해 작성된 세 부분(three-part) 참조가 카탈로그 연결 데이터베이스로 교체한 후에도 여전히 해석되게 함. 자세한 내용은 레거시 Snowflake 데이터 공유 대상에서 마이그레이션 참고.
SALESFORCE_USER_FRIENDLY_NAME TRUE TRUE이면 각 객체에 대해 짧은 이름의 뷰도 노출하며, 뷰 이름에서 객체 유형 접미사(__dll, __dlm, __cio)를 제거하고 컬럼 이름에서 __c 접미사를 제거함. 예를 들어 Case_Home__dll은 Case_Home으로, 그 AccountId__c 컬럼은 AccountId로도 사용 가능.

데이터베이스가 생성되었는지 확인하려면:

SHOW DATABASES LIKE 'MY_SFDC_DB%';

데이터 탐색

데이터 모델 개요

공유를 마운트하면 각 데이터 공유가 카탈로그 연결 데이터베이스 안의 스키마로 나타나요. 각 스키마 안에서 Salesforce 데이터 객체는 뷰로 노출돼요.

스키마와 뷰 발견

-- Data shares are mounted as schemas in the catalog-linked database
SHOW SCHEMAS IN DATABASE my_sfdc_db;

-- Views are the queryable layer — use these for all queries
SHOW VIEWS IN SCHEMA my_sfdc_db.my_share_schema;

-- Inspect columns before querying
SHOW COLUMNS IN VIEW my_sfdc_db.my_share_schema.ssot__Account__dlm;

Note

뷰는 카탈로그 연결 데이터베이스가 마운트된 직후 생성돼요. SHOW VIEWS가 즉시 결과를 반환하지 않으면 1분 기다렸다가 다시 시도해요.

데이터 쿼리

각 스키마의 뷰를 통해 Salesforce 데이터를 쿼리해요. 뷰 이름은 Salesforce 관리자가 Data Share에 포함한 것에 따라 결정돼요.

-- Query a Data Lake Object (DLO)
SELECT * FROM my_sfdc_db.my_share_schema.Case_Home__dll LIMIT 10;

-- Query a Data Model Object (DMO)
SELECT * FROM my_sfdc_db.my_share_schema.ssot__PriceBook__dlm LIMIT 10;

-- Query a Calculated Insights Object (CIO)
SELECT * FROM my_sfdc_db.my_share_schema.Product_Sku_Aggregation__cio LIMIT 10;

my_sfdc_db, my_share_schema, 뷰 이름을 환경에서 SHOW SCHEMAS, SHOW VIEWS가 반환한 실제 값으로 바꿔요.

Create table as select (CTAS)

쿼리 결과를 대시보드, ML 모델, 데이터 공유에 사용할 네이티브 Snowflake 테이블로 영구화하려면:

CREATE DATABASE IF NOT EXISTS my_ctas_db;
USE DATABASE my_ctas_db;

-- Snapshot a Salesforce data model object into a native Snowflake table
CREATE OR REPLACE TABLE account_snapshot AS
SELECT *
FROM my_sfdc_db.my_share_schema.ssot__Account__dlm;

SELECT * FROM account_snapshot LIMIT 10;

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

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

DROP DATABASE my_sfdc_db;

더 알아보기 (Learn more)