Snowflake 관리형 Apache Iceberg™ 테이블에 대한 복제 구성¶
이 기능을 사용하면 소스 계정에서 동일한 조직에 있는 하나 이상의 대상 계정으로 :ref:`Snowflake 관리형 Apache Iceberg™ 테이블<label-tables_iceberg_snowflake_as_catalog>`을 복제할 수 있습니다.
Iceberg 테이블에 대한 복제는 일반 Snowflake 테이블에 대한 복제와 유사하게 작동합니다. Snowflake는 장애 조치 또는 복제 그룹에 상위 데이터베이스를 추가할 때 Iceberg 테이블을 복제합니다.
그러나 Snowflake 관리형 Iceberg 테이블은 외부 클라우드 저장소에 연결하기 위해 추가 구성이 필요한 계정 수준 오브젝트인 외부 볼륨을 사용합니다. Iceberg 테이블을 복제하려면 먼저 외부 볼륨에 대한 복제를 구성해야 합니다.
Snowflake 관리형 Iceberg 테이블의 복제를 위한 공개 미리 보기 옵트인¶
이 공개 미리 보기를 옵트인하려면 소스 계정과 대상 계정을 모두 옵트인해야 합니다.
소스 계정을 옵트인하려면 계정에 대해 미리 보기 기능을 활성화</release-notes/preview-features>`한 후 :doc:/sql-reference/sql/alter-account` 명령을 사용하여 계정 수준에서 다음 매개 변수를 활성화합니다.
ENABLE_ICEBERG_MANAGED_TABLE_REPLICATION
참고
장애 조치 그룹 수준에서 이 매개 변수를 활성화할 수도 있습니다.
ENABLE_SELECTIVE_EXTERNAL_VOLUME_REPLICATION_PUPR
예:
ALTER ACCOUNT SET ENABLE_ICEBERG_MANAGED_TABLE_REPLICATION = TRUE ENABLE_SELECTIVE_EXTERNAL_VOLUME_REPLICATION_PUPR = TRUE;
대상 계정에 대해 이전 단계를 반복합니다.
복제 활성화¶
ORGADMIN 역할이 있는 사용자는 조직의 각 원본 및 대상 계정에 대해 복제를 활성화해야 합니다.
USE ROLE ORGADMIN;
SELECT SYSTEM$GLOBAL_ACCOUNT_SET_PARAMETER(
'<organization_name>.<account_name>',
'ENABLE_ACCOUNT_DATABASE_REPLICATION',
'true');
자세한 내용은 :ref:`전제 조건: 조직의 계정에 대한 복제 활성화<label-enabling_accounts_for_replication>`를 참조하세요.
복제에 대한 자세한 내용은 여러 계정에 걸쳐 복제 및 장애 조치 도입 섹션을 참조하십시오.
장애 조치 그룹을 사용하여 외부 볼륨 복제¶
이러한 단계에서는 장애 조치 그룹을 사용하여 외부 볼륨과 이에 종속된 Iceberg 테이블을 대상 계정에 복제하기 위한 샘플 워크플로를 제공합니다.
중요
소스 계정의 장애 조치 그룹에 외부 볼륨이 포함된 경우 Snowflake는 새로 고침 작업 중에 대상 계정에서 대상 계정의 기존 외부 볼륨을 삭제합니다.
예:
새로 고침 작업 중에 Snowflake는 대상 계정에서 ext_vol_1``의 복제본을 생성하거나 동기화하지만 대상 계정에서 ``ext_vol_2 및 ``ext_vol_3``을 삭제합니다.
참고
아직 외부 볼륨이 없는 경우 대상 계정과 *동일한 리전*에 있는 위치를 포함하여 원하는 저장소 위치의 볼륨을 생성할 수 있습니다. 각 위치에 대한 저장소 액세스를 구성한 후 외부 볼륨을 참조하는 Iceberg 테이블을 생성하고 복제할 수 있습니다.
외부 볼륨을 생성하려면 외부 볼륨 구성 섹션을 참조하십시오.
소스 계정에서 외부 볼륨을 업데이트하여 대상 계정과 *동일한 리전*에 있는 저장소 위치를 추가합니다.
예:
ALTER EXTERNAL VOLUME exvol1 ADD STORAGE_LOCATION = ( NAME = 'my-s3-us-central-2' STORAGE_PROVIDER = 'S3' STORAGE_BASE_URL = 's3://my_bucket_us_central-2/' STORAGE_AWS_ROLE_ARN = 'arn:aws:iam::123456789012:role/myrole' STORAGE_AWS_EXTERNAL_ID = 'iceberg_table_external_id' );
중요
S3 저장소에 대해 자체
STORAGE_AWS_EXTERNAL_ID`를 지정하지 않으면 새 저장소 위치를 추가한 후 :doc:/sql-reference/sql/desc-external-volume`을 호출하여 Snowflake에서 생성된 외부 ID를 검색해야 합니다. 다음 단계에서 S3에 대한 액세스를 구성하려면 외부 ID가 필요합니다.Snowflake는 이 새 위치를 보조 외부 볼륨의 :ref:`활성 저장소 위치<label-tables_iceberg_ext_vol_active_storage_location>`로 설정합니다.
소스 계정에서 추가 저장소 위치로 업데이트한 외부 볼륨을 사용하는 Snowflake 관리형 Iceberg 테이블을 생성합니다.
예:
CREATE ICEBERG TABLE my_iceberg_table (amount int) CATALOG = 'SNOWFLAKE' EXTERNAL_VOLUME = 'exvol1' BASE_LOCATION = 'my_iceberg_table';
소스 계정에서 다음 단계에 따라 *대상 계정*에 대한 Snowflake 서비스 주체 정보를 검색합니다.
SHOW REPLICATION ACCOUNTS 명령을 사용하여 대상 계정의 이름(
account_name)을 검색합니다.SHOW REPLICATION ACCOUNTS LIKE 'my_target_account%';
SYSTEM$DESC_ICEBERG_ACCESS_IDENTITY 시스템 함수를 호출합니다. 대상 저장소 위치에 대한 클라우드 공급자와 SHOW REPLICATION ACCOUNTS 출력의
account_name열에 나타나는 대상 계정의 이름을 정확히 지정합니다.예:
SELECT SYSTEM$DESC_ICEBERG_ACCESS_IDENTITY('S3', 'MY_TARGET_ACCOUNT_1');
대상 계정과 연결된 저장소 위치에 대한 Snowflake 액세스를 구성합니다. 대상 계정의 서비스 주체에 대해 검색한 정보를 사용하여 클라우드 공급자의 지침을 따릅니다.
Amazon S3의 외부 볼륨 구성하기. 대상 계정의 저장소 위치와 연결된 외부 ID를 사용합니다.
Azure의 외부 볼륨 구성. SYSTEM$DESC_ICEBERG_ACCESS_IDENTITY에서 반환된 :code:`AZURE_CONSENT_URL TEMPLATE`에서 :samp:`{your_tenant_id}`를 저장소 위치가 속한 테넌트의 ID로 바꿉니다.
소스 계정에서 CREATE FAILOVER GROUP 명령을 사용하여 장애 조치 그룹을 생성합니다.
OBJECT_TYPES목록에서 ``EXTERNAL VOLUMES``를 지정합니다.ALLOWED_DATABASES목록에서 복제하려는 Iceberg 테이블이 있는 데이터베이스를 포함합니다.ALLOWED_EXTERNAL_VOLUMES목록에서 복제하려는 Iceberg 테이블에 대한 액세스를 제공하는 외부 볼륨을 포함합니다.CREATE FAILOVER GROUP my_iceberg_fg OBJECT_TYPES = DATABASES, EXTERNAL VOLUMES ALLOWED_DATABASES = my_iceberg_database ALLOWED_EXTERNAL_VOLUMES = my_external_volume ALLOWED_ACCOUNTS = myorg.my_account_1;
참고
SQL 구문 분석기 오류가 발생하는 경우 허용된 외부 볼륨 목록이 너무 긴 것일 수 있습니다. 이 오류가 발생하면 CREATE FAILOVER GROUP 문에서 이 목록을 줄인 다음, ALTER FAILOVER GROUP 명령을 사용하여 허용된 외부 볼륨을 장애 조치 그룹에 추가합니다.
기존 그룹을 업데이트하려면 ALTER FAILOVER GROUP 명령을 사용하여
OBJECT_TYPES목록에EXTERNAL VOLUMES`를 추가합니다. 대상 계정에서 이러한 오브젝트가 삭제되지 않도록 :code:`OBJECT_TYPES목록에 다른 기존 오브젝트를 모두 포함하세요.예를 들어, :code:`DATABASES`가 이미 포함된 장애 조치 그룹에는 :code:`EXTERNAL VOLUMES`를 추가합니다.
ALTER FAILOVER GROUP my_iceberg_rg SET OBJECT_TYPES = DATABASES, EXTERNAL VOLUMES ALLOWED_EXTERNAL_VOLUMES = my_external_volume;
대상 계정에서 장애 조치 그룹을 소스 계정(
my_source_account)에 있는 그룹의 복제본으로서 생성합니다.CREATE FAILOVER GROUP my_iceberg_fg AS REPLICA OF myorg.my_source_account.my_iceberg_fg;
소스 계정에 그룹을 복제하는 보조 그룹이 이미 있는 경우 이 단계를 건너뛰세요.
대상 계정에서 새로 고침 명령을 실행합니다.
ALTER FAILOVER GROUP my_iceberg_fg REFRESH;
Snowflake 관리형 Iceberg 테이블이 포함된 데이터베이스를 복제하고 대상 계정의 클라우드 저장소에 대한 액세스를 구성한 경우 Snowflake는 대상 계정에서 테이블을 복제합니다.
참고
Snowflake가 대상 계정에 대해 구성된 저장소 위치에 액세스할 수 없는 경우 새로 고침 작업이 실패합니다. 이 경우 액세스 제어 설정을 다시 확인하거나 :ref:`label-tables_iceberg_storage_verify_storage_access`를 시도하세요.
복제 그룹을 사용하여 외부 볼륨 복제¶
이러한 단계에서는 복제 그룹을 사용하여 외부 볼륨과 이에 종속된 Iceberg 테이블을 대상 계정에 복제하기 위한 샘플 워크플로를 제공합니다.
중요
소스 계정의 복제 그룹에 외부 볼륨이 포함된 경우 Snowflake는 새로 고침 작업 중에 대상 계정에서 대상 계정의 기존 외부 볼륨을 삭제합니다.
예:
새로 고침 작업 중에 Snowflake는 대상 계정에서 ext_vol_1``의 복제본을 생성하거나 동기화하지만 대상 계정에서 ``ext_vol_2 및 ``ext_vol_3``을 삭제합니다.
참고
아직 외부 볼륨이 없는 경우 대상 계정과 *동일한 리전*에 있는 위치를 포함하여 원하는 저장소 위치의 볼륨을 생성할 수 있습니다. 각 위치에 대한 저장소 액세스를 구성한 후 외부 볼륨을 참조하는 Iceberg 테이블을 생성하고 복제할 수 있습니다.
외부 볼륨을 생성하려면 외부 볼륨 구성 섹션을 참조하십시오.
소스 계정에서 외부 볼륨을 업데이트하여 대상 계정과 *동일한 리전*에 있는 저장소 위치를 추가합니다.
예:
ALTER EXTERNAL VOLUME exvol1 ADD STORAGE_LOCATION = ( NAME = 'my-s3-us-central-2' STORAGE_PROVIDER = 'S3' STORAGE_BASE_URL = 's3://my_bucket_us_central-2/' STORAGE_AWS_ROLE_ARN = 'arn:aws:iam::123456789012:role/myrole' STORAGE_AWS_EXTERNAL_ID = 'iceberg_table_external_id' );
중요
S3 저장소에 대해 자체
STORAGE_AWS_EXTERNAL_ID`를 지정하지 않으면 새 저장소 위치를 추가한 후 :doc:/sql-reference/sql/desc-external-volume`을 호출하여 Snowflake에서 생성된 외부 ID를 검색해야 합니다. 다음 단계에서 S3에 대한 액세스를 구성하려면 외부 ID가 필요합니다.Snowflake는 이 새 위치를 보조 외부 볼륨의 :ref:`활성 저장소 위치<label-tables_iceberg_ext_vol_active_storage_location>`로 설정합니다.
소스 계정에서 추가 저장소 위치로 업데이트한 외부 볼륨을 사용하는 Snowflake 관리형 Iceberg 테이블을 생성합니다.
예:
CREATE ICEBERG TABLE my_iceberg_table (amount int) CATALOG = 'SNOWFLAKE' EXTERNAL_VOLUME = 'exvol1' BASE_LOCATION = 'my_iceberg_table';
소스 계정에서 다음 단계에 따라 *대상 계정*에 대한 Snowflake 서비스 주체 정보를 검색합니다.
SHOW REPLICATION ACCOUNTS 명령을 사용하여 대상 계정의 이름(
account_name)을 검색합니다.SHOW REPLICATION ACCOUNTS LIKE 'my_target_account%';
SYSTEM$DESC_ICEBERG_ACCESS_IDENTITY 시스템 함수를 호출합니다. 대상 저장소 위치에 대한 클라우드 공급자와 SHOW REPLICATION ACCOUNTS 출력의
account_name열에 나타나는 대상 계정의 이름을 정확히 지정합니다.예:
SELECT SYSTEM$DESC_ICEBERG_ACCESS_IDENTITY('S3', 'MY_TARGET_ACCOUNT_1');
대상 계정과 연결된 저장소 위치에 대한 Snowflake 액세스를 구성합니다. 대상 계정의 서비스 주체에 대해 검색한 정보를 사용하여 클라우드 공급자의 지침을 따릅니다.
Amazon S3의 외부 볼륨 구성하기. 대상 계정의 저장소 위치와 연결된 외부 ID를 사용합니다.
Azure의 외부 볼륨 구성. SYSTEM$DESC_ICEBERG_ACCESS_IDENTITY에서 반환된 :code:`AZURE_CONSENT_URL TEMPLATE`에서 :samp:`{your_tenant_id}`를 저장소 위치가 속한 테넌트의 ID로 바꿉니다.
소스 계정에서 CREATE REPLICATION GROUP 명령을 사용하여 복제 그룹을 생성합니다.
OBJECT_TYPES목록에서 ``EXTERNAL VOLUMES``를 지정합니다.ALLOWED_DATABASES목록에서 복제하려는 Iceberg 테이블이 있는 데이터베이스를 포함합니다.ALLOWED_EXTERNAL_VOLUMES목록에서 복제하려는 Iceberg 테이블에 대한 액세스를 제공하는 외부 볼륨을 포함합니다.CREATE REPLICATION GROUP my_iceberg_rg OBJECT_TYPES = DATABASES, EXTERNAL VOLUMES ALLOWED_DATABASES = my_iceberg_database ALLOWED_EXTERNAL_VOLUMES = my_external_volume ALLOWED_ACCOUNTS = myorg.my_account_1;
참고
SQL 구문 분석기 오류가 발생하는 경우 허용된 외부 볼륨 목록이 너무 긴 것일 수 있습니다. 이 오류가 발생하면 CREATE REPLICATION GROUP 문에서 이 목록을 줄인 다음, ALTER REPLICATION GROUP 명령을 사용하여 허용된 외부 볼륨을 복제 그룹에 추가합니다.
기존 그룹을 업데이트하려면 ALTER REPLICATION GROUP 명령을 사용하여
OBJECT_TYPES목록에EXTERNAL VOLUMES`를 추가합니다. 대상 계정에서 이러한 오브젝트가 삭제되지 않도록 :code:`OBJECT_TYPES목록에 다른 기존 오브젝트를 모두 포함하세요.예를 들어, :code:`DATABASES`가 이미 포함된 복제 그룹에는 :code:`EXTERNAL VOLUMES`를 추가합니다.
ALTER REPLICATION GROUP my_iceberg_rg SET OBJECT_TYPES = DATABASES, EXTERNAL VOLUMES ALLOWED_EXTERNAL_VOLUMES = my_external_volume;
대상 계정에서 복제 그룹을 소스 계정(
my_source_account)에 있는 그룹의 복제본으로서 생성합니다.CREATE REPLICATION GROUP my_iceberg_rg AS REPLICA OF myorg.my_source_account.my_iceberg_rg;
소스 계정에 그룹을 복제하는 보조 그룹이 이미 있는 경우 이 단계를 건너뛰세요.
대상 계정에서 새로 고침 명령을 실행합니다.
ALTER REPLICATION GROUP my_iceberg_rg REFRESH;
Snowflake 관리형 Iceberg 테이블이 포함된 데이터베이스를 복제하고 대상 계정의 클라우드 저장소에 대한 액세스를 구성한 경우 Snowflake는 대상 계정에서 테이블을 복제합니다.
참고
Snowflake가 대상 계정에 대해 구성된 저장소 위치에 액세스할 수 없는 경우 새로 고침 작업이 실패합니다. 이 경우 액세스 제어 설정을 다시 확인하거나 :ref:`label-tables_iceberg_storage_verify_storage_access`를 시도하세요.
고려 사항 및 제한 사항¶
Iceberg 테이블에 대한 복제를 사용할 때 다음 사항을 고려하세요.
Snowflake는 현재 Snowflake 관리형 테이블의 복제만 지원합니다.
변환된 Iceberg 테이블 복제는 지원되지 않습니다. Snowflake는 새로 고침 작업 중에 변환된 테이블을 건너뜁니다.
복제된 테이블의 경우 대상 계정과 *동일한 리전*의 저장소 위치에 대한 액세스를 구성해야 합니다.
기본 외부 볼륨에서 복제에 사용되는 저장소 위치를 삭제하거나 변경하면 새로 고침 작업이 실패할 수 있습니다.
대상 계정의 보조 테이블은 대상 계정을 소스 계정으로 사용할 수 있도록 승격할 때까지 읽기 전용입니다.
Snowflake는 보조 테이블에 대한 기본 Iceberg 테이블의 :ref:`디렉터리 계층 구조<label-tables_iceberg_configure_external_volume_base_location>`를 유지 관리합니다.
이 기능에는 복제 비용이 적용됩니다. 자세한 내용은 복제 비용 이해하기 섹션을 참조하십시오.
복제 및 장애 조치 그룹의 계정 오브젝트에 대한 고려 사항은 계정 오브젝트 섹션을 참조하세요.