다이나믹 테이블을 다른 계정과 공유하기

다이나믹 테이블을 다른 계정과 공유하기

프로바이더는 share를 통해 SELECT를 부여해 다이나믹 테이블을 공유합니다. 소비자는 그 테이블을 직접 조회하거나 그 위에 자신의 파이프라인을 구축할 수 있어요. 이 페이지는 두 워크플로우를 모두 다룹니다.

전체 문법 레퍼런스는 CREATE SHARE를 참고하세요.

출처: Snowflake 문서

본문

프로바이더 워크플로우: 다이나믹 테이블 공유

다이나믹 테이블을 공유하려면 share를 만들고, 필요한 데이터베이스·스키마 권한을 부여한 다음, 다이나믹 테이블에 SELECT를 부여하면 됩니다.

공유 전에 변경 추적 활성화

소비자는 공유 객체에서 변경 추적을 활성화할 수 없으므로, 프로바이더는 각 base table을 share에 추가하기 전에 ALTER TABLE <name> SET CHANGE_TRACKING = TRUE를 실행해야 합니다.

다이나믹 테이블을 share에 부여

다음 예시는 하나의 다이나믹 테이블을 한 소비자 계정과 공유합니다:

-- share를 만들고 필요한 권한을 부여
CREATE SHARE analytics_share;

GRANT USAGE ON DATABASE analytics_db TO SHARE analytics_share;
GRANT USAGE ON SCHEMA analytics_db.public TO SHARE analytics_share;
GRANT SELECT ON DYNAMIC TABLE analytics_db.public.dt_orders_daily TO SHARE analytics_share;

-- 스키마의 모든 다이나믹 테이블을 공유하려면 ALL DYNAMIC TABLES를 대신 사용:
-- GRANT SELECT ON ALL DYNAMIC TABLES IN SCHEMA analytics_db.public TO SHARE analytics_share;

-- 소비자 계정 추가 (여러 계정은 쉼표로 구분)
ALTER SHARE analytics_share ADD ACCOUNTS = consumer_org.consumer_account;

리전 및 클라우드 간 공유

소비자 워크플로우: 공유된 다이나믹 테이블 조회

소비자 계정은 공유된 다이나믹 테이블을 다른 공유 객체처럼 조회할 수 있어요. 프로바이더의 리프레시 스케줄이 계속 실행되고, 소비자는 최신 리프레시된 데이터를 봅니다.

share에서 데이터베이스 생성

CREATE DATABASE shared_analytics FROM SHARE provider_org.provider_account.analytics_share;

GRANT IMPORTED PRIVILEGES ON DATABASE shared_analytics TO ROLE analyst_role;

공유된 다이나믹 테이블 조회

SELECT order_day, region, order_count, daily_revenue
FROM shared_analytics.public.dt_orders_daily
ORDER BY order_day DESC
LIMIT 5;
+------------+---------+-------------+---------------+
| ORDER_DAY  | REGION  | ORDER_COUNT | DAILY_REVENUE |
|------------+---------+-------------+---------------|
| 2025-01-16 | EU-West |           1 |         62.50 |
| 2025-01-15 | US-West |           2 |        149.97 |
| 2025-01-15 | US-East |           1 |         49.99 |
+------------+---------+-------------+---------------+

참고: share 경계는 파이프라인 경계입니다. 소비자 테이블과 프로바이더 테이블은 독립적으로 리프레시되며, 계정 간 조정된 스케줄링이나 target lag 전파는 없어요.

소비자 워크플로우: 공유 데이터 위에 파이프라인 구축

소비자는 공유 데이터 위에 다이나믹 테이블을 만들 수 있어요. 패턴은 프로바이더가 base table, 다이나믹 테이블, 뷰 중 무엇을 공유했는지에 따라 달라집니다.

공유된 base table 위에

프로바이더가 공유 전에 base table에서 변경 추적을 활성화했다면, 소비자는 직접 다이나믹 테이블을 만들 수 있어요. 이는 프로바이더가 변경 추적된 base table 위에서 뷰 의존성에 다이나믹 테이블이 없는 뷰(secure 또는 non-secure)를 공유할 때도 동작합니다.

CREATE OR REPLACE DYNAMIC TABLE dt_consumer_summary
  TARGET_LAG = '1 hour'
  WAREHOUSE = transform_wh
