고성능 아키텍처의 Snowpipe Streaming: Apache Iceberg™ 테이블

고성능 아키텍처의 Snowpipe Streaming: Apache Iceberg™ 테이블

고성능 아키텍처의 Snowpipe Streaming은 Snowflake 관리형 Apache Iceberg 테이블 — Iceberg v2와 Iceberg v3 테이블을 모두 포함 — 로의 데이터 수집을 지원합니다. 가장 간단한 서버 스케일 경로를 위해 Elastic Channels를 사용하거나, 순서가 보장되고 정확히 한 번 수집이 필요한 경우 Named Channels를 사용할 수 있습니다.

파티션된(partitioned) 및 파티션되지 않은 Snowflake 관리형 Iceberg 테이블이 모두 지원됩니다.

참고

클래식 아키텍처는 Iceberg v2 테이블만 지원합니다. Iceberg v3 지원이 필요하면 고성능 아키텍처를 사용해야 합니다. 클래식 아키텍처의 Iceberg 지원에 대한 자세한 내용은 Snowpipe Streaming Classic with Apache Iceberg™ tables 을 참고하세요.

출처: Snowflake 문서

본문

동작 방식

Snowpipe Streaming은 PIPE 객체를 통해 대상 Iceberg 테이블로 데이터를 수집합니다. Snowflake는 해당 Iceberg 메타데이터와 함께 Iceberg 호환 Apache Parquet 데이터 파일을 만들고, 데이터는 Snowflake를 Iceberg 카탈로그로 등록한 Snowflake 관리형 Iceberg 테이블로 제공됩니다.

Iceberg 테이블은 다음 두 스토리지 옵션 중 하나를 사용할 수 있습니다.

  • Snowflake 스토리지: Snowflake가 Iceberg 테이블 파일을 저장하고 관리하므로 외부 클라우드 스토리지를 구성하거나 접근 권한을 부여할 필요가 없습니다.
  • 직접 관리하는 외부 클라우드 스토리지. Snowflake는 외부 볼륨(external volume) 을 사용해 스토리지 위치에 연결합니다.

시작하기

이 섹션은 Iceberg 테이블로 데이터를 수집하도록 고성능 아키텍처의 Snowpipe Streaming을 설정하는 단계별 예시를 제공합니다.

1단계: 외부 볼륨 생성

Snowflake 스토리지 를 사용할 계획이라면 이 단계를 건너뛰고 2단계로 계속하세요. 외부 볼륨을 만들 필요가 없습니다. Snowflake가 스토리지를 제공합니다.

자체 클라우드 스토리지를 사용하려면 Iceberg 테이블 데이터의 스토리지 위치를 지정하는 외부 볼륨 을 만든 다음, 스트리밍 역할에 볼륨에 대한 USAGE 권한을 부여하세요.

GRANT USAGE ON EXTERNAL VOLUME my_external_volume TO ROLE my_streaming_role;

2단계: Snowflake 관리형 Iceberg 테이블 생성

다음 예시 중 하나를 사용해 Snowflake 관리형 Iceberg 테이블 을 만드세요.

Snowflake 스토리지 를 사용하려면 EXTERNAL_VOLUME = 'SNOWFLAKE_MANAGED'를 설정하고 BASE_LOCATION을 생략하세요.

CREATE OR REPLACE ICEBERG TABLE my_iceberg_table (
    event_id NUMBER,
    event_type STRING,
    event_data VARIANT,
    event_timestamp TIMESTAMP_NTZ
)
    CATALOG = 'SNOWFLAKE'
    EXTERNAL_VOLUME = 'SNOWFLAKE_MANAGED'
    ICEBERG_VERSION = 3;

자체 외부 볼륨을 사용하려면 EXTERNAL_VOLUME을 1단계에서 만든 볼륨으로 설정하고 BASE_LOCATION을 제공하세요.

CREATE OR REPLACE ICEBERG TABLE my_iceberg_table (
    event_id NUMBER,
    event_type STRING,
    event_data VARIANT,
    event_timestamp TIMESTAMP_NTZ
)
    CATALOG = 'SNOWFLAKE'
    EXTERNAL_VOLUME = 'my_external_volume'
    BASE_LOCATION = 'my_iceberg_table/'
    ICEBERG_VERSION = 3;

