Snowflake를 카탈로그로 사용하도록 Apache Iceberg™ 테이블을 변환하기

Snowflake가 관리하지 않는 Apache Iceberg™ 테이블 을 Iceberg 카탈로그로 사용하는 테이블로 변환합니다.

Snowflake Catalog SDK 에 대한 지원을 포함하여 완전한 Snowflake 플랫폼 지원을 원하는 경우 테이블을 변환하도록 선택할 수 있습니다.

Iceberg 테이블 유형 간의 차이점에 대해 알아보려면 카탈로그 옵션 섹션을 참조하십시오.

테이블 변환 전과 후

Iceberg 테이블을 변환하여 Snowflake를 카탈로그로 사용하면 테이블이 쓰기 가능한 상태가 되며 Snowflake가 테이블에 대한 수명 주기를 관리합니다.

다음 표는 변환 전후의 Iceberg 테이블을 비교한 내용입니다.

변환 전

변환 후

Iceberg 카탈로그

외부 카탈로그(예: AWS Glue) 또는 카탈로그가 전혀 없습니다. 카탈로그 통합이 필요합니다.

Snowflake. Snowflake는 원본 데이터의 변경 사항을 Snowflake 카탈로그에 등록합니다. 그런 다음 Snowflake는 외부 볼륨의 테이블 메타데이터를 업데이트합니다.

카탈로그 통합이 필요하지 않습니다.

Snowflake 읽기 작업

Snowflake 쓰기 작업

테이블 데이터 및 메타데이터의 저장소 위치

외부 볼륨(외부 클라우드 저장소).

지정한 기본 위치 아래의 외부 볼륨(외부 클라우드 저장소).

데이터 및 메타데이터 정리

수동으로 관리하거나 외부 카탈로그로 관리합니다.

Snowflake에 의해 관리됩니다. Snowflake는 외부 저장소에서 변환 전에 생성된 메타데이터, 매니페스트 목록 또는 매니페스트를 삭제하지 않습니다. Snowflake는 변환 중에 Parquet 데이터 파일을 다시 작성하지 않습니다. 테이블을 변환한 Snowflake는 정기적인 테이블 유지 관리의 일환으로 일부 데이터 파일을 다시 작성할 수 있습니다.

Snowflake Catalog SDK에서 액세스 가능

중요

Iceberg 테이블을 변환할 때 Snowflake는 외부 저장소를 잠그거나 외부 저장소에 단독으로 액세스할 수 있다고 가정하지 않습니다. 테이블 손상을 방지하려면 외부 저장소 위치에 대한 Snowflake 이외의 쓰기(예: 자동화된 유지 관리 작업)를 모니터링하거나 중지해야 합니다.

요구 사항

Iceberg 테이블을 변환하기 전에 Snowflake가 외부 볼륨에 쓸 수 있는지 확인하십시오.

Snowflake가 외부 볼륨에 쓰려면 다음 조건이 충족되어야 합니다.

  • ALTER ICEBERG TABLE … REFRESH 명령을 사용하여 테이블을 수동으로 새로 고친 후 테이블을 변환합니다.

  • 외부 볼륨의 ALLOW_WRITES 속성이 TRUE 로 설정됩니다. 기존 외부 볼륨에 대해 이 속성 값을 업데이트하려면 ALTER EXTERNAL VOLUME 명령을 사용하십시오. 예를 들어 ALTER EXTERNAL VOLUME my_ext_vol SET ALLOW_WRITES=TRUE 과 같습니다.

  • 클라우드 저장소 계정에 대해 설정한 액세스 제어 권한이 쓰기 액세스를 허용해야 합니다. 예를 들어 Amazon S3용으로 구성된 외부 볼륨을 사용하는 경우 IAM 역할에는 S3 위치에 대한 s3:PutObject 권한이 있어야 합니다.

참고

