Apache Iceberg™ 테이블의 메타데이터 및 보존

Snowflake는 사용하는 카탈로그 유형(Snowflake 또는 외부)에 따라 Apache Iceberg™ 테이블의 메타데이터를 처리합니다.

참고

어떤 유형의 Iceberg 테이블에 대해서도 history.expire.min-snapshots-to-keep 테이블 속성 을 사용하여 기본 최소 스냅샷 수를 지정할 수 없습니다.

Snowflake를 카탈로그로 사용하는 테이블

Snowflake는 이 테이블 유형의 메타데이터 수명 주기를 관리하고, 테이블 데이터와 스냅샷의 보존 기간에 따라 부실해진 메타데이터, 매니페스트 목록 및 매니페스트 파일을 삭제합니다.

테이블 데이터 및 스냅샷의 보존 기간을 설정하려면 계정, 데이터베이스, 스키마 또는 테이블 수준에서 DATA_RETENTION_TIME_IN_DAYS 매개 변수를 설정합니다.

만들기

Snowflake는 주기적으로 Apache Iceberg 사양 버전 2에 대한 메타데이터를 생성하고 외부 볼륨의 파일에 메타데이터를 씁니다. 각각의 새 메타데이터 파일에는 마지막으로 생성된 Snowflake 메타데이터 파일 이후 DML 또는 DDL 변경 사항이 모두 포함됩니다.

SYSTEM$GET_ICEBERG_TABLE_INFORMATION 함수를 사용하여 필요에 따라 메타데이터를 생성할 수도 있습니다. 자세한 지침은 DML 변경 사항의 스냅샷 생성하기 섹션을 참조하십시오.

메타데이터 파일을 찾는 방법에 대한 정보는 데이터 및 메타데이터 디렉터리 섹션을 참조하십시오.

메타데이터 생성 내역 보기

메타데이터 생성 시도에 대한 전체 기록에 액세스하려면 계정의 쿼리 기록을 보고 결과를 필터링합니다. SQL 텍스트에서 SYSTEM$GET_ICEBERG_TABLE_INFORMATION 함수 이름을 검색합니다.

Snowflake는 내부적으로 동일한 SYSTEM$GET_ICEBERG_TABLE_INFORMATION 함수를 사용하여 테이블 메타데이터를 생성합니다. Snowflake가 시도한 시도는 쿼리 기록에서 SYSTEM 사용자 아래에 표시됩니다. 쿼리 기록의 STATUS 열은 메타데이터가 성공적으로 생성되었는지 여부를 나타냅니다.

보기 옵션은 쿼리 기록으로 쿼리 활동 모니터링하기 섹션을 참조하십시오.

삭제

다음과 같은 이벤트가 발생하면 Snowflake는 외부 클라우드 저장소에서 Iceberg 메타데이터를 삭제합니다.

  • 테이블 삭제 후.

  • Iceberg 메타데이터가 만료된 스냅샷이나 테이블 데이터를 참조하는 경우.

데이터 보존 기간이 만료된 후에는 즉시 삭제되지 않습니다. 결과적으로, 메타데이터 저장은 테이블의 수명보다 더 오랫동안 클라우드 저장소 공급자에게 비용을 발생시킬 수 있습니다.

경고

Snowflake는 테이블 데이터가 사용자가 관리하는 외부 클라우드 저장소에 있으므로 Snowflake 관리 Iceberg 테이블에 대해 Fail-safe 를 지원하지 않습니다. Iceberg 테이블 데이터를 보호하려면 클라우드 공급자를 통해 데이터 보호 및 복구를 구성해야 합니다.

테이블 삭제 후

테이블을 삭제한 경우 UNDROP ICEBERG TABLE 명령을 사용하여 데이터 보존 기간 내에 복원할 수 있습니다.

보존 기간이 만료되면 Snowflake는 외부 볼륨 위치에서 작성한 테이블 메타데이터와 스냅샷을 삭제합니다. 삭제는 비동기적으로 이루어지며 보관 기간이 지난 후 완료되는 데 며칠이 걸릴 수 있습니다.

참고

변환된 테이블 의 경우 Snowflake는 테이블 변환 후에 생성된 메타데이터만 삭제합니다.

스냅샷이 만료된 후

Snowflake는 데이터 보존 기간이 지난 후 만료된 스냅샷과 관련된 Iceberg 메타데이터 파일을 삭제합니다. 일반적으로 스냅샷이 만료된 후 7~14일 후에 삭제됩니다.

