동적 Apache Iceberg™ 테이블 만들기

이 항목에서는 다음 유형의 동적 테이블을 생성하는 방법과 관련 고려 사항에 대해 설명합니다.

  • Snowflake에서 관리하는 Apache Iceberg™ 테이블을 기본 테이블로 읽는 동적 테이블.

  • 쿼리 결과를 Iceberg 테이블 형식으로 저장하는 동적 Iceberg 테이블.

Snowflake 관리 Iceberg 기본 테이블은 일반 Snowflake 관리 Iceberg 테이블 또는 Snowflake 관리 동적 Iceberg 테이블 중 하나일 수 있습니다.

Iceberg 테이블에서 읽는 동적 테이블 만들기

Snowflake가 관리하는 Iceberg 테이블에서 읽는 동적 테이블은 파이프라인이 Snowflake가 관리하는 Iceberg 테이블의 데이터에서 작업하도록 하거나 처리된 데이터를 다른 엔진에서 쿼리할 수 있게 하려는 경우(예: Spark와 함께 Apache Iceberg SDK를 사용하는 경우)에 유용합니다.

Iceberg 테이블에서 동적 테이블을 생성하는 것은 일반 테이블에서 동적 테이블을 생성하는 것과 유사합니다. 이를 수행하려면, 일반 테이블에서와 같이 CREATE DYNAMIC TABLE SQL 문을 실행합니다.

동적 Iceberg 테이블 만들기

동적 Iceberg 테이블은 동적 테이블과 Snowflake 관리 Iceberg 테이블의 이점을 결합하여 외부 클라우드 저장소 관리, 자동 데이터 변환, 성능 최적화 등의 기능을 제공합니다.

Dynamic Iceberg 테이블은 데이터 레이크와 통합되어 AWS S3 또는 Azure Blob Storage와 같은 외부 클라우드 저장소에 데이터를 저장하는 동시에 Snowflake에서 관리할 수 있습니다. 이러한 테이블은 ACID 트랜잭션, 스키마 진화, 숨겨진 파티셔닝, 테이블 스냅샷을 지원합니다.

동적 Iceberg 테이블을 사용한 자동화된 데이터 변환은 선언적 SQL을 사용하여 중간 단계를 관리하지 않고 원하는 최종 상태를 정의합니다. Snowflake는 사용자가 지정한 데이터 최신성 목표에 따라 데이터 변환의 오케스트레이션, 스케줄링, 새로 고침을 처리합니다.

증분 처리를 통해 성능을 최적화합니다. 이는 변경된 데이터만 처리하여 전체 데이터를 새로 고칠 때보다 성능을 개선하고 비용을 절감합니다. 또한, 간단한 명령 하나로 일괄 처리와 스트리밍 데이터 사이에서 전환할 수 있어 데이터 처리 워크플로가 더욱 유연해집니다.

동적 Iceberg 테이블의 예시 사용 사례는 다음과 같습니다.

  • 데이터 레이크 통합: Snowflake 내에서 변환과 분석을 수행하는 동안 대규모 데이터 세트를 비용 효율적으로 저장할 수 있으며, 효율적인 쿼리와 관리를 위해 Iceberg 형식을 활용할 수 있습니다.

  • 지속적인 데이터 변환 파이프라인 정의: 동적 테이블을 사용하면 수동 개입 없이 데이터가 항상 최신 상태로 유지되고 증분적 처리를 통해 고속 데이터 스트림을 효율적으로 처리할 수 있습니다.

동적 Iceberg 테이블을 생성하려면 CREATE DYNAMIC ICEBERG TABLE SQL 문을 실행합니다. 예를 들어, my_iceberg_table 에서 읽는 이름이 product 인 동적 Iceberg 테이블을 생성하려면 다음 구문을 사용합니다.

CREATE DYNAMIC ICEBERG TABLE product (date TIMESTAMP_NTZ, id NUMBER, content STRING)
  TARGET_LAG = '20 minutes'
  WAREHOUSE = mywh
  EXTERNAL_VOLUME = 'my_external_volume'
  CATALOG = 'SNOWFLAKE'
  BASE_LOCATION = 'my_iceberg_table'
  AS
    SELECT product_id, product_name FROM staging_table;
Copy

동적 Iceberg 테이블에 대한 향후 권한

스키마에서 생성된 새로운 동적 Iceberg 테이블에 액세스하려면 DYNAMIC 키워드 없이 GRANT … ON FUTURE ICEBERG TABLES 구문을 사용합니다. 예:

GRANT <privilege> ON FUTURE ICEBERG TABLES IN SCHEMA my_schema TO ROLE my_role;
Copy

DYNAMIC 키워드를 사용하면 스키마에서 생성된 새로운 동적 Iceberg 테이블에 대한 액세스 권한이 부여되지 않습니다. 예를 들어, 다음 명령은 동적 Iceberg 테이블에는 적용되지 않습니다.

GRANT <privilege> ON FUTURE DYNAMIC TABLES IN SCHEMA my_schema TO ROLE my_role;
Copy

고려 사항 및 제한 사항

  • Snowflake의 Dynamic Iceberg 테이블은 일반 Iceberg 테이블과 동일한 데이터 타입을 지원합니다. 자세한 내용은 지원되는 데이터 타입 섹션을 참조하십시오.

  • 카탈로그 는 일반 Snowflake 관리 Iceberg 테이블과 마찬가지로 암시적으로 구성할 수 있는 계정, 스키마 또는 데이터베이스 매개 변수입니다.

  • 동적 Iceberg 테이블은 현재 IF NOT EXISTS 절을 지원하지 않습니다. 대상 테이블이 이미 있는 경우 IF NOT EXISTS 절을 사용하면 오류가 발생합니다.

  • 동적 Iceberg 테이블은 현재 CREATE 문에서만 지원됩니다. 다른 명령(예: ALTER DYNAMIC ICEBERG TABLE <name>)에 DYNAMIC ICEBERG 를 지정하면 오류가 발생합니다.