참고

ICEBERG_VERSION 파라미터를 생략하면 테이블은 기본적으로 Iceberg v2가 됩니다.

3단계: 수집용 pipe 생성

Iceberg 테이블을 대상으로 하는 pipe를 만드세요. 기본 파이프(자동 생성)를 사용하거나 커스텀 파이프를 만들 수 있습니다.

-- Option 1: Use the default pipe.
-- The default pipe is automatically created when you open a channel
-- against the table using the SDK. The default pipe name follows the
-- convention: <TABLE_NAME>-STREAMING (for example, MY_ICEBERG_TABLE-STREAMING).

-- Option 2: Create a custom pipe with explicit column mapping.
CREATE OR REPLACE PIPE my_iceberg_pipe AS
    COPY INTO my_iceberg_table (event_id, event_type, event_data, event_timestamp)
    FROM (SELECT $1:event_id, $1:event_type, $1:event_data, $1:event_timestamp);

4단계: SDK로 데이터 스트리밍

SDK를 구성해 파이프를 통해 Iceberg 테이블로 데이터를 스트리밍하세요. Elastic Channels의 경우 튜토리얼: Elastic Channels 시작하기 (SDK) 를 사용하되, 테이블 모드에서는 Iceberg 테이블을, 파이프 모드에서는 커스텀 Iceberg 파이프를 지정하세요.

지원되는 Iceberg 버전

고성능 아키텍처는 Iceberg v2와 Iceberg v3 테이블을 모두 지원합니다.

클래식 아키텍처 는 Iceberg v2 테이블만 지원합니다.

지원되는 데이터 타입

Snowflake Ingest SDK는 Snowflake가 현재 지원하는 대부분의 Iceberg 데이터 타입을 지원합니다. 자세한 내용은 Apache Iceberg™ 테이블용 데이터 타입 을 참고하세요.

SDK는 또한 세 가지 구조화 데이터 타입 — Structured ARRAY, Structured OBJECT, Structured MAP — 으로의 수집을 지원합니다.

테이블 스키마가 정의하면 기존 복합 또는 구조화 열에 값을 수집할 수 있습니다. 기존 열 지원과 자동 타입 추론의 차이에 대해서는 스키마 진화 를 참고하세요.

사용 참고 사항

  • Snowpipe Streaming은 Iceberg 카탈로그로 Snowflake만 지원합니다. 외부 카탈로그(예: AWS Glue 또는 Hive Metastore)를 사용하는 외부 관리형 Iceberg 테이블은 지원되지 않습니다. 그러나 Snowflake 관리형 Iceberg 테이블을 Snowflake Open Catalog와 동기화 할 수 있습니다.
  • 외부 볼륨을 사용하는 Iceberg 테이블의 경우 Snowflake는 외부 볼륨 을 사용해 스토리지 위치에 연결하며, 데이터 스토리지 는 사용자가 책임집니다. Snowflake 스토리지 를 사용하는 Iceberg 테이블의 경우 Snowflake가 테이블 파일을 저장하고 관리합니다.
  • Iceberg 호환 Parquet 파일은 Iceberg 테이블에 지정된 STORAGE_SERIALIZATION_POLICY 에 따라 생성됩니다.
  • 서버 측 스키마 진화는 Snowflake 관리형 Iceberg 테이블에 대해 지원됩니다. 구성, 비동기 동작, 완전한 Iceberg v2/v3 추론 제약에 대해서는 스키마 진화 를 참고하세요.

제한 사항

다음 제한 사항이 고성능 아키텍처의 Snowpipe Streaming과 Iceberg 테이블에 적용됩니다.

  • 길이 제한이 있는 VARCHAR 열(예: VARCHAR(100))은 Iceberg 테이블에서 지원되지 않습니다. STRING 또는 길이 제약 없는 VARCHAR를 사용하세요.

Snowpipe Streaming 고성능 아키텍처 제한 사항 및 Iceberg 테이블 제한 사항 도 적용됩니다.

더 알아보기 (Learn more)