Snowflake 관리 테이블을 Snowflake Open Catalog 와 동기화하기

Apache Spark™와 같은 서드 파티 엔진을 사용하여 Snowflake가 관리하는 Apache Iceberg™ 테이블을 쿼리하려면 테이블을 Snowflake Open Catalog 와 동기화하면 됩니다.

이 항목에서는 Snowflake의 카탈로그 통합과 Open Catalog 의 외부 카탈로그를 사용하여 Snowflake가 관리하는 Iceberg 테이블을 Snowflake Open Catalog 와 동기화하는 방법에 대해 설명합니다.

중요

서드 파티 엔진이 카탈로그에서 두 번째 네임스페이스 수준까지만 위치한 테이블을 쿼리할 수 있는 경우 Snowflake가 관리하는 Iceberg 테이블을 하나의 상위 항목 네임스페이스가 있는 Open Catalog에 동기화해야 합니다. 그렇지 않으면 Snowflake가 테이블을 Open Catalog의 세 번째 네임스페이스 수준으로 동기화하므로 테이블을 쿼리할 수 없습니다.

Snowflake로 관리되는 Iceberg 테이블을 2개가 아닌 1개의 상위 항목 네임스페이스와 동기화하려면 데이터베이스를 생성할 때 CATALOG_SYNC_NAMESPACE_MODE 속성을 FLATTEN 으로 설정하십시오. 자세한 내용은 CREATE DATABASE 섹션을 참조하십시오. 기존 데이터베이스에 대해서는 이 모드를 변경할 수 없습니다. CATALOG_SYNC 를 활성화한 기존 데이터베이스의 테이블은 2개의 상위 항목 네임스페이스가 있는 Open Catalog에 동기화됩니다.

1단계: BASE_LOCATION_PREFIX 설정

Snowflake는 동적으로 생성된 문자열(임의의 ID)이 포함된 디렉터리 아래에 각 Iceberg 테이블에 대한 파일을 씁니다.

Open Catalog 가 동기화하는 모든 Snowflake 관리 테이블을 볼 수 있도록 하려면 계정, 데이터베이스 또는 스키마 수준에서 BASE_LOCATION_PREFIX (예: my-open-catalog-tables)을 사용하고 CREATE ICEBERG TABLE 문에서 BASE_LOCATION 매개 변수를 생략하는 것이 좋습니다. 이렇게 하면 계정, 데이터베이스 또는 스키마에서 생성한 모든 Iceberg 테이블에 대한 파일이 접두사와 이름이 같은 알려진 디렉터리 아래에 조직화됩니다. 자세한 내용은 ` Snowflake 관리 테이블의 데이터 및 메타데이터 디렉터리 <label-tables_iceberg_configure_external_volume_base_location>` 섹션을 참조하십시오.

다음 문은 open_catalog 라는 스키마에 대해 BASE_LOCATION_PREFIX 를 설정합니다.

ALTER SCHEMA open_catalog
  SET BASE_LOCATION_PREFIX = 'my-open-catalog-tables';
Copy

2단계: 외부 볼륨 만들기

아직 없다면 Snowflake에 외부 볼륨을 생성하여 시작합니다. 이 볼륨은 테이블 데이터와 메타데이터를 저장할 클라우드 저장소 위치에 대한 액세스를 제공합니다.

참고

STORAGE_BASE_URL 에 지정하는 경로에 BASE_LOCATION_PREFIX 를 포함하지 마십시오.

클라우드 저장소 서비스에 대한 지침을 완료합니다.

3단계: Open Catalog 리소스 구성

