ALTER ICEBERG TABLE … ALTER COLUMN … SET DATA TYPE¶
참고
외부 카탈로그를 사용하는 Iceberg 테이블에서는 이 구문 변형이 지원되지 않습니다.
Snowflake로 관리되는 Apache Iceberg™ 테이블 의 정형 타입 열을 수정(진화)합니다.
이 명령을 사용하면 Iceberg 테이블 열의 정형 타입을 수정할 수 있습니다. 정형 OBJECT에서 키 이름을 변경하거나 다음 변경 사항을 조합하여 수행할 수 있습니다.
정형 타입 내의 필드 유형 진화시키기.
정형 OBJECT에서 키 재정렬하기.
정형 OBJECT에 키 추가하기.
정형 OBJECT에서 키 삭제하기.
키 이름 변경과 다른 수정 작업을 결합할 수 없습니다.
간결성을 위해, 이 항목에서는 Iceberg 테이블과 일반 Snowflake 테이블을 구분할 때를 제외하고는 간단히 “테이블”로 지칭합니다.
구문¶
정형 타입 열 수정
ALTER ICEBERG TABLE [ IF EXISTS ] <table_name> ALTER COLUMN <structured_column>
SET DATA TYPE <new_structured_type>
정형 OBJECT에서 키 이름 바꾸기
ALTER ICEBERG TABLE [ IF EXISTS ] <table_name> ALTER COLUMN <structured_column>
SET DATA TYPE <new_structured_type>
RENAME FIELDS
매개 변수¶
table_name
수정할 테이블의 식별자입니다.
식별자에 공백이나 특수 문자가 포함된 경우 전체 문자열을 큰따옴표로 묶어야 합니다. 큰따옴표로 묶인 식별자도 대/소문자를 구분합니다.
자세한 내용은 식별자 요구 사항 섹션을 참조하십시오.
ALTER COLUMN structured_column
수정할 정형 타입 열을 지정합니다.
식별자에 공백이나 특수 문자가 포함된 경우 전체 문자열을 큰따옴표로 묶어야 합니다. 큰따옴표로 묶인 식별자도 대/소문자를 구분합니다.
자세한 내용은 식별자 요구 사항 섹션을 참조하십시오.
SET DATA TYPE new_structured_type
열에 사용할 새 정형 타입에 대한 전체 사양입니다. 예를 들어, NUMBER 요소의 정형 ARRAY를 지정하려면 ARRAY(NUMBER)를 사용합니다.
자세한 내용은 정형 유형 지정하기 및 이 페이지의 예제를 참조하십시오.
RENAME FIELDS
명령이 정형 OBJECT에서 하나 이상의 키 이름을 바꾸도록 지정합니다. 이전 키와 새 키는 이름만 달라야 하며, 계층 구조와 데이터 타입은 정확히 동일해야 합니다. 키 이름을 변경해도 IDs 필드는 변경되지 않습니다.
키 이름 변경은 Iceberg 테이블의 정형 타입에 대한 다른 수정과 결합할 수 없습니다.
액세스 제어 요구 사항¶
이 SQL 명령을 실행하는 데 사용되는 역할 에는 최소한 다음 권한 이 있어야 합니다.
권한 |
오브젝트 |
참고 |
---|---|---|
OWNERSHIP |
Iceberg 테이블 |
OWNERSHIP is a special privilege on an object that is automatically granted to the role that created the object, but can also be transferred using the GRANT OWNERSHIP command to a different role by the owning role (or any role with the MANAGE GRANTS privilege). |
USAGE |
외부 볼륨 |
스키마의 모든 오브젝트에 대해 작업하려면 상위 데이터베이스 및 스키마에 대한 USAGE 권한도 필요합니다.
지정된 권한 세트로 사용자 지정 역할을 만드는 방법에 대한 지침은 사용자 지정 역할 만들기 섹션을 참조하십시오.
보안 오브젝트 에 대해 SQL 작업을 수행하기 위한 역할과 권한 부여에 대한 일반적인 정보는 액세스 제어의 개요 섹션을 참조하십시오.
사용법 노트¶
이 명령은 다음 작업을 지원하지 않습니다.
정형 타입을 비정형 타입으로 진화시키기(또는 그 반대).
정형 ARRAY 요소 또는 정형 MAP의 키-값 페어에 null 제약 조건을 설정하기.
RENAME FIELDS를 사용하여 테이블의 클러스터링 키의 일부인 키의 이름을 변경합니다.
정형 OBJECT에 대한 NULL 제약 조건 변경하기.
데이터 액세스 정책을 사용하는 테이블의 경우 열의 새 데이터 타입이 데이터 액세스 정책의 인자 유형과 호환되는지 확인하십시오. 그렇지 않으면 테이블 쿼리가 실패할 수 있습니다. 예를 들어, 정형 OBJECT 열에 키를 추가하는 경우 정책을 변경하거나 새 정책을 생성하여 테이블에 적용해야 합니다.
메타데이터 관련:
주의
고객은 Snowflake 서비스를 사용할 때 개인 데이터(사용자 오브젝트 제외), 민감한 데이터, 수출 통제 대상 데이터 또는 기타 규제 데이터가 메타데이터로 입력되지 않도록 해야 합니다. 자세한 내용은 Snowflake의 메타데이터 필드 섹션을 참조하십시오.
예¶
타입 진화시키기¶
정형 타입 필드의 유형을 진화시킬 수 있습니다. 타입을 진화시킨다는 것은 타입을 더 크고 관련성이 높은 Iceberg 데이터 타입으로 확장하는 것을 의미합니다.
Snowflake는 Apache Iceberg 사양: 에 따라 다음과 같은 타입의 진화를 지원합니다.
int
타입의 필드를long
타입으로 변경합니다.float
타입의 필드를double
타입으로 변경합니다.decimal(p,s)
타입의 필드를p
가p'
보다 작은decimal(p',s)
타입으로 변경합니다.
필드 유형을 진화시키려면 정형 타입을 지정하는 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_b
가 key_a
앞에 오도록 키의 순서를 변경합니다.
ALTER ICEBERG TABLE my_iceberg_table ALTER COLUMN column_1
SET DATA TYPE OBJECT(
key_b int,
key_a int
);
키 추가하기¶
정형 OBJECT에 키를 추가할 수 있습니다. 새 키는 해당 값에 대해 Iceberg 테이블에 지원되는 모든 데이터 타입 을 사용할 수 있습니다.
참고
Snowflake는 테이블의 모든 기존 행에 대해 키의 값을 NULL로 설정하므로 키를 추가할 때 null 제약 조건을 설정할 수 없습니다.
예를 들어, 다음 CREATE ICEBERG TABLE 문을 생각해 보겠습니다. 테이블에는 하나의 키(column_1
)를 가진 OBJECT 타입의 열(key_1
) 하나가 있습니다.
CREATE ICEBERG TABLE my_iceberg_table (
column_1 OBJECT(
key_1 int
)
)
CATALOG = 'SNOWFLAKE'
EXTERNAL_VOLUME = 'my_external_volume'
BASE_LOCATION = '';
다음 명령은 이름이 key_2
인 키를 column_1
에 추가합니다.
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에서 키 이름을 변경하려면 RENAME FIELDS 키워드를 사용합니다.
예를 들어, 다음 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;