AS
  SELECT
    order_date::DATE AS order_day,
    COUNT(*) AS total_orders,
    SUM(quantity * unit_price) AS total_revenue
  FROM shared_analytics.public.raw_orders
  GROUP BY ALL;

공유된 다이나믹 테이블 위에

소비자가 공유된 다이나믹 테이블 위에 다이나믹 테이블을 만들면, share 경계가 두 파이프라인을 분리합니다. 리프레시(증가분 포함)는 계정 간 조정 없이 독립적으로 실행돼요.

CREATE OR REPLACE DYNAMIC TABLE dt_regional_report
  TARGET_LAG = '30 minutes'
  WAREHOUSE = transform_wh
AS
  SELECT * FROM shared_analytics.public.dt_orders_daily
  WHERE region = 'US-West';

소비자의 target lag는 프로바이더의 것과 독립적입니다. 소비자 다이나믹 테이블은 각 리프레시에서 프로바이더의 최신 사용 가능 데이터를 봅니다. share 경계를 넘는 스냅샷 격리는 없어요.

share 경계를 넘는 모니터링: 프로바이더 데이터가 stale해도 리프레시 이력은 SUCCEEDED로 표시됩니다. 프로바이더의 리프레시 상태를 직접 모니터링할 수 없어요. 예상치 못한 갱신을 감지하려면: 몇 번의 리프레시 주기 동안 결과가 동일하다면 프로바이더가 리프레시를 중단했을 수 있습니다.

다이나믹 테이블을 참조하는 공유 뷰 위에

프로바이더가 의존성에 다이나믹 테이블을 포함하는 뷰(secure 또는 non-secure)를 공유하면, 그 뷰를 DYNAMIC_TABLE_REFRESH_BOUNDARY()로 감싸세요:

Snowflake는 다른 계정에서 온 뷰의 다이나믹 테이블 의존성에 대해 리프레시 스케줄을 조정할 수 없습니다. 래퍼는 Snowflake가 그 뷰를 독립적으로 리프레시되는 입력으로 취급하도록 지시합니다.

CREATE OR REPLACE DYNAMIC TABLE dt_from_shared_view
  TARGET_LAG = '1 hour'
  WAREHOUSE = transform_wh
AS
  SELECT * FROM DYNAMIC_TABLE_REFRESH_BOUNDARY(shared_analytics.public.v_daily_metrics);

경계 래퍼 없이는 문장이 실패합니다. 공유 뷰가 다이나믹 테이블에 의존하는지 확실하지 않다면, DYNAMIC_TABLE_REFRESH_BOUNDARY()로 감싸는 것은 항상 안전합니다. 이 함수는 뷰의 의존성에 다이나믹 테이블이 없을 때는 아무 효과가 없어요.

파이프라인 경계에 대한 전체 설명(같은 계정 시나리오 포함)은 Decouple pipelines with DYNAMIC_TABLE_REFRESH_BOUNDARY()를 참고하세요.

지원되는 공유 패턴

프로바이더가 공유 소비자가 조회 가능? 소비자가 그 위에 다이나믹 테이블 구축 가능?
다이나믹 테이블 예 예
base table (변경 추적 활성화) 예 예
뷰 (뷰 의존성에 다이나믹 테이블 없음) 예 예 (뷰의 base table에서 변경 추적이 활성화된 경우)
뷰 (뷰 의존성에 다이나믹 테이블 있음) 예 예 (뷰를 DYNAMIC_TABLE_REFRESH_BOUNDARY()로 감싸야 함)

에러: 변경 추적이 활성화되지 않음

프로바이더가 base table을 공유하기 전에 변경 추적을 활성화하지 않았다면, 소비자는 다이나믹 테이블을 만들 때 이 에러를 봅니다:

CREATE OR REPLACE DYNAMIC TABLE dt_consumer_summary
  TARGET_LAG = '1 hour'
  WAREHOUSE = transform_wh
AS
  SELECT * FROM shared_analytics.public.raw_orders;
091930 (2F003): SQL compilation error:
Change tracking is not enabled or has been missing for the time
range requested on table 'SHARED_ANALYTICS.PUBLIC.RAW_ORDERS'.

수정하려면 프로바이더에게 base table에서 ALTER TABLE <name> SET CHANGE_TRACKING = TRUE를 실행해 달라고 요청하세요.

더 알아보기 (Learn more)