Apache Iceberg™ 테이블이 있는 Snowpipe Streaming 고성능 아키텍처

고성능 아키텍처를 갖춘 Snowpipe Streaming은 Iceberg v2 및 Iceberg v3 테이블 모두를 포함하여 Snowflake 관리 :doc:`Apache Iceberg </user-guide/tables-iceberg>`로의 데이터 수집을 지원합니다. 이를 통해 고성능 아키텍처의 모든 성능 이점과 함께 Iceberg 테이블로 데이터를 거의 실시간으로 스트리밍할 수 있습니다.

참고

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

작동 방법

Snowpipe Streaming은 PIPE 오브젝트를 통해 대상 Iceberg 테이블로 데이터를 수집합니다. Snowflake는 해당 Iceberg 메타데이터를 사용하여 Iceberg 호환 Apache Parquet 데이터 파일을 생성하고 구성된 외부 클라우드 저장소 위치에 업로드합니다. 데이터는 Snowflake에 Iceberg 카탈로그로 등록된 Snowflake 관리 Iceberg 테이블로 제공됩니다.

Snowflake는 외부 볼륨 을 사용하여 저장소 위치에 연결합니다.

시작하기

이 섹션에서는 고성능 아키텍처를 갖춘 Snowpipe Streaming을 설정하여 데이터를 Iceberg 테이블로 수집하는 방법에 대해 단계별로 설명합니다.

1단계: 외부 볼륨 만들기

Iceberg 테이블 데이터의 저장 위치를 지정하는 :doc:`외부 볼륨 </user-guide/tables-iceberg-configure-external-volume>`을 생성합니다.

외부 볼륨에 대한 스트리밍 역할 USAGE 권한을 부여합니다.

GRANT USAGE ON EXTERNAL VOLUME my_external_volume TO ROLE my_streaming_role;

2단계: Snowflake 관리형 Iceberg 테이블 만들기

구성된 외부 볼륨으로 :doc:`Snowflake 관리 Iceberg 테이블 </sql-reference/sql/create-iceberg-table-snowflake>`을 생성합니다.

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단계: 수집을 위한 파이프 생성

Iceberg 테이블을 대상으로 하는 파이프를 생성합니다. 기본 파이프(자동으로 생성됨)를 사용하거나 사용자 지정 파이프를 생성할 수 있습니다.

-- 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 테이블로 데이터를 스트리밍합니다. 자습서 Snowpipe Streaming 고성능 아키텍처 SDK 시작하기 에 설명된 것과 동일한 SDK 설정을 통해 클라이언트 구성에서 Iceberg 테이블의 파이프를 지정합니다.

지원되는 Iceberg 버전

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

:doc:`클래식 아키텍처 <snowpipe-streaming-classic-iceberg>`는 Iceberg v2 테이블만 지원합니다.

지원되는 데이터 타입

Snowflake Ingest SDK는 현재 Snowflake에서 지원하는 대부분의 Iceberg 데이터 타입을 지원합니다. 자세한 내용은 Apache Iceberg™ 테이블의 데이터 타입 섹션을 참조하십시오.

SDK는 다음의 3가지 :doc:`정형 데이터 타입 </sql-reference/data-types-structured>`에 대한 수집도 지원합니다. 정형 ARRAY, 정형 OBJECT, 정형 MAP.

사용법 노트

  • Snowpipe Streaming은 Iceberg 카탈로그로 Snowflake만 지원합니다. 외부 카탈로그를 사용하는 외부 관리 Iceberg 테이블(예: AWS Glue 또는 Hive 메타스토어)은 지원되지 않습니다. 그러나 :doc:`Snowflake 관리 Iceberg 테이블을 Snowflake Open Catalog와 동기화 </user-guide/tables-iceberg-open-catalog-sync>`할 수 있습니다.

  • Snowflake는 외부 볼륨 을 사용하여 저장소 위치에 연결합니다. Iceberg 테이블의 데이터 저장소 는 사용자에게 책임이 있습니다.

  • Iceberg 호환 Parquet 파일은 Iceberg 테이블에 지정된 :ref:`STORAGE_SERIALIZATION_POLICY <label-storage_serialization_policy>`를 기반으로 생성됩니다.

제한 사항

고성능 아키텍처 및 Iceberg 테이블을 갖춘 Snowpipe Streaming에는 다음 제한 사항이 적용됩니다.

  • 분할된 Iceberg 테이블은 지원되지 않습니다.

  • Iceberg 테이블에는 스키마 진화가 지원되지 않습니다.

  • Iceberg 테이블에는 길이가 제한된 VARCHAR 열(예: VARCHAR(100))이 지원되지 않습니다. 길이 제약 조건 없이 STRING 또는 VARCHAR를 사용합니다.

Snowpipe Streaming 고성능 아키텍처 제한 사항 및 :ref:`Iceberg 테이블 제한 사항 <label-tables_iceberg_considerations>`도 적용됩니다.