아이스버그 테이블 컬럼 구조적 데이터 타입 설정

아이스버그 테이블 컬럼 구조적 데이터 타입 설정 (ALTER ICEBERG TABLE ... ALTER COLUMN ... SET DATA TYPE)

이 구문 변형은 외부 카탈로그를 사용하는 Iceberg 테이블에서는 지원되지 않아요.

Snowflake 관리형 Apache Iceberg™ table에서 structured type 컬럼을 수정(진화)해요.

이 명령을 사용하면 Iceberg 테이블 컬럼의 structured type을 수정할 수 있어요. structured OBJECT에서 키 이름을 바꾸거나 다음 변경 사항을 조합해서 수행할 수 있어요:

  • structured type 내 필드의 타입을 진화시키기.
  • structured OBJECT에서 키를 재정렬하기.
  • structured OBJECT에 키를 추가하기.
  • structured OBJECT에서 키를 제거하기.

키 이름 바꾸기는 다른 수정 사항과 함께 조합할 수 없어요.

간결하게 하기 위해, 이 항목에서는 Iceberg 테이블과 일반 Snowflake 테이블을 구분해야 할 때를 제외하고 Iceberg 테이블을 그냥 '테이블'이라고 지칭해요.

참조:

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

출처: 문서

본문

구문

구조화된 타입 열 수정

ALTER ICEBERG TABLE [ IF EXISTS ]  ALTER COLUMN 
  SET DATA TYPE 

구조화된 OBJECT의 키 이름 바꾸기

ALTER ICEBERG TABLE [ IF EXISTS ]  ALTER COLUMN 
  SET DATA TYPE 
  RENAME FIELDS

매개변수

table_name

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

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

자세한 내용은 식별자 요구 사항을 참조하세요.

ALTER COLUMN structured_column

수정할 구조화된 타입 열을 지정해요.

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

자세한 내용은 식별자 요구 사항을 참조하세요.

SET DATA TYPE new_structured_type

열에 사용할 새 구조화된 타입의 전체 사양이에요. 예를 들어 NUMBER 요소로 구성된 구조화된 ARRAY를 지정하려면 ARRAY(NUMBER)를 사용해요.

자세한 내용은 및 이 페이지의 예제를 참조하세요.

RENAME FIELDS

명령이 구조화된 OBJECT에서 하나 이상의 키 이름을 바꾸도록 지정해요. 이전 키와 새 키는 이름만 달라야 하며 계층 구조와 데이터 타입이 정확히 동일해야 해요. 키 이름을 바꿔도 필드 ID는 변경되지 않아요.

키 이름 바꾸기는 Iceberg 테이블에서 구조화된 타입에 대한 다른 수정과 함께 사용할 수 없어요.

RENAME FIELDS 예제를 참조하세요.

액세스 제어 요구 사항

이 작업을 실행하는 데 사용되는 역할에는 최소한 다음 권한이 있어야 해요:

권한 객체 참고
OWNERSHIP Iceberg 테이블 %ac-ownership%
USAGE 외부 볼륨

스키마의 객체를 대상으로 작업하려면 상위 데이터베이스에 대한 권한이 하나 이상, 상위 스키마에 대한 권한이 하나 이상 필요해요.

지정된 권한 집합으로 사용자 지정 역할을 만드는 방법은 을 참조하세요.

보안 가능 객체에 대해 SQL 작업을 수행하기 위한 역할 및 권한 부여에 대한 일반적인 정보는 액세스 제어 개요를 참조하세요.

사용 참고 사항

  • 이 명령은 다음 작업을 지원하지 않아요:

    • 구조화된 타입을 비구조화된 타입으로 진화시키는 것(또는 그 반대).
    • 구조화된 ARRAY 요소 또는 구조화된 MAP의 키-값 쌍에 null 제약 조건을 설정하는 것.
    • RENAME FIELDS를 사용하여 테이블의 클러스터링 키의 일부인 키 이름을 바꾸는 것.
    • 구조화된 OBJECT에 대한 NULL 제약 조건을 변경하는 것.
    • 카탈로그 연결 데이터베이스의 테이블을 변경하는 것.
  • 데이터 액세스 정책을 사용하는 테이블의 경우 열의 새 데이터 타입이 데이터 액세스 정책의 인수 타입과 호환되는지 확인해야 해요. 그렇지 않으면 테이블을 쿼리할 때 실패할 수 있어요. 예를 들어 구조화된 OBJECT 열에 키를 추가하는 경우 정책을 변경하거나 새 정책을 만들어 테이블에 적용해야 해요.

  • 메타데이터 관련:

예제

타입 진화

구조화된 타입의 필드 타입을 진화시킬 수 있어요. 타입을 진화시킨다는 것은 더 크고 관련된 Iceberg 데이터 타입으로 확장하는 것을 의미해요.