구체화되지 않은 ID 파티션 열이 있는 테이블의 변환은 지원되지 않습니다. 소스 열이 Parquet 파일에 존재하지 않는 경우, 테이블에서 ID 변환을 정의하면 구체화되지 않은 ID 파티션 열이 생성됩니다.

예: 테이블 변환하기

중요

Iceberg 테이블을 변환할 때 Snowflake는 외부 저장소를 잠그거나 외부 저장소에 단독으로 액세스할 수 있다고 가정하지 않습니다. 테이블 손상을 방지하려면 외부 저장소 위치에 대한 Snowflake 이외의 쓰기(예: 자동화된 유지 관리 작업)를 모니터링하거나 중지해야 합니다.

이 예제에서는 먼저 오브젝트 저장소의 Iceberg 파일에서 Iceberg 테이블을 생성합니다. Snowflake는 METADATA_FILE_PATH 값을 사용하여 열 정의에 대한 다음 위치(<ext-vol-storage-base-url>/path/to/metadata/v1.metadata.json)에서 테이블 메타데이터를 찾습니다.

CREATE ICEBERG TABLE myIcebergTable
  EXTERNAL_VOLUME='icebergMetadataVolume'
  CATALOG='icebergCatalogInt'
  METADATA_FILE_PATH='path/to/metadata/v1.metadata.json';
Copy

다음으로, ALTER ICEBERG TABLE … REFRESH 명령을 사용하여 테이블 메타데이터를 최신 메타데이터 파일과 동기화합니다. 다음 예제 명령은 메타데이터 파일 경로를 지정하여 테이블을 새로 고칩니다.

ALTER ICEBERG TABLE myIcebergTable REFRESH 'metadata/v2.metadata.json';
Copy

마지막으로, ALTER ICEBERG TABLE … CONVERT TO MANAGED 명령을 사용하여 Snowflake를 Iceberg 카탈로그로 사용하도록 테이블을 변환합니다.

ALTER ICEBERG TABLE myIcebergTable CONVERT TO MANAGED
  BASE_LOCATION = 'my/relative/path/from/external_volume';
Copy

참고

이 예제에서는 테이블이 오브젝트 저장소의 Iceberg 파일에서 생성되었고 BASE_LOCATION 이 원래 CREATE ICEBERG TABLE 문에 포함되지 않았으므로 ALTER 문에서 BASE_LOCATION 을 지정해야 합니다. BASE_LOCATION 은 외부 볼륨에서 Snowflake가 변환된 테이블에 대한 테이블 데이터와 메타데이터를 쓰는 디렉터리까지의 상대 경로를 정의합니다.

그렇지 않고 원래 CREATE ICEBERG TABLE 문에 BASE_LOCATION 이 지정된 경우 이를 ALTER ICEBERG TABLE … CONVERT TO MANAGED 명령에 포함할 필요가 없습니다.

예를 들어 Snowflake는 테이블 데이터를 <ext-vol-storage-base-url>/myBaseLocation/data/ 에 씁니다.

Snowflake는 변환된 테이블의 메타데이터를 <ext-vol-storage-base-url>/myBaseLocation/metadata/ 에 기록합니다.

변환 및 데이터 타입

참고

다음 Iceberg 데이터 타입을 사용하는 테이블은 변환할 수 없습니다.

  • uuid

  • fixed(L)

Snowflake는 Snowflake 데이터 타입을 사용하여 값을 처리하고 반환하지만 원래 Iceberg 유형은 테이블 데이터 파일에 기록합니다.

intlong 같은 데이터 타입의 경우, Snowflake 데이터 타입은 Iceberg 데이터 타입보다 더 넓은 범위의 값을 지원합니다. Snowflake는 원본 데이터 타입과의 일관성을 유지하기 위해 원본 데이터 타입이 지원하는 범위를 벗어나는 값의 삽입을 허용하지 않습니다. 자세한 내용은 근사 유형 섹션을 참조하십시오.