ALTER TABLE … ALTER COLUMN¶
이 항목에서는 ALTER TABLE 문에서 ALTER COLUMN
절을 사용하여 테이블에 대한 하나 이상의 열 속성을 수정하는 방법을 설명합니다.
다음 표에 열 속성 수정을 위해 지원되거나 지원되지 않는 동작을 설명되어 있습니다.
동작 |
지원됨 |
지원 안 됨 |
참고 |
---|---|---|---|
기본값 |
|||
열의 기본값을 삭제합니다(즉,
DROP DEFAULT ). |
✔ |
열과 기본값이 ALTER TABLE 명령으로 정의된 경우 허용되지 않습니다. 자세한 내용은 아래의 사용법 노트 를 참조하십시오. |
|
열의 기본 시퀀스(즉,
SET DEFAULT seq_name.NEXTVAL )를 변경합니다. |
✔ |
이미 시퀀스가 있는 열에만 사용합니다. |
|
기본값이 시퀀스가 아닌 경우 열의 기본값을 변경합니다.
|
✔ |
||
열의 기본값을 추가합니다.
|
✔ |
||
Null 허용 여부 |
|||
열의 Null 허용 여부를 변경합니다(즉
SET NOT NULL 또는 DROP NOT NULL ). |
✔ |
||
데이터 타입 |
|||
✔ |
|||
✔ |
|||
✔ |
|||
✔ |
|||
✔ |
|||
✔ |
새 정밀도가 현재 열에 있는 모든 값을 유지하기에 충분한 경우에만 허용됩니다. 또한, 정밀도를 낮추면 Time Travel에 영향을 줄 수 있습니다(자세한 내용은 사용법 노트 참조). |
||
✔ |
|||
설명 |
|||
열에 대한 설명을 설정하거나 설정을 해제합니다.
|
✔ |
||
마스킹 정책 |
|||
열에 대한 마스킹 정책 을 설정하거나 설정 해제합니다.
|
✔ |
||
프로젝션 정책 |
|||
열에 대한 프로젝션 정책 을 설정하거나 설정 해제합니다.
|
✔ |
||
오브젝트 태깅 |
|||
열에서 태그 설정 또는 설정 해제
|
✔ |
열은 최대 20개의 태그를 지원할 수 있으며 태그 문자열 값의 최대 문자 수는 256자입니다. |
- 참고 항목:
ALTER TABLE , CREATE TABLE , DROP TABLE , SHOW TABLES , DESCRIBE TABLE
구문¶
ALTER TABLE <name> { ALTER | MODIFY } [ ( ]
[ COLUMN ] <col1_name> DROP DEFAULT
, [ COLUMN ] <col1_name> SET DEFAULT <seq_name>.NEXTVAL
, [ COLUMN ] <col1_name> { [ SET ] NOT NULL | DROP NOT NULL }
, [ COLUMN ] <col1_name> [ [ SET DATA ] TYPE ] <type>
, [ COLUMN ] <col1_name> COMMENT '<string>'
, [ COLUMN ] <col1_name> UNSET COMMENT
[ , [ COLUMN ] <col2_name> ... ]
[ , ... ]
[ ) ]
ALTER TABLE <name> { ALTER | MODIFY } [ COLUMN ] dataGovnPolicyTagAction
사용법 노트¶
단일 ALTER TABLE 문을 사용하여 테이블의 여러 열을 수정할 수 있습니다. 각 변경 사항은 쉼표로 구분하여 수정할 열과 열 속성으로 구성된 절로 지정됩니다.
ALTER
또는MODIFY
키워드를 사용하여 문의 절 목록(즉, 수정할 열/속성)을 시작합니다.괄호를 사용해 절을 그룹화할 수 있지만, 필수 사항은 아닙니다.
각 절에
COLUMN
키워드를 지정할 수 있지만, 필수 사항은 아닙니다.절은 어떤 순서로든 지정할 수 있습니다.
열을
NOT NULL
로 설정할 때 열에 NULL 값이 포함되어 있으면 오류가 반환되고 열에 아무런 변경 사항도 적용되지 않습니다.반정형 데이터 타입(ARRAY, OBJECT, VARIANT)을 사용하는 열은 테이블이 비어 있는 경우를 제외하고는
NOT NULL
로 설정할 수 없습니다. 테이블에 행이 포함된 경우 이러한 열을NOT NULL
로 설정하는 것은 지원되지 않으며 오류가 발생합니다.열의 기본 시퀀스를 변경하려면 열에 기본 시퀀스가 이미 있어야 합니다.
ALTER TABLE ... SET DEFAULT <seq_name>
명령을 사용하여 아직 시퀀스가 없는 열에 시퀀스를 추가할 수 없습니다.DEFAULT
값이 있는 열을 추가하도록 테이블을 변경하면 해당 열의 기본값을 삭제할 수 없습니다. 예를 들어, 다음 문 시퀀스에서 마지막ALTER TABLE ... ALTER COLUMN
문은 오류를 발생시킵니다.CREATE TABLE t(x INT); INSERT INTO t VALUES (1), (2), (3); ALTER TABLE t ADD COLUMN y INT DEFAULT 100; INSERT INTO t(x) VALUES (4), (5), (6); ALTER TABLE t ALTER COLUMN y DROP DEFAULT;
이 제한은 열이 추가되기 전에 삽입된 행의 값과 열이 추가된 후에 삽입된 행 사이의 불일치를 방지합니다. 기본값이 삭제된 경우 열에는 다음이 포함됩니다.
열이 추가되기 전에 삽입된 행의 NULL 값입니다.
열이 추가된 후에 행의 기본값이 삽입되었습니다.
테이블 복제본에서 열 기본값을 삭제하는 작업도 수행할 수 없습니다.
열에 대해
TYPE
을 설정할 때 지정된 형식(즉,type
)은 NUMBER 또는 텍스트 데이터 타입 (VARCHAR, STRING, TEXT 등)이어야 합니다.NUMBER 데이터 타입의 경우
TYPE
을 사용해 다음을 수행할 수 있습니다.지정된 숫자 열의 정밀도를 높입니다.
새 정밀도가 현재 열에 있는 모든 데이터 값을 유지하기에 충분한 경우 지정된 숫자 열의 정밀도를 낮춥니다.
텍스트 데이터 타입의 경우 열 길이를 늘리는 데는
TYPE
만 사용할 수 있습니다.
열의 정밀도가 Time Travel에 보관된 모든 열 데이터의 최대 정밀도 미만으로 감소하면 먼저 정밀도부터 높여야 테이블을 복원할 수 있습니다.
마스킹 정책의 경우:
USING
절과FORCE
키워드는 모두 선택 사항으로, 둘 중 어떤 것도 열에 대한 마스킹 정책을 설정할 필요가 없습니다.USING
절과FORCE
키워드는 따로 사용하거나 함께 사용할 수 있습니다. 자세한 내용은 다음을 참조하십시오.조건부 열을 사용하는 단일 마스킹 정책은 테이블의 열 구조가 정책에 지정된 열과 일치하는 경우 여러 테이블에 적용할 수 있습니다.
마스킹 정책으로 하나 이상의 테이블 열을 수정하거나 행 액세스 정책으로 테이블 자체를 수정할 때, POLICY_CONTEXT 함수를 사용하여, 마스킹 정책으로 보호되는 열과 행 액세스 정책으로 보호되는 테이블에 대한 쿼리를 시뮬레이션합니다.
메타데이터 관련(예:
COMMENT
필드):주의
고객은 Snowflake 서비스를 사용할 때 개인 데이터(사용자 오브젝트 제외), 민감한 데이터, 수출 통제 대상 데이터 또는 기타 규제 데이터가 메타데이터로 입력되지 않도록 해야 합니다. 자세한 내용은 Snowflake의 메타데이터 필드 섹션을 참조하십시오.
예¶
설정 예:
CREATE OR REPLACE TABLE t1 ( c1 NUMBER NOT NULL, c2 NUMBER DEFAULT 3, c3 NUMBER DEFAULT seq1.nextval, c4 VARCHAR(20) DEFAULT 'abcde', c5 STRING); DESC TABLE t1; +------+-------------------+--------+-------+-------------------------+-------------+------------+-------+------------+---------+ | name | type | kind | null? | default | primary key | unique key | check | expression | comment | |------+-------------------+--------+-------+-------------------------+-------------+------------+-------+------------+---------| | C1 | NUMBER(38,0) | COLUMN | N | NULL | N | N | NULL | NULL | NULL | | C2 | NUMBER(38,0) | COLUMN | Y | 3 | N | N | NULL | NULL | NULL | | C3 | NUMBER(38,0) | COLUMN | Y | DB1.PUBLIC.SEQ1.NEXTVAL | N | N | NULL | NULL | NULL | | C4 | VARCHAR(20) | COLUMN | Y | 'abcde' | N | N | NULL | NULL | NULL | | C5 | VARCHAR(16777216) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | +------+-------------------+--------+-------+-------------------------+-------------+------------+-------+------------+---------+
t1
에 대해 다음과 같이 변경합니다.
NOT NULL 열
c1
을 NULL로 변경합니다.열
c2
의 기본값을 삭제하고 열c3
의 기본 시퀀스를 변경합니다.열
c4
의 길이를 늘리고 열의 기본값을 삭제합니다.열
c5
에 대한 설명을 추가합니다.ALTER TABLE t1 ALTER COLUMN c1 DROP NOT NULL; ALTER TABLE t1 MODIFY c2 DROP DEFAULT, c3 SET DEFAULT seq5.nextval ; ALTER TABLE t1 ALTER c4 SET DATA TYPE VARCHAR(50), COLUMN c4 DROP DEFAULT; ALTER TABLE t1 ALTER c5 COMMENT '50 character column'; DESC TABLE t1; +------+-------------------+--------+-------+-------------------------+-------------+------------+-------+------------+---------------------+ | name | type | kind | null? | default | primary key | unique key | check | expression | comment | |------+-------------------+--------+-------+-------------------------+-------------+------------+-------+------------+---------------------| | C1 | NUMBER(38,0) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | | C2 | NUMBER(38,0) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | | C3 | NUMBER(38,0) | COLUMN | Y | DB1.PUBLIC.SEQ5.NEXTVAL | N | N | NULL | NULL | NULL | | C4 | VARCHAR(50) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | | C5 | VARCHAR(16777216) | COLUMN | Y | NULL | N | N | NULL | NULL | 50 character column | +------+-------------------+--------+-------+-------------------------+-------------+------------+-------+------------+---------------------+
이전 예와 같지만, 명령의 다목적성/유연성을 설명하기 위해 다음과 같이 변경했습니다.
모든 작업이 단일
ALTER COLUMN
절에서 실행됩니다.절 내부의 열 순서가 다릅니다.
SET DATA TYPE
을 간단히TYPE
으로 줄였습니다.ALTER TABLE t1 ALTER ( c1 DROP NOT NULL, c5 COMMENT '50 character column', c4 TYPE VARCHAR(50), c2 DROP DEFAULT, COLUMN c4 DROP DEFAULT, COLUMN c3 SET DEFAULT seq5.nextval );이 예는 똑같은 결과를 냅니다.
테이블 열에 열 수준 보안 마스킹 정책을 적용합니다.
-- single column ALTER TABLE empl_info MODIFY COLUMN empl_id SET MASKING POLICY mask_empl_id; -- multiple columns ALTER TABLE empl_info MODIFY COLUMN empl_id SET MASKING POLICY mask_empl_id , COLUMN empl_dob SET MASKING POLICY mask_empl_dob ;
테이블 열에서 열 수준 보안 마스킹 정책을 설정 해제합니다.
-- single column ALTER TABLE empl_info modify column empl_id unset masking policy; -- multiple columns ALTER TABLE empl_info MODIFY COLUMN empl_id UNSET MASKING POLICY , COLUMN empl_dob UNSET MASKING POLICY ;