Explore data products from Salesforce Data Cloud
Explore data products from Salesforce Data Cloud (Salesforce Data Cloud의 데이터 제품 탐색)
이 주제는 사용 가능한 Salesforce 데이터 제품을 나열하고, 카탈로그 연결 데이터베이스로 마운트하며, Snowflake에서 공유 데이터를 쿼리하는 방법을 설명해요.
본문
이 주제의 단계를 수행하기 전에:
- Zerocopy Connector가
CONNECTED상태여야 해요. Salesforce Data Cloud Zerocopy Connector 설정 참고. - Salesforce 관리자가 커넥터에 Data Share를 하나 이상 만들고 연결했어야 해요. Salesforce Data Cloud 제로 카피 설정 참고.
공유 데이터 제품 나열
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 사용
- Snowsight에서 Ingestion » Zero-Copy로 이동해요.
- Available connectors 탭을 선택하고 Salesforce 커넥터를 클릭해요.
- 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)
- Set up the Salesforce Data Cloud Zerocopy Connector — 커넥터 설정
- Set up Salesforce Data Cloud for Zero-Copy — Salesforce 측 설정
- Migrate from the legacy Snowflake data share target — 레거시 대상 마이그레이션
- Security and privileges — 보안·권한