아이스버그 테이블 파티션 수정하기

아이스버그 테이블 파티션 수정하기 (ALTER ICEBERG TABLE)

Snowflake 관리형 Apache Iceberg™ table의 파티션 필드를 추가, 삭제 또는 교체합니다.

함께 보기:

CREATE ICEBERG TABLE , DROP ICEBERG TABLE , SHOW ICEBERG TABLES , DESCRIBE ICEBERG TABLE

출처: 문서

본문

구문

ALTER ICEBERG TABLE [ IF EXISTS ]  ADD PARTITION BY (  )

ALTER ICEBERG TABLE [ IF EXISTS ]  DROP PARTITION BY (  )

ALTER ICEBERG TABLE [ IF EXISTS ]  REPLACE PARTITION BY (  ) WITH (  )

partitionExpression, oldPartitionExpression, newPartitionExpression 구문은 Partition expression parameters를 참조하세요.

매개변수

table_name

수정할 테이블의 식별자예요.

식별자에 공백이나 특수 문자가 포함되어 있으면 전체 문자열을 큰따옴표로 묶어야 해요. 큰따옴표로 묶인 식별자는 대소문자를 구분해요.

자세한 내용은 Identifier requirements를 참조하세요.

ADD PARTITION BY ( partitionExpression )

테이블의 현재 파티션 스펙에 파티션 필드를 추가해요. 명령이 완료된 후에 쓰여지는 새 데이터는 업데이트된 파티션 스펙을 사용해요.

파티션 필드를 추가해도 기존 데이터는 다시 쓰여지지 않아요.

DROP PARTITION BY ( partitionExpression )

테이블의 현재 파티션 스펙에서 파티션 필드를 제거해요. 명령이 완료된 후에 쓰여지는 새 데이터는 업데이트된 파티션 스펙을 사용해요.

파티션 필드를 제거해도 기존 데이터는 다시 쓰여지지 않아요.

REPLACE PARTITION BY ( oldPartitionExpression ) WITH ( newPartitionExpression )

테이블의 현재 파티션 스펙에 있는 파티션 필드를 새 파티션 필드로 교체해요. 명령이 완료된 후에 쓰여지는 새 데이터는 업데이트된 파티션 스펙을 사용해요.

파티션 필드를 교체해도 기존 데이터는 다시 쓰여지지 않아요.

파티션 표현식 매개변수 (partitionExpression)

partitionExpression ::=
                              -- identity transform
  | BUCKET (  ,  )
  | TRUNCATE (  ,  )
  | YEAR (  )
  | MONTH (  )
  | DAY (  )
  | HOUR (  )

oldPartitionExpressionnewPartitionExpression은 동일한 구문을 사용해요. REPLACE PARTITION BY 명령에서 oldPartitionExpression은 테이블의 현재 파티션 스펙에 있는 파티션 필드와 일치해야 해요.

Snowflake는 Apache Iceberg 사양 버전 2의 모든 파티션 변환을 지원해요. 자세한 내용은 Apache Iceberg 사양의 Partition Transforms를 참조하세요.

액세스 제어 요구 사항

이 작업을 실행하는 데 사용되는 role은 최소한 다음 privileges을(를) 보유해야 해요.

권한 개체 참고
OWNERSHIP Iceberg 테이블 %ac-ownership%

스키마의 개체를 작업하려면 상위 데이터베이스에 대한 권한이 하나 이상 필요하고 상위 스키마에 대한 권한도 하나 이상 필요해요.

지정된 권한 집합을 가진 사용자 지정 역할을 만드는 방법은 을(를) 참조하세요.

보안 개체에 대해 SQL 작업을 수행하기 위한 역할 및 권한 부여에 대한 일반적인 정보는 Overview of Access Control을(를) 참조하세요.

사용 참고 사항

  • 테이블 소유자(즉, 테이블에 대한 OWNERSHIP 권한이 있는 역할) 이상만 이 명령을 실행할 수 있어요.
  • 파티션 진화는 Snowflake를 Iceberg 카탈로그로 사용하는 테이블(Snowflake 관리 Iceberg 테이블)에서만 지원돼요.
  • 명령당 정확히 하나의 파티션 필드를 변경할 수 있어요. 여러 파티션 표현식은 지원되지 않아요.
  • 파티션 필드를 추가, 제거 또는 교체한 후 새 파티션 스펙이 테이블에 정의된 기존 파티션 스펙과 호환되면 Snowflake는 기존 파티션 스펙을 재사용해요.
  • 테이블에 정의된 현재 또는 과거 파티션 스펙의 일부인 열을 삭제하는 것은 지원되지 않아요.
  • 현재 파티션되어 있거나 이전에 파티션 변환이 정의된 적이 있는 테이블에서는 클러스터링을 활성화할 수 없어요. 이 제한은 모든 파티션 필드가 삭제되어 더 이상 파티션되지 않는 경우에도 적용돼요.

예제

다음 예제는 col1 값을 기준으로 데이터를 10개의 버킷으로 분산하는 파티션 필드를 추가해요.

ALTER ICEBERG TABLE myTable ADD PARTITION BY (BUCKET(10, col1));

다음 예제는 col2를 기반으로 하는 identity 파티션 필드를 제거해요.

ALTER ICEBERG TABLE myTable DROP PARTITION BY (col2);

다음 예제는 col1을 기준으로 데이터를 10개의 버킷으로 분산하는 파티션 필드를 데이터를 20개의 버킷으로 분산하는 파티션 필드로 교체해요.

ALTER ICEBERG TABLE myTable REPLACE PARTITION BY (BUCKET(10, col1)) WITH (BUCKET(20, col1));

테이블에 정의된 모든 파티션 스펙과 현재 사용 중인 파티션 스펙의 ID를 보려면:

SHOW ICEBERG TABLES LIKE 'myTable'
  ->> SELECT "partition_specs", "current_partition_spec_id" FROM $1;

더 알아보기 (Learn more)