ALTER TABLE(이벤트 테이블)¶
기존 이벤트 테이블 의 속성, 열 또는 제약 조건을 수정합니다.
구문¶
ALTER TABLE [ IF EXISTS ] <name> RENAME TO <new_table_name>
ALTER TABLE [ IF EXISTS ] <name> clusteringAction
ALTER TABLE [ IF EXISTS ] <name> dataGovnPolicyTagAction
ALTER TABLE [ IF EXISTS ] <name> searchOptimizationAction
ALTER TABLE [ IF EXISTS ] <name> SET
[ DATA_RETENTION_TIME_IN_DAYS = <integer> ]
[ MAX_DATA_EXTENSION_TIME_IN_DAYS = <integer> ]
[ CHANGE_TRACKING = { TRUE | FALSE } ]
[ COMMENT = '<string_literal>' ]
ALTER TABLE [ IF EXISTS ] <name> UNSET {
DATA_RETENTION_TIME_IN_DAYS |
MAX_DATA_EXTENSION_TIME_IN_DAYS |
CHANGE_TRACKING |
COMMENT |
}
여기서
clusteringAction ::= { CLUSTER BY ( <expr> [ , <expr> , ... ] ) | { SUSPEND | RESUME } RECLUSTER | DROP CLUSTERING KEY }dataGovnPolicyTagAction ::= { SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ] | UNSET TAG <tag_name> [ , <tag_name> ... ] } | { ADD ROW ACCESS POLICY <policy_name> ON ( <col_name> [ , ... ] ) | DROP ROW ACCESS POLICY <policy_name> | DROP ROW ACCESS POLICY <policy_name> , ADD ROW ACCESS POLICY <policy_name> ON ( <col_name> [ , ... ] ) | DROP ALL ROW ACCESS POLICIES }searchOptimizationAction ::= { ADD SEARCH OPTIMIZATION [ ON <search_method_with_target> [ , <search_method_with_target> ... ] ] | DROP SEARCH OPTIMIZATION [ ON { <search_method_with_target> | <column_name> | <expression_id> } [ , ... ] ] }자세한 내용은 검색 최적화 작업(searchOptimizationAction) 섹션을 참조하십시오.
매개 변수¶
name
변경할 이벤트 테이블의 식별자입니다. 식별자에 공백이나 특수 문자가 포함된 경우 전체 문자열을 큰따옴표로 묶어야 합니다. 큰따옴표로 묶인 식별자도 대/소문자를 구분합니다.
RENAME TO new_table_name
스키마의 다른 어떤 이벤트 테이블에서도 현재 사용하지 않는 새 식별자로 지정된 이벤트 테이블의 이름을 바꿉니다.
이벤트 테이블 식별자에 대한 자세한 내용은 식별자 요구 사항 섹션을 참조하십시오.
선택적으로 오브젝트의 이름을 바꾸는 동안 오브젝트를 다른 데이터베이스 및/또는 스키마로 이동할 수 있습니다. 그러려면 각각
db_name.schema_name.object_name
또는schema_name.object_name
형식으로 새 데이터베이스 및/또는 스키마 이름을 포함하는 정규화된new_name
값을 지정하십시오.참고
대상 데이터베이스 및/또는 스키마가 이미 있어야 합니다. 또한, 새 위치에 이름이 같은 오브젝트가 있으면 안 됩니다. 그렇지 않으면 문이 오류를 반환합니다.
오브젝트 소유자(즉, 오브젝트에 대한 OWNERSHIP 권한을 가진 역할) 역시 대상 스키마를 소유하지 않는 한 오브젝트를 관리되는 액세스 스키마로 이동하는 것은 금지됩니다.
오브젝트(테이블, 열 등)의 이름이 바뀌면 그 오브젝트를 참조하는 다른 오브젝트도 새 이름으로 업데이트해야 합니다.
SET ...
이벤트 테이블에 대해 설정할 하나 이상의 속성/매개 변수를 지정합니다(공백, 쉼표 또는 새 줄로 구분).
DATA_RETENTION_TIME_IN_DAYS = integer
Time Travel용 이벤트 테이블의 보존 기간을 수정하는 오브젝트 수준 매개 변수입니다. 자세한 내용은 Time Travel 이해 및 사용하기 및 임시 및 일시적 테이블 관련 작업하기 섹션을 참조하십시오.
이 매개 변수에 대한 자세한 설명과 아울러 오브젝트 매개 변수에 대한 자세한 내용은 매개 변수 를 참조하십시오.
값:
Standard Edition:
0
또는1
Enterprise Edition:
영구 이벤트 테이블의 경우
0
~90
임시 이벤트 테이블과 일시적 이벤트 테이블의 경우
0
또는1
참고
0
의 값은 이벤트 테이블의 Time Travel을 효과적으로 비활성화합니다.MAX_DATA_EXTENSION_TIME_IN_DAYS = integer
Snowflake가 이벤트 테이블의 스트림이 부실해지는 것을 방지하기 위해 이벤트 테이블의 데이터 보존 기간을 연장할 수 있는 최대 일수를 지정하는 오브젝트 매개 변수입니다.
이 매개 변수에 대한 자세한 설명은 MAX_DATA_EXTENSION_TIME_IN_DAYS 섹션을 참조하십시오.
CHANGE_TRACKING = TRUE | FALSE
이벤트 테이블에서 변경 내용 추적을 활성화 또는 비활성화하도록 지정합니다.
COMMENT = 'string_literal'
이벤트 테이블에 대한 설명을 추가하거나 기존 설명을 덮어씁니다.
UNSET ...
이벤트 테이블에 대해 설정 해제할 속성/매개 변수를 하나 이상 지정하여 다시 기본값으로 재설정합니다.
DATA_RETENTION_TIME_IN_DAYS
MAX_DATA_EXTENSION_TIME_IN_DAYS
CHANGE_TRACKING
COMMENT
데이터 거버넌스 정책 및 태그 작업(dataGovnPolicyTagAction
)¶
TAG tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ]
태그 이름과 태그 문자열 값을 지정합니다.
태그 값은 항상 문자열이며, 태그 값의 최대 문자 수는 256자입니다.
문에서 태그를 지정하는 방법에 대한 자세한 내용은 오브젝트 및 열에 대한 태그 할당량 섹션을 참조하십시오.
policy_name
정책의 식별자로, 스키마에 고유한 식별자여야 합니다.
다음 절은 테이블, 뷰, 이벤트 테이블 등 행 액세스 정책을 지원하는 모든 테이블 종류에 적용됩니다. 단순화하기 위해 해당 절에서는 “테이블”만 참조합니다.
ADD ROW ACCESS POLICY policy_name ON (col_name [ , ... ])
테이블에 행 액세스 정책을 추가합니다.
하나 이상의 열 이름을 지정해야 합니다. 각 열 이름을 구분하는 쉼표로 추가 열을 지정할 수 있습니다. 이 식을 사용하여 이벤트 테이블과 외부 테이블에 모두 행 액세스 정책을 추가합니다.
DROP ROW ACCESS POLICY policy_name
테이블에서 행 액세스 정책을 삭제합니다.
이 절을 사용하여 테이블에서 정책을 삭제합니다.
DROP ROW ACCESS POLICY policy_name, ADD ROW ACCESS POLICY policy_name ON ( col_name [ , ... ] )
테이블에 설정된 행 액세스 정책을 삭제하고 단일 SQL 문으로 동일한 테이블에 행 액세스 정책을 추가합니다.
DROP ALL ROW ACCESS POLICIES
테이블에서 모든 행 액세스 정책 연결을 삭제합니다.
이 식은 스키마에서 행 액세스 정책을 삭제한 후에 이벤트 테이블에서 정책을 삭제할 때 유용합니다. 테이블에서 행 액세스 정책 연결을 삭제하려면 이 식을 사용하십시오.
SET AGGREGATION POLICY policy_name [ FORCE ]
테이블에 집계 정책 을 할당합니다. 기존 집계 정책을 새 집계 정책으로 원자적으로 바꾸려면 선택적 FORCE 매개 변수를 사용하십시오.
UNSET AGGREGATION POLICY
테이블에서 집계 정책을 분리합니다.
클러스터링 작업(clusteringAction
)¶
CLUSTER BY ( expr [ , expr , ... ] )
하나 이상의 이벤트 테이블 열 또는 열 식을 이벤트 테이블의 클러스터링 키로 지정(또는 수정)합니다. 자동 클러스터링으로 클러스터링을 유지 관리하는 열/식입니다.
중요
클러스터링 키는 모든 이벤트 테이블에 대해 의도되거나 권장되지 않으며, 일반적으로 매우 큰(즉, 멀티 테라바이트 크기의) 이벤트 테이블에 이점이 있습니다.
이벤트 테이블에 대한 클러스터링 키를 지정하기 전에 Snowflake 테이블 구조 이해하기 섹션을 참조하십시오.
SUSPEND | RESUME RECLUSTER
이벤트 테이블에 대해 자동 클러스터링 을 활성화하거나 비활성화합니다.
DROP CLUSTERING KEY
이벤트 테이블에 대한 클러스터링 키를 삭제합니다.
클러스터링 키와 재클러스터링에 대한 자세한 내용은 Snowflake 테이블 구조 이해하기 를 참조하십시오.
검색 최적화 작업(searchOptimizationAction
)¶
ADD SEARCH OPTIMIZATION
전체 이벤트 테이블에 대해, 또는 특정 열에 대해 선택적인 ON 절을 지정하는 경우 검색 최적화 를 추가합니다.
참고:
특히 이벤트 테이블의 데이터가 자주 변경되는 경우 검색 최적화를 유지 관리하는 비용이 많이 들 수 있습니다. 자세한 내용은 검색 최적화 비용 추정 및 관리 섹션을 참조하십시오.
구체화된 뷰에 검색 최적화를 추가하려고 하면 Snowflake가 오류 메시지를 반환합니다.
ON search_method_with_target [, search_method_with_target ... ]
(전체 이벤트 테이블이 아니라) 특정 열 또는 VARIANT 필드에 대한 검색 최적화를 구성하도록 지정합니다.
search_method_with_target
의 경우 다음 구문을 가진 식을 사용합니다.<search_method>(<target> [, ...])
여기서
search_method
는 특정 유형의 조건자에 대한 쿼리를 최적화하는 다음 방법 중 하나를 지정합니다.검색 방법
설명
EQUALITY
같음 조건자와 IN 조건자.
SUBSTRING
하위 문자열 및 정규식과 일치하는 조건자(예: [ NOT ] LIKE, [ NOT ] ILIKE, [ NOT ] RLIKE, REGEXP_LIKE 등)
GEO
GEOGRAPHY 유형을 사용하는 조건자.
target
은 열, VARIANT 필드 또는 별표(*)를 지정합니다.search_method
의 값에 따라 다음 유형 중 하나의 열 또는 VARIANT 필드를 지정할 수 있습니다.검색 방법
지원 대상
EQUALITY
VARIANTs의 필드에 대한 경로를 포함한 숫자, 문자열, 이진 및 VARIANT 데이터 타입의 열입니다.
VARIANT 필드를 지정하려면 필드에 대해 콜론으로 구분된 경로(예:
my_column:my_field_name:my_nested_field_name
)를 사용하거나 점 또는 대괄호 표기법 (예:my_column:my_field_name.my_nested_field_name
또는my_column['my_field_name']['my_nested_field_name']
)을 사용하십시오.VARIANT 필드를 지정하면 해당 필드 아래의 모든 중첩 필드에 구성이 적용됩니다. 예를 들어
ON EQUALITY(src:a.b)
를 지정한다고 가정하겠습니다.이 구성으로 모든 중첩 필드(예:
src:a.b.c
,src:a.b.c.d
등)에서 쿼리on src:a.b
를 개선할 수 있습니다.이 구성은
src:a.b
접두사(예:src:a
,src:z
등)를 사용하지 않는 쿼리에는 영향을 미치지 않습니다.
SUBSTRING
문자열 데이터 타입의 열입니다.
GEO
GEOGRAPHY 데이터 타입의 열입니다.
이벤트 테이블에서 적용 가능한 모든 열을 대상으로 지정하려면 별표(
*
)를 사용하십시오.주어진 검색 방법에 대해 별표와 특정 열 이름을 모두 지정할 수는 없습니다. 하지만 다양한 검색 방법에서 별표를 지정할 수 있습니다.
예를 들어 다음 식을 지정할 수 있습니다.
-- Allowed ON SUBSTRING(*) ON EQUALITY(*), SUBSTRING(*), GEO(*)
다음 식은 지정할 수 없습니다.
-- Not allowed ON EQUALITY(*, c1) ON EQUALITY(c1, *) ON EQUALITY(v1:path, *) ON EQUALITY(c1), EQUALITY(*)
한 대상에 둘 이상의 검색 방법을 지정하려면 쉼표를 사용하여 각 후속 방법과 대상을 구분하십시오.
ALTER TABLE t1 ADD SEARCH OPTIMIZATION ON EQUALITY(c1), EQUALITY(c2, c3);
같은 이벤트 테이블에서 ALTER TABLE … ADD SEARCH OPTIMIZATION ON … 명령을 여러 번 실행하는 경우 각 후속 명령이 이벤트 테이블의 기존 구성에 추가됩니다. 예를 들어 다음 명령을 실행한다고 가정하겠습니다.
ALTER TABLE t1 ADD SEARCH OPTIMIZATION ON EQUALITY(c1, c2); ALTER TABLE t1 ADD SEARCH OPTIMIZATION ON EQUALITY(c3, c4);
그러면 열 c1, c2, c3, c4에 대한 같음 조건자가 이벤트 테이블 구성에 추가됩니다. 이는 다음 명령을 실행하는 것과 같습니다.
ALTER TABLE t1 ADD SEARCH OPTIMIZATION ON EQUALITY(c1, c2, c3, c4);
예는 특정 열의 검색 최적화 활성화하기 을 참조하십시오.
DROP SEARCH OPTIMIZATION
전체 이벤트 테이블에 대해, 또는 특정 열에서 선택적인 ON 절을 지정하는 경우 검색 최적화 를 제거합니다.
참고:
이벤트 테이블에 검색 최적화 속성이 있는 경우 이벤트 테이블을 삭제했다가 삭제를 취소하면 검색 최적화 속성이 유지됩니다.
이벤트 테이블에서 검색 최적화 속성을 제거한 다음 다시 추가하면 처음 추가할 때와 똑같은 비용이 발생합니다.
ON search_method_with_target | column_name | expression_id [, ... ]
(전체 이벤트 테이블에 대해 검색 최적화를 삭제하는 것이 아니라) 특정 열 또는 VARIANT 필드에 대한 검색 최적화 구성을 삭제하도록 지정합니다.
삭제할 열 구성을 식별하려면 다음 중 하나를 지정하십시오.
search_method_with_target
의 경우 열 또는 VARIANT 필드가 될 수 있는 하나 이상의 특정 대상에 대한 쿼리를 최적화하는 방법을 지정합니다. 앞서 설명한 구문 을 사용합니다.column_name
의 경우 검색 최적화를 위해 구성된 열의 이름을 지정합니다. 열 이름을 지정하면 열에서 VARIANT 필드를 사용하는 식을 포함하여 해당 열에 대한 모든 식이 삭제됩니다.expression_id
의 경우 DESCRIBE SEARCH OPTIMIZATION 명령의 출력에 나열된 식의 ID를 지정합니다.
이들 중 둘 이상을 지정하려면 항목 사이에 쉼표를 사용하십시오.
대상, 열 이름, 식 ID를 사용하여 검색 방법의 조합을 지정할 수 있습니다.
예는 특정 열의 검색 최적화 삭제하기 을 참조하십시오.
사용법 노트¶
이벤트 테이블에 대한 변경 사항은 해당 이벤트 테이블에 생성된 뷰에 자동으로 전파되지 않습니다.
이벤트 테이블을 변경하려면 이벤트 테이블에 대한 소유권 권한을 가진 역할을 사용해야 합니다.
이벤트 테이블에 클러스터링을 추가하려면 이벤트 테이블을 포함한 스키마와 데이터베이스에 대한 USAGE 또는 OWNERSHIP 권한도 있어야 합니다.
행 액세스 정책의 경우:
Snowflake는 단일 SQL 문에서 행 액세스 정책 추가 및 삭제를 지원합니다.
예를 들어 테이블에 이미 설정된 행 액세스 정책을 다른 정책으로 바꾸려면 먼저 행 액세스 정책을 삭제한 다음 새 행 액세스 정책을 추가하십시오.
주어진 리소스(즉, 테이블 또는 뷰)의 경우, 행 액세스 정책을
ADD
또는DROP
하려면 스키마에 대한 APPLY ROW ACCESS POLICY 권한 또는 리소스에 대한 OWNERSHIP 권한과 행 액세스 정책 리소스에 대한 APPLY 권한이 있어야 합니다.테이블 또는 뷰는 한 번에 하나의 행 액세스 정책으로만 보호할 수 있습니다. 정책 본문이 행 액세스 정책으로 보호되는 테이블 또는 뷰 열이나 마스킹 정책으로 보호되는 열을 참조하는 경우 정책을 추가하는 데 실패합니다.
마찬가지로, 마스킹 정책 본문이 행 액세스 정책이나 다른 마스킹 정책으로 보호되는 테이블을 참조하는 경우 테이블 열에 마스킹 정책을 추가하는 데 실패합니다.
행 액세스 정책을 시스템 뷰 또는 테이블 함수에 적용할 수 없습니다.
다른 DROP <오브젝트> 작업과 마찬가지로, 행 액세스 정책이 추가되지 않은 리소스에서 행 액세스 정책을 삭제하려고 하면 Snowflake가 오류를 반환합니다.
오브젝트에 행 액세스 정책과 하나 이상의 마스킹 정책이 모두 있는 경우 행 액세스 정책이 먼저 평가됩니다.
외래 키를 생성하는 경우
REFERENCES
절의 열은 기본 키에 대해 나열된 열과 동일한 순서로 나열되어야 합니다. 예:create table parent ... constraint primary_key_1 primary key (c_1, c_2) ... create table child ... constraint foreign_key_1 foreign key (...) REFERENCES parent (c_1, c_2) ...
두 경우 모두 열의 순서는
c_1, c_2
입니다. 외래 키의 열 순서가 달랐다면(예:c_2, c_1
) 외래 키 생성 시도가 실패했을 것입니다.
메타데이터 관련:
주의
고객은 Snowflake 서비스를 사용할 때 개인 데이터(사용자 오브젝트 제외), 민감한 데이터, 수출 통제 대상 데이터 또는 기타 규제 데이터가 메타데이터로 입력되지 않도록 해야 합니다. 자세한 내용은 Snowflake의 메타데이터 필드 섹션을 참조하십시오.
ALTER TABLE … CHANGE_TRACKING = TRUE
변경 내용 추적을 사용하도록 이벤트 테이블을 변경하면 작업 기간 동안 이벤트 테이블이 잠깁니다. 잠금으로 인해 연결된 몇몇 DDL/DML 작업에서 지연이 발생할 수 있습니다. 자세한 내용은 리소스 잠금 섹션을 참조하십시오.
예¶
이벤트 테이블 이름을 t1
에서 a1
로 바꾸기:
CREATE OR REPLACE TABLE t1(a1 number); SHOW TABLES LIKE 't1'; ---------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------+----------------+ created_on | name | database_name | schema_name | kind | comment | cluster_by | rows | bytes | owner | retention_time | ---------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------+----------------+ Tue, 17 Mar 2015 16:52:33 -0700 | T1 | TESTDB | MY_SCHEMA | TABLE | | | 0 | 0 | PUBLIC | 1 | ---------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------+----------------+ ALTER TABLE t1 RENAME TO tt1; SHOW TABLES LIKE 'tt1'; ---------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------+----------------+ created_on | name | database_name | schema_name | kind | comment | cluster_by | rows | bytes | owner | retention_time | ---------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------+----------------+ Tue, 17 Mar 2015 16:52:33 -0700 | TT1 | TESTDB | MY_SCHEMA | TABLE | | | 0 | 0 | PUBLIC | 1 | ---------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------+----------------+
이벤트 테이블의 클러스터링 키 순서 변경:
CREATE OR REPLACE TABLE T1 (id NUMBER, date TIMESTAMP_NTZ, name STRING) CLUSTER BY (id, date); SHOW TABLES LIKE 'T1'; ---------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------------+----------------+ created_on | name | database_name | schema_name | kind | comment | cluster_by | rows | bytes | owner | retention_time | ---------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------------+----------------+ Tue, 21 Jun 2016 15:42:12 -0700 | T1 | TESTDB | TESTSCHEMA | TABLE | | (ID,DATE) | 0 | 0 | ACCOUNTADMIN | 1 | ---------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------------+----------------+ -- Change the order of the clustering key ALTER TABLE t1 CLUSTER BY (date, id); SHOW TABLES LIKE 'T1'; ---------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------------+----------------+ created_on | name | database_name | schema_name | kind | comment | cluster_by | rows | bytes | owner | retention_time | ---------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------------+----------------+ Tue, 21 Jun 2016 15:42:12 -0700 | T1 | TESTDB | TESTSCHEMA | TABLE | | (DATE,ID) | 0 | 0 | ACCOUNTADMIN | 1 | ---------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------------+----------------+
다음은 단일 열을 지정하는 동안 이벤트 테이블에 행 액세스 정책을 추가하는 예입니다. 정책을 설정한 후, 정보 스키마 를 검사하여 확인할 수 있습니다.
ALTER TABLE t1 ADD ROW ACCESS POLICY rap_t1 ON (empl_id);
다음은 단일 이벤트 테이블에 두 개의 열을 지정하는 동안 행 액세스 정책을 추가하는 예입니다.
ALTER TABLE t1 ADD ROW ACCESS POLICY rap_test2 ON (cost, item);
다음은 이벤트 테이블에서 행 액세스 정책을 삭제하는 예입니다. 정보 스키마 를 쿼리하여 정책이 삭제되었음을 확인합니다.
ALTER TABLE t1 DROP ROW ACCESS POLICY rap_v1;
다음은 테이블에 대한 단일 SQL 문에서 행 액세스 정책 추가 및 삭제를 결합하는 방법을 보여주는 예입니다. 정보 스키마 를 검사하여 결과를 확인합니다.
alter table t1 drop row access policy rap_t1_version_1, add row access policy rap_t1_version_2 on (empl_id);