그런 다음 이 섹션의 단계를 완료하여 Open Catalog 계정에서 외부 카탈로그 및 서비스 연결을 생성합니다.

  1. 카탈로그 만들기 의 지침에 따라 Open Catalog 계정에서 외부 카탈로그를 생성합니다. 외부 카탈로그에 대해 다음 설정이 구성되어 있는지 확인합니다.

    • External 토글이 활성화됩니다.

    • Default base location2단계: 외부 볼륨 만들기 에서 생성한 외부 볼륨의 STORAGE_BASE_URL 및 스키마에 설정한 BASE_LOCATION_PREFIX 를 결합한 것입니다(예: https://<storage_base_url>/<base_url_prefix>/).

    Open Catalog 는 Snowflake 관리 테이블을 이 외부 카탈로그에 동기화합니다.

  2. 아직 Snowflake에 대한 서비스 연결이 없는 경우 서비스 연결 구성 의 지침에 따라 Open Catalog 계정에서 Snowflake 엔진에 대한 연결을 생성합니다.

  3. 외부 카탈로그에 액세스할 수 있는 권한이 있는 카탈로그 역할을 구성합니다. 지침은 카탈로그에 권한 부여하기 섹션을 참조하십시오.

    카탈로그 역할에는 카탈로그에 대한 다음 권한이 있어야 합니다.

    • TABLE_CREATE

    • TABLE_WRITE_PROPERTIES

    • TABLE_DROP

    • NAMESPACE_CREATE

    • NAMESPACE_DROP

    카탈로그 역할에 이러한 각 권한을 부여하거나 이러한 권한이 포함된 CATALOG_MANAGE_CONTENT 권한을 부여할 수 있습니다. 자세한 내용은 Snowflake Open Catalog의 카탈로그 권한 섹션을 참조하십시오.

  4. 서비스 연결에 대한 기본 역할에 카탈로그 역할을 연결합니다. 이를 통해 서비스 연결이 카탈로그에 액세스할 수 있습니다. 지침은 기본 역할에 카탈로그 역할 부여 섹션을 참조하십시오.

4단계: Open Catalog 에 대한 카탈로그 통합 만들기

CREATE CATALOG INTEGRATION(Snowflake Open Catalog) 명령을 사용하여 Open Catalog 에 대한 카탈로그 통합을 생성합니다.

CATALOG_NAME의 경우 Open Catalog 계정에서 구성한 외부 카탈로그의 이름을 지정합니다. Snowflake는 Snowflake의 테이블과 상위 항목을 Open Catalog 에 있는 이 외부 카탈로그에 동기화합니다. 예를 들어, Snowflake에 등록된 db1.public.table1 Iceberg 테이블이 있고 카탈로그 통합에서 catalog1 을 지정하면 Snowflake는 이 테이블을 다음과 같은 정규화된 이름(catalog1.db1.public.table1)으로 Open Catalog 와 동기화합니다.

카탈로그 통합 생성과 관련된 문제를 해결하려면 Open Catalog에 대한 카탈로그 통합을 생성할 수 없습니다. 섹션을 참조하십시오.

CREATE OR REPLACE CATALOG INTEGRATION my_open_catalog_int
  CATALOG_SOURCE = POLARIS
  TABLE_FORMAT = ICEBERG
  REST_CONFIG = (
    CATALOG_URI = 'https://<orgname>-<my-snowflake-open-catalog-account-name>.snowflakecomputing.com/polaris/api/catalog'
    CATALOG_NAME = 'myOpenCatalogExternalCatalogName'
  )
  REST_AUTHENTICATION = (
    TYPE = OAUTH
    OAUTH_CLIENT_ID = 'myClientId'
    OAUTH_CLIENT_SECRET = 'myClientSecret'
    OAUTH_ALLOWED_SCOPES = ('PRINCIPAL_ROLE:ALL')
  )
  ENABLED = TRUE;
Copy

참고

이 카탈로그 통합을 사용하면 하나 이상의 Snowflake 관리 테이블을 동기화할 수 있습니다.

5단계: 카탈로그 동기화 설정하기

Snowflake가 관리되는 Iceberg 테이블을 Open Catalog 에 동기화하려면 Open Catalog 에서 Snowflake가 테이블을 동기화할 외부 카탈로그를 지정해야 합니다. 이를 구성하려면 CATALOG_SYNC 매개 변수를 Open Catalog 에 대한 카탈로그 통합 이름으로 설정합니다.

데이터베이스 수준에서 CATALOG_SYNC 설정

이 예제에서는 데이터베이스 수준에서 CATALOG_SYNC 매개 변수를 설정합니다. 이 문을 실행하면 Snowflake는 db1 데이터베이스의 모든 Snowflake 관리 Iceberg 테이블을 my_open_catalog_int 카탈로그 통합을 위해 지정한 Open Catalog 의 외부 카탈로그에 동기화합니다. 자세한 내용은 ALTER DATABASE 명령을 참조하십시오.

ALTER DATABASE db1 SET CATALOG_SYNC = 'my_open_catalog_int';
Copy

데이터베이스를 생성할 때 데이터베이스 수준에서 CATALOG_SYNC 을 설정할 수도 있습니다. 예:

CREATE DATABASE db2
  CATALOG_SYNC = 'my_open_catalog_int';
Copy

자세한 내용은 CREATE DATABASE 섹션을 참조하십시오.

스키마 수준에 CATALOG_SYNC 설정

이 예제에서는 스키마 수준에 CATALOG_SYNC 매개 변수를 설정합니다. 이 문을 실행하면 Snowflake는 public 스키마에 있는 모든 Snowflake 관리 Iceberg 테이블을 my_open_catalog_int 카탈로그 통합을 위해 지정한 Open Catalog 의 외부 카탈로그에 동기화합니다. 자세한 내용은 ALTER SCHEMA 명령을 참조하십시오.

ALTER SCHEMA public SET CATALOG_SYNC = 'my_open_catalog_int';
Copy

스키마를 생성할 때 스키마 수준에 CATALOG_SYNC 를 설정할 수도 있습니다. 예:

CREATE SCHEMA schema1
  CATALOG_SYNC = 'my_open_catalog_int';
Copy

자세한 내용은 CREATE SCHEMA 섹션을 참조하십시오.

참고

  • 다음을 수행할 수도 있습니다.

    • 계정 또는 테이블 수준에서 CATALOG_SYNC 를 설정합니다.

    • CATALOG_SYNC 를 다른 수준에서 재정의합니다. 예를 들어, 데이터베이스 수준에서 CATALOG_SYNC 를 설정한 다음 데이터베이스 내에서 myschema 스키마에 대한 값을 재정의할 수 있습니다. 그 결과, myschema 스키마에 있는 Snowflake에서 관리하는 Iceberg 테이블은 데이터베이스에 있는 다른 Snowflake에서 관리하는 Iceberg 테이블과는 다른 Open Catalog 의 외부 카탈로그로 동기화됩니다.

    자세한 내용은 CATALOG_SYNC매개 변수 계층 구조와 유형 섹션을 참조하십시오.

  • Snowflake 관리 Iceberg 테이블이 동기화하는 Open Catalog 에 대한 카탈로그 통합의 이름을 확인하려면 SHOW ICEBERG TABLES 명령을 실행하고 출력에서 catalog_sync_name 열을 확인합니다.

6단계: Snowflake 관리 테이블 만들기

CREATE ICEBERG TABLE(Iceberg 카탈로그로서의 Snowflake) 명령을 사용하여 Snowflake 관리 Iceberg 테이블을 생성합니다.

중요

공개 카탈로그의 액세스 권한이 테이블에 올바르게 적용되도록 하려면 테이블을 만들기 전에 테이블이 특정 조건을 충족하는지 확인하십시오. 이러한 조건은 카탈로그의 디렉터리 구조 계층 구조와 관련이 있습니다. 이러한 조건과 조건을 충족하는 방법에 대한 지침은 Snowflake Open Catalog 설명서의 카탈로그 내용 구성 섹션에 있는 참고 사항을 참조하십시오.

USE SCHEMA open_catalog;

CREATE OR REPLACE ICEBERG TABLE my_iceberg_table (col1 INT)
  CATALOG = 'SNOWFLAKE'
  EXTERNAL_VOLUME = 'my_external_volume';
Copy

이전 예제 문에서 사용되는 BASE_LOCATION_PREFIX (my-open-catalog-tables) 및 테이블 이름 (my_iceberg_table)의 경우 Snowflake는 테이블 파일을 다음 경로에 씁니다.

  • STORAGE_BASE_URL/my-open-catalog-tables/my_iceberg_table.randomId/data/

  • STORAGE_BASE_URL/my-open-catalog-tables/my_iceberg_table.randomId/metadata/

Snowflake에서 테이블을 수정하면 변경 사항이 Open Catalog 계정의 외부 카탈로그와 자동으로 동기화됩니다. Apache Spark™와 같은 다른 엔진은 Open Catalog 에 연결하여 테이블을 쿼리할 수 있습니다.

Snowflake 관리 테이블 생성 관련 문제를 해결하려면 Snowflake 관리 테이블을 생성할 수 없습니다. 섹션을 참조하십시오.