Snowflake는 Apache Iceberg 사양에 따라 다음 타입 진화를 지원해요:

  • int 타입의 필드를 long 타입으로 변경하는 것.
  • float 타입의 필드를 double 타입으로 변경하는 것.
  • decimal(p,s) 타입의 필드를 decimal(p',s) 타입으로 변경하는 것. 여기서 pp'보다 작아요.

필드 타입을 진화시키려면 구조화된 타입을 지정하기 위한 Snowflake 구문을 사용해요. 사양에 Iceberg 데이터 타입을 사용할 수 있어요. 예를 들어 다음 문은 구조화된 ARRAY 열의 요소 타입을 (Iceberg) long 타입으로 변경해요.

ALTER ICEBERG TABLE my_iceberg_table ALTER COLUMN col1
  SET DATA TYPE ARRAY(long);

Iceberg 데이터 타입이 Snowflake 데이터 타입에 매핑되는 방법에 대한 자세한 내용은 Apache Iceberg™ 테이블용 데이터 타입을 참조하세요.

키 순서 변경

구조화된 OBJECT에서 키 순서를 변경하려면 ALTER ICEBERG TABLE 문에 새 순서를 지정해요. 키 순서를 변경해도 OBJECT의 데이터에는 영향을 주지 않아요.

예를 들어 다음 CREATE ICEBERG TABLE 문을 살펴봐요. 이 테이블에는 지정된 순서로 두 개의 키가 있는 OBJECT 타입의 열 하나(column_1)가 있어요:

CREATE ICEBERG TABLE my_iceberg_table (
  column_1 OBJECT(
      key_a int,
      key_b int
    )
  )
  CATALOG = 'SNOWFLAKE'
  EXTERNAL_VOLUME = 'my_external_volume'
  BASE_LOCATION = '';

다음 명령은 key_bkey_a보다 앞에 오도록 키 순서를 변경해요:

ALTER ICEBERG TABLE my_iceberg_table ALTER COLUMN column_1
  SET DATA TYPE OBJECT(
    key_b int,
    key_a int
  );

키 추가

구조화된 OBJECT에 키를 추가할 수 있어요. 새 키의 값에는 Iceberg 테이블에서 지원되는 데이터 타입 중 하나를 사용할 수 있어요.

키를 추가할 때 null 제약 조건을 설정할 수 없어요. Snowflake가 테이블의 모든 기존 행에 대해 키 값을 NULL로 설정하기 때문이에요.

예를 들어 다음 CREATE ICEBERG TABLE 문을 살펴봐요. 이 테이블에는 키 하나(key_1)가 있는 OBJECT 타입의 열 하나(column_1)가 있어요:

CREATE ICEBERG TABLE my_iceberg_table (
  column_1 OBJECT(
      key_1 int
    )
  )
  CATALOG = 'SNOWFLAKE'
  EXTERNAL_VOLUME = 'my_external_volume'
  BASE_LOCATION = '';

다음 명령은 column_1key_2라는 키를 추가해요:

ALTER ICEBERG TABLE my_iceberg_table ALTER COLUMN column_1
  SET DATA TYPE OBJECT(
    key_1 int,
    key_2 int
  );

키 삭제

값이 클러스터링 키에 속하는 구조화된 데이터 타입인 키 삭제는 지원되지 않아요.

구조화된 OBJECT에서 키를 삭제하려면 ALTER ICEBERG TABLE ... ALTER COLUMN 명령을 사용하여 OBJECT를 다시 정의해요.

키를 삭제하면 테이블의 모든 행에서 키와 해당 값이 제거돼요.

예를 들어 다음 CREATE ICEBERG TABLE 문을 살펴봐요. 이 테이블에는 두 개의 키가 있는 OBJECT 타입의 열 하나(column_1)가 있어요:

CREATE ICEBERG TABLE my_iceberg_table (
  column_1 OBJECT(
      key_1 int,
      key_2 ARRAY(string)
    )
  )
  CATALOG = 'SNOWFLAKE'
  EXTERNAL_VOLUME = 'my_external_volume'
  BASE_LOCATION = '';

다음 명령은 OBJECT 사양에서 key_2를 생략하여 해당 키를 삭제해요:

ALTER ICEBERG TABLE my_iceberg_table ALTER COLUMN column_1
  SET DATA TYPE OBJECT(
    key_1 int
  );

키 이름 바꾸기

구조화된 OBJECT의 키 이름을 변경하려면 키워드를 사용해요.

예를 들어, 다음 CREATE ICEBERG TABLE 문을 살펴봐요:

CREATE ICEBERG TABLE my_iceberg_table (
  column_1 OBJECT(
      key_1 int,
      key_2 int
    )
  )
  CATALOG = 'SNOWFLAKE'
  EXTERNAL_VOLUME = 'my_external_volume'
  BASE_LOCATION = '';

다음 명령은 RENAME FIELDS를 사용해서 column_1의 키 이름을 바꿔요:

ALTER ICEBERG TABLE my_iceberg_table ALTER COLUMN column_1
  SET DATA TYPE OBJECT(
    k_1 int,
    k_2 int
  )
  RENAME FIELDS;

더 알아보기 (Learn more)