이전 테이블 스냅샷만 만료될 수 있습니다. Snowflake는 외부 클라우드 저장소에서 테이블의 최신(현재) 상태를 나타내는 메타데이터 파일을 절대 삭제하지 않습니다.

외부 카탈로그를 사용하는 테이블

외부 카탈로그를 사용하는 테이블의 경우, Snowflake는 DATA_RETENTION_TIME_IN_DAYS 매개 변수 값을 사용하여 Snowflake Time Travel 및 테이블 삭제에 대한 보존 기간을 설정합니다. 보존 기간이 만료되어도 Snowflake는 외부 클라우드 저장소에서 Iceberg 메타데이터나 스냅샷을 삭제하지 않습니다.

Snowflake는 테이블 수준에서 DATA_RETENTION_TIME_IN_DAYS를 다음 값 중 작은 값으로 설정합니다.

  • 현재 메타데이터 파일의 history.expire.max-snapshot-age-ms 값입니다. Snowflake는 값을 일 단위로 변환합니다(내림).

  • Snowflake 계정 에디션 에 따라 다음 값으로 설정합니다.

    • Standard Edition: 1일.

    • Enterprise Edition 이상: 5일.

Snowflake에서는 DATA_RETENTION_TIME_IN_DAYS 값을 수동으로 변경할 수 없습니다. 값을 변경하려면 메타데이터 파일에서 history.expire.max-snapshot-age-ms 를 업데이트한 다음 테이블을 새로 고쳐야 합니다.

다음 테이블 함수를 사용하여 외부에서 관리되는 Iceberg 테이블에 등록된 파일에 대한 정보 또는 가장 최근의 스냅샷 새로 고침 기록을 검색할 수 있습니다.

델타 기본 테이블

참고

Delta 기반 Iceberg 테이블에 메타데이터 쓰기를 사용하려면 계정에서 2025_01 동작 변경 번들 을 비활성화하지 않아야 합니다.

Delta 테이블 파일에서 생성된 Iceberg 테이블의 경우, 외부 볼륨에 쓰기 권한을 구성하면 Snowflake가 자동으로 외부 저장소에 Iceberg 메타데이터를 씁니다(ALLOW_WRITES 참조). 쓰기 위치에 대한 자세한 내용은 데이터 및 메타데이터 디렉터리 섹션을 참조하십시오.

Snowflake가 Iceberg 메타데이터를 쓰지 못하도록 하려면, 동일한 외부 볼륨을 사용하지 않는 한 외부 볼륨에 ALLOW_WRITES 매개 변수를 FALSE 로 설정하면 됩니다.

Iceberg 파티셔닝

|iceberg-tm|의 `”숨겨진” 파티셔닝<https://iceberg.apache.org/docs/latest/partitioning/#icebergs-hidden-partitioning>`_은 메타데이터를 기준으로 하며 조정 가능합니다. Iceberg는 테이블을 생성할 때 정의한 변환을 기준으로 파티션 값을 생성합니다. Iceberg 엔진은 파티셔닝된 테이블에서 읽을 때 테이블 메타데이터에 정의된 파티션 값을 사용하여 관련 데이터를 효율적으로 식별합니다.

Snowflake는 다음과 같은 파티셔닝 사용 사례를 지원합니다.

  • 파티셔닝된 Iceberg 테이블에서 읽기 및 쓰기.

  • :doc:`카탈로그 연결 데이터베이스</user-guide/tables-iceberg-catalog-linked-database>`에서 Snowflake가 관리하거나 외부에서 관리되는 파티셔닝된 Iceberg 테이블 생성 또는 :doc:`Iceberg REST 카탈로그에 의해 외부에서 관리</user-guide/tables-iceberg-externally-managed-writes>`되는 파티셔닝된 Iceberg 테이블 생성.

파티셔닝된 Iceberg 테이블을 만들려면 정규 CREATE ICEBERG TABLE 문에서 하나 이상의 파티션 변환<https://iceberg.apache.org/spec/#partition-transforms>`_에 PARTITIONBY 절을 포함합니다. 예를 보려면 :ref:`label-tables_iceberg_external_writes_create_table_cld 를 참조하십시오.

파티셔닝 지원 행렬

다음 테이블에서는 파티셔닝된 Iceberg 테이블의 각 유형에 대해 지원되는 기능 및 작업과 Apache Iceberg 사양 버전 2의 호환성을 확인할 수 있습니다.

참고

  • 파티셔닝을 사용할 때는 Apache Iceberg 사양 버전 3이 지원되지 않습니다.

  • CLD는 카탈로그 연결 데이터베이스를 나타냅니다.

Snowflake 관리형

외부 관리형(CLD)

외부 관리형(비 CLD)

Iceberg 사양 V2 호환성

설명

ON_ERROR = ABORT_STATEMENT 옵션을 포함하는 COPY 명령

COPY INTO <테이블>

제한된 지원

제한된 지원

제한된 지원

제한된 지원

사용법 노트 섹션을 참조하십시오.

CREATE ICEBERG TABLE … AS SELECT (CTAS)

복제

사용법 노트를 참조하세요.

CREATE ICEBERG TABLE … LIKE

사용법 노트를 참조하세요.

삭제 벡터

N/A

클러스터링

TARGET_FILE_SIZE

파티션은 16MB 파일 크기로 작성됩니다.

파티션 진화

제한된 지원

제한된 지원

제한된 지원

외부 엔진으로 실행되는 경우 파티션 진화를 지원합니다.

파티션 변환

지원되는 파티션 변환은 다음을 참조하세요.

위치 삭제

N/A

Snowpipe

Snowpipe Streaming

파티션 내 정렬

파티셔닝 고려 사항

Iceberg 테이블에 파티셔닝된 쓰기를 사용하기 전에 다음 사항을 고려하세요.

  • 외부 엔진을 사용하여 외부 관리형 테이블의 파티션 필드를 추가, 삭제 또는 교체하는 경우 Snowflake는 최신 파티션 사양에 따라 데이터를 씁니다.

  • Snowflake는 파티셔닝된 테이블에 대해 16MB의 대상 파일 크기를 사용합니다. 기본 파일 크기가 더 큰 경우 Snowflake는 파티셔닝된 테이블에 쓸 때 자동으로 대상 크기를 16MB로 줄입니다.

  • GET_DDL 함수는 출력에 PARTITION BY 절이 포함되지 않습니다.

  • 모든 파티션 변환에 대한 출력 크기의 합은 단일 행에 대해 1,024바이트를 초과할 수 없습니다.

  • Snowflake 관리형 테이블에는 파티션 진화가 지원되지 않으므로 테이블을 삭제하고 파티셔닝을 사용하여 새 테이블을 만들어야 합니다.

  • 테이블 속성 아래의 PARTITION BY 절 내에서 지정하는 DAY(), MONTH(), YEAR() 파티션 변환 매개 변수는 Iceberg 사양에 포함된 것입니다. 여러 일, 월 또는 연도가 있는 경우 파티션 식 매개 변수가 각 달력의 일, 월 또는 연도에 대한 파티션을 반환합니다. 예를 들어, DAY() 변환이 2개월의 데이터가 있는 타임스탬프 열에 사용되면 61개의 파티션이 생성됩니다.

    반대로 Snowflake의 :doc:`DAY(), MONTH(), YEAR() 함수</sql-reference/functions/year>`는 SQL 표준에 포함된 것입니다. 여러 일, 월 또는 연도가 있는 경우 이러한 함수는 날짜 또는 타임스탬프에서 해당하는 일, 월 또는 연도 부분을 추출합니다. 예를 들어, DAY() 함수를 여러 달의 데이터가 있는 타임스탬프 열에서 사용하면 1에서 31 사이의 날짜를 반환합니다.

Time Travel

Snowflake Time Travel 을 사용하면 테이블의 과거 데이터를 쿼리할 수 있습니다.

Snowflake 관리 테이블을 Snowflake Open Catalog 와 동기화하기 또는 Snowflake Catalog SDK 를 사용할 때 서드 파티 컴퓨팅 엔진을 사용하여 Snowflake가 관리하는 테이블에서 time travel 쿼리를 수행할 수도 있습니다.

데이터 보존 기간 내에 커밋된 모든 스냅샷을 쿼리할 수 있습니다. 데이터 보존 기간을 지정하려면 DATA_RETENTION_TIME_IN_DAYS 오브젝트 매개 변수를 설정합니다.

테이블 데이터를 삭제하거나 테이블을 삭제하면 Snowflake는 테이블 보존 기간이 만료된 후 오브젝트를 삭제합니다. 이로 인해 테이블의 수명보다 더 오랫동안 클라우드 저장소 공급자에서 비용이 발생할 수 있습니다.