리전 간 데이터 공유는 다음과 같은 클라우드 플랫폼에서 호스팅되는 Snowflake 계정에서 지원됩니다.
예 1: 데이터 공유하기
데이터 공급자인 Acme는 다른 리전의 데이터 컨슈머와 데이터를 공유하려고 합니다.
원본 계정에서 실행하기
다른 리전으로 복제할 데이터베이스와 공유가 포함된 복제 그룹을 생성하려면 다음 SQL 문을 실행하십시오.
데이터베이스 db1
을 포함하는 복제 그룹 my_rg
를 생성하고 share1
을 공유하여 acme
조직의 계정 account_2
에 복제합니다.
USE ROLE ACCOUNTADMIN;
CREATE REPLICATION GROUP my_rg
OBJECT_TYPES = databases, shares
ALLOWED_DATABASES = db1
ALLOWED_SHARES = share1
ALLOWED_ACCOUNTS = acme.account_2;
대상 계정에서 실행하기
다른 리전의 대상 계정에서 다음 SQL 문을 실행합니다.
account_2
에 보조 복제 그룹을 생성합니다.
USE ROLE ACCOUNTADMIN;
CREATE REPLICATION GROUP my_rg
AS REPLICA OF acme.account1.my_rg;
데이터베이스와 공유를 account_2
에 복제하려면 복제 그룹을 수동으로 새로 고치십시오.
ALTER REPLICATION GROUP my_rg REFRESH;
1개 이상의 컨슈머 계정을 share1
에 추가합니다.
ALTER SHARE share1 ADD ACCOUNTS = consumer_org.consumer_account_name;
원본 계정에서 ALTER REPLICATION GROUP 명령을 사용하여 기본 복제 그룹에 대한 REPLICATION_SCHEDULE 매개 변수를 설정하면 새로 고침 작업을 자동화할 수 있습니다. 자세한 내용은 복제 일정 섹션을 참조하십시오.
예 2: 데이터베이스의 데이터 서브세트 공유하기
데이터 공급자인 Acme는 다른 리전의 데이터 컨슈머와 데이터의 하위 세트를 공유하려고 합니다. 복제 비용을 줄이기 위해 Acme는 마스터 테이블에서 관련 행만 복제하려고 합니다. 복제는 데이터베이스 수준에서 수행되므로 이 예에서는 Acme가 스트림과 작업을 사용하여 주 데이터베이스에서 새 데이터베이스로 원하는 행을 복사하고, 공유를 생성하고 뷰에 대한 권한을 부여하고, 컨슈머 액세스를 위해 복제 그룹에서 두 가지를 모두 다른 리전의 계정으로 복제하는 방법을 설명합니다. 이 시나리오에서는 새 데이터베이스와 공유가 데이터 복제의 기본 오브젝트로 지정됩니다.
원본 계정에서 실행하기
다음 SQL 명령을 사용하여 원본 계정에 새 데이터베이스를 만들고 복제를 활성화합니다.
로컬 계정에서 원본 데이터가 포함된 데이터베이스의 데이터 서브세트로 데이터베이스 db1
을 만듭니다.
USE ROLE ACCOUNTADMIN;
CREATE DATABASE db1;
CREATE SCHEMA db1.sch;
CREATE TABLE db1.sch.table_b AS
SELECT customerid, user_order_count, total_spent
FROM source_db.sch.table_a
WHERE REGION='azure_eastus2';
공유할 데이터로 보안 뷰를 만듭니다.
CREATE SECURE VIEW db1.sch.view1 AS
SELECT customerid, user_order_count, total_spent
FROM db1.sch.table_b;
원본 테이블에 대한 변경 사항을 기록하는 스트림을 만듭니다.
CREATE STREAM mystream ON TABLE source_db.sch.table_a APPEND_ONLY = TRUE;
원본 데이터의 변경 사항을 사용하여 db1
의 테이블에 데이터를 삽입하는 작업을 만듭니다.
CREATE TASK mytask1
WAREHOUSE = mywh
SCHEDULE = '5 minute'
WHEN
SYSTEM$STREAM_HAS_DATA('mystream')
AS
INSERT INTO table_b(CUSTOMERID, USER_ORDER_COUNT, TOTAL_SPENT)
SELECT customerid, user_order_count, total_spent
FROM mystream
WHERE region='azure_eastus2'
AND METADATA$ACTION = 'INSERT';
데이터 업데이트 작업을 시작합니다.
ALTER TASK mytask1 RESUME;
공유를 만들고 공유에 대한 권한을 부여합니다.
CREATE SHARE share1;
GRANT USAGE ON DATABASE db1 TO SHARE share1;
GRANT USAGE ON SCHEMA db1.sch TO SHARE share1;
GRANT SELECT ON VIEW db1.sch.view1 TO SHARE share1;
데이터베이스와 공유를 포함한 기본 복제 그룹을 만듭니다.
CREATE REPLICATION GROUP my_rg
OBJECT_TYPES = DATABASES, SHARES
ALLOWED_DATABASES = db1
ALLOWED_SHARES = share1
ALLOWED_ACCOUNTS = acme_org.account_2;
대상 계정에서 실행하기
다른 리전의 대상 계정에서 다음 SQL 명령을 실행합니다.
원본 계정에서 데이터베이스와 공유를 복제하기 위한 보조 복제 그룹을 만듭니다.
USE ROLE ACCOUNTADMIN;
CREATE REPLICATION GROUP my_rg
AS REPLICA OF acme_org.account_1.my_rg;
그룹을 수동으로 새로 고쳐 오브젝트를 현재 계정에 복제합니다.
ALTER REPLICATION GROUP my_rg REFRESH;
하나 이상의 컨슈머 계정을 공유에 추가합니다.
ALTER SHARE share1 ADD ACCOUNTS = consumer_org.consumer_account_name;
원본 계정에서 ALTER REPLICATION GROUP 명령을 사용하여 기본 복제 그룹에 대한 REPLICATION_SCHEDULE 매개 변수를 설정하면 새로 고침 작업을 자동화할 수 있습니다. 자세한 내용은 복제 일정 섹션을 참조하십시오.
예 3: 여러 데이터베이스의 데이터 공유하기
데이터 공급자인 Acme는 다른 리전의 데이터 컨슈머와 여러 데이터베이스의 데이터를 공유하려고 합니다. 보안 뷰와 공유를 만든 다음(지침은 여러 데이터베이스에서 데이터 공유하기 참조), 모든 데이터베이스를 복제하고 데이터를 다른 리전의 계정에 복제하도록 복제 그룹에 공유합니다.
원본 계정에서 실행하기
데이터베이스를 포함하는 복제 그룹 my_rg
를 생성하고 예 1: 기존 데이터베이스에서 보안 뷰 생성 및 공유 에서 공유하여 acme
조직의 account_2
에 복제합니다.
CREATE REPLICATION GROUP my_rg
OBJECT_TYPES = databases, shares
ALLOWED_DATABASES = database1, database2, database3
ALLOWED_SHARES = share1
ALLOWED_ACCOUNTS = acme.account_2;
대상 계정에서 실행하기
다른 리전의 대상 계정에서 다음 SQL 명령을 실행합니다.
원본 계정에서 데이터베이스와 공유를 복제하기 위한 보조 복제 그룹을 만듭니다.
USE ROLE ACCOUNTADMIN;
CREATE REPLICATION GROUP my_rg
AS REPLICA OF acme_org.account_1.my_rg;
그룹을 수동으로 새로 고쳐 오브젝트를 현재 계정에 복제합니다.
ALTER REPLICATION GROUP my_rg REFRESH;
하나 이상의 컨슈머 계정을 공유에 추가합니다.
ALTER SHARE share1 ADD ACCOUNTS = consumer_org.consumer_account_name;
원본 계정에서 ALTER REPLICATION GROUP 명령을 사용하여 기본 복제 그룹에 대한 REPLICATION_SCHEDULE 매개 변수를 설정하면 새로 고침 작업을 자동화할 수 있습니다. 자세한 내용은 복제 일정 섹션을 참조하십시오.