ALTER DYNAMIC TABLE¶
동적 테이블 의 속성을 수정합니다.
이 항목의 내용:
구문¶
ALTER DYNAMIC TABLE [ IF EXISTS ] <name> { SUSPEND | RESUME }
ALTER DYNAMIC TABLE [ IF EXISTS ] <name> RENAME TO <new_name>
ALTER DYNAMIC TABLE [ IF EXISTS ] <name> SWAP WITH <target_dynamic_table_name>
ALTER DYNAMIC TABLE [ IF EXISTS ] <name> REFRESH
ALTER DYNAMIC TABLE [ IF EXISTS ] <name> { clusteringAction }
ALTER DYNAMIC TABLE [ IF EXISTS ] <name> { tableColumnCommentAction }
ALTER DYNAMIC TABLE <name> { SET | UNSET } COMMENT = '<string_literal>'
ALTER DYNAMIC TABLE [ IF EXISTS ] <name> dataGovnPolicyTagAction
ALTER DYNAMIC TABLE [ IF EXISTS ] <name> searchOptimizationAction
ALTER DYNAMIC TABLE [ IF EXISTS ] <name> SET
[ TARGET_LAG = { '<num> { seconds | minutes | hours | days }' | DOWNSTREAM } ]
[ WAREHOUSE = <warehouse_name> ]
[ DATA_RETENTION_TIME_IN_DAYS = <integer> ]
[ MAX_DATA_EXTENSION_TIME_IN_DAYS = <integer> ]
[ DEFAULT_DDL_COLLATION = '<collation_specification>' ]
ALTER DYNAMIC TABLE [ IF EXISTS ] <name> UNSET
[ DATA_RETENTION_TIME_IN_DAYS ],
[ MAX_DATA_EXTENSION_TIME_IN_DAYS ],
[ DEFAULT_DDL_COLLATION ]
여기서
clusteringAction ::= { CLUSTER BY ( <expr> [ , <expr> , ... ] ) | { SUSPEND | RESUME } RECLUSTER | DROP CLUSTERING KEY }자세한 내용은 클러스터링 키 및 클러스터링된 테이블 섹션을 참조하십시오.
tableCommentAction ::= { ALTER | MODIFY [ ( ] [ COLUMN ] <col1_name> COMMENT '<string>' , [ COLUMN ] <col1_name> UNSET COMMENT [ , ... ] [ ) ] }dataGovnPolicyTagAction ::= { 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 } | { { ALTER | MODIFY } [ COLUMN ] <col1_name> SET MASKING POLICY <policy_name> [ USING ( <col1_name> , <cond_col_1> , ... ) ] [ FORCE ] | UNSET MASKING POLICY } | { ALTER | MODIFY } [ COLUMN ] <col1_name> SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ] , [ COLUMN ] <col2_name> SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ] | { ALTER | MODIFY } [ COLUMN ] <col1_name> UNSET TAG <tag_name> [ , <tag_name> ... ] , [ COLUMN ] <col2_name> UNSET TAG <tag_name> [ , <tag_name> ... ] } | { SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ] | UNSET TAG <tag_name> [ , <tag_name> ... ] }searchOptimizationAction ::= { ADD SEARCH OPTIMIZATION [ ON <search_method_with_target> [ , <search_method_with_target> ... ] [ EQUALITY ] ] | DROP SEARCH OPTIMIZATION [ ON { <search_method_with_target> | <column_name> | <expression_id> } [ EQUALITY ] [ , ... ] ] | SUSPEND SEARCH OPTIMIZATION [ ON { <search_method_with_target> | <column_name> | <expression_id> } [ , ... ] ] | RESUME SEARCH OPTIMIZATION [ ON { <search_method_with_target> | <column_name> | <expression_id> } [ , ... ] ] }자세한 내용은 검색 최적화 작업(searchOptimizationAction) 섹션을 참조하십시오.
매개 변수¶
name
변경할 동적 테이블의 식별자입니다.
식별자에 공백이나 특수 문자가 포함된 경우 전체 문자열을 큰따옴표로 묶어야 합니다. 큰따옴표로 묶인 식별자도 대/소문자를 구분합니다.
자세한 내용은 식별자 요구 사항 섹션을 참조하십시오.
SUSPEND | RESUME
동적 테이블에 대해 수행할 동작을 지정합니다.
SUSPEND
는 동적 테이블에서 새로 고침을 일시 중단합니다. 동적 테이블을 다른 동적 테이블에서 사용하는 경우에도 일시 중단됩니다.RESUME
은 동적 테이블에서 새로 고침을 재개합니다. 재개 작업은 수동으로 일시 중단되지 않은 모든 다운스트림 동적 테이블로 순차적으로 넘어가며 진행됩니다.
RENAME TO new_name
스키마의 다른 어떤 동적 테이블에서도 현재 사용하지 않는 새 식별자로 지정된 동적 테이블의 이름을 바꿉니다.
동적 테이블의 이름을 바꾸려면 동적 테이블의 스키마에 대한 CREATE DYNAMIC TABLE 권한이 필요합니다.
동적 테이블을 다른 데이터베이스 및/또는 스키마로 이동하면서 선택적으로 동적 테이블의 이름을 변경할 수도 있습니다. 그러려면 각각
db_name.schema_name.new_name
또는schema_name.new_name
형식으로 새 데이터베이스 및/또는 스키마 이름을 포함하는 정규화된new_name
값을 지정하십시오.다음과 같은 제한 사항이 적용됩니다.
대상 데이터베이스 및/또는 스키마가 이미 있어야 합니다. 또한, 새 위치에 이름이 같은 오브젝트가 있으면 안 됩니다. 그렇지 않으면 문이 오류를 반환합니다.
오브젝트 소유자(즉, 오브젝트에 대한 OWNERSHIP 권한이 있는 역할)가 대상 스키마도 소유하지 않는 한 오브젝트를 관리되는 액세스 스키마로 이동할 수 없습니다.
오브젝트(테이블, 열 등)의 이름이 바뀌면 그 오브젝트를 참조하는 다른 오브젝트도 새 이름으로 업데이트해야 합니다.
SWAP WITH target_dynamic_table_name
단일 트랜잭션에서 두 개의 동적 테이블을 바꿉니다. 이 작업을 수행하는 데 사용되는 역할에는 두 동적 테이블 모두에 대한 OWNERSHIP 권한이 있어야 합니다.
다음과 같은 제한 사항이 적용됩니다.
동적 테이블 간에는 다른 동적 테이블만 바꿀 수 있습니다.
REFRESH
동적 테이블을 수동으로 새로 고쳐야 한다고 지정합니다.
사용자가 일시 중단한 동적 테이블과 자동으로 일시 중단된 동적 테이블은 모두 수동으로 새로 고칠 수 있습니다. 수동으로 새로 고친 동적 테이블은 DYNAMIC_TABLE_REFRESH_HISTORY 함수에서
refresh_trigger
에 대한 출력으로 MANUAL을 반환합니다.동적 테이블을 새로 고치면 동일한 데이터 타임스탬프를 기준으로 모든 업스트림 동적 테이블도 새로 고쳐집니다. 자세한 내용은 동적 테이블에 대한 웨어하우스 또는 목표 지연 변경하기 섹션을 참조하십시오.
동적 테이블 새로 고침 상태에 대한 자세한 내용은 DYNAMIC_TABLE_REFRESH_HISTORY 섹션을 참조하십시오.
SET ...
테이블에 대해 설정할 하나 이상의 속성/매개 변수를 지정합니다(공백, 쉼표 또는 새 줄로 구분).
TARGET_LAG = { num { seconds | minutes | hours | days } | DOWNSTREAM }
동적 테이블의 목표 지연을 지정합니다.
'num seconds | minutes | hours | days'
동적 테이블의 콘텐츠가 기본 테이블에 대한 업데이트보다 지연되어야 하는 최대 시간을 지정합니다.
예:
동적 테이블의 데이터가 5분 이상 지연되면 안 될 경우
5 minutes
를 지정하십시오.동적 테이블의 데이터가 5시간 이상 지연되면 안 될 경우
5 hours
를 지정하십시오.
최소값은 1분입니다. 동적 테이블 A가 다른 동적 테이블 B에 종속된 경우 A의 최소 지연은 B의 지연보다 크거나 같아야 합니다.
DOWNSTREAM
해당 동적 테이블 아래에 있는 동적 테이블이 새로 고쳐질 경우 동적 테이블을 새로 고치도록 지정합니다.
WAREHOUSE = warehouse_name
동적 테이블을 새로 고치기 위한 컴퓨팅 리소스를 제공하는 웨어하우스의 이름을 지정합니다.
동적 테이블의 소유자 역할에는 이 웨어하우스에 대한 USAGE 권한이 있어야 합니다.
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 섹션을 참조하십시오.
DEFAULT_DDL_COLLATION = 'collation_specification'
동적 테이블에 추가된 모든 새 열에 대한 기본 데이터 정렬 사양 을 지정합니다.
이 매개 변수를 설정해도 기존 열의 데이터 정렬 사양은 변경되지 않습니다.
자세한 내용은 DEFAULT_DDL_COLLATION 섹션을 참조하십시오.
UNSET ...
동적 테이블에 대해 설정 해제할 속성/매개 변수를 하나 이상 지정하여 다시 기본값으로 재설정합니다.
DATA_RETENTION_TIME_IN_DAYS
MAX_DATA_EXTENSION_TIME_IN_DAYS
DEFAULT_DDL_COLLATION
클러스터링 작업(clusteringAction
)¶
CLUSTER BY ( expr [ , expr , ... ] )
하나 이상의 테이블 열 또는 열 식을 동적 테이블의 클러스터링 키로 지정(또는 수정)합니다. 자동 클러스터링으로 클러스터링을 유지 관리하는 열/식입니다. 동적 테이블에 대한 클러스터링 키를 지정하기 전에 마이크로 파티션을 이해해야 합니다. 자세한 내용은 Snowflake 테이블 구조 이해하기 섹션을 참조하십시오.
동적 테이블에 클러스터링 키를 사용할 때 다음 사항에 유의하십시오.
열 정의가 필요하며 문에 명시적으로 이를 지정해야 합니다.
클러스터링 키는 모든 테이블에 대해 의도되거나 권장되지 않으며, 일반적으로 매우 큰(예: 멀티 테라바이트 크기의) 테이블에 이점이 있습니다.
SUSPEND | RESUME RECLUSTER
동적 테이블에 대해 자동 클러스터링 을 활성화하거나 비활성화합니다.
DROP CLUSTERING KEY
동적 테이블에 대한 클러스터링 키를 삭제합니다.
클러스터링 키와 재클러스터링에 대한 자세한 내용은 Snowflake 테이블 구조 이해하기 를 참조하십시오.
테이블 설명 작업(tableCommentAction
)¶
ALTER | MODIFY [ ( ]
` .[ COLUMN ] <col1_name> COMMENT '<string>'
., [ COLUMN ] <col1_name> UNSET COMMENT
.[ , ... ]
.[ ) ]
동적 테이블의 열에 대한 설명을 변경하거나 기존 설명을 덮어씁니다.
SET | UNSET COMMENT = '<string_literal>'
동적 테이블에 대한 설명을 추가하거나 기존 설명을 덮어씁니다.
데이터 거버넌스 정책 및 태그 작업(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
동적 테이블에서 모든 행 액세스 정책 연결을 삭제합니다.
{ ALTER | MODIFY } [ COLUMN ] ...
USING ( col_name , cond_col_1 ... )
조건부 마스킹 정책에 전달할 인자를 지정합니다.
목록의 첫 번째 열은 정책 조건에 따라 마스킹하거나 토큰화할 데이터를 지정하고 마스킹 정책이 적용되는 열과 일치해야 합니다.
추가 열은 첫 번째 열에서 선택할 때 쿼리 결과의 각 행에서 마스킹 또는 토큰화를 위해 평가할 데이터를 지정합니다.
USING 절을 생략하면 Snowflake는 조건부 마스킹 정책을 일반 마스킹 정책 으로 취급합니다.
FORCE
열에 현재 설정된 마스킹 또는 프로젝션 정책을 단일 문에서 다른 정책으로 바꿉니다.
마스킹 정책과 함께
FORCE
키워드를 사용하려면 열에 현재 설정된 마스킹 정책의 데이터 타입(즉, STRING)과 일치하도록 ALTER DYNAMICTABLE 문(즉, STRING)에 있는 정책의 데이터 타입 이 필요합니다.마스킹 정책이 열에 현재 설정되어 있지 않으면 이 키워드를 지정해도 아무 효과가 없습니다.
자세한 내용은 열의 마스킹 정책 바꾸기 또는 프로젝션 정책 바꾸기 섹션을 참조하십시오.
검색 최적화 작업(searchOptimizationAction
)¶
ADD SEARCH OPTIMIZATION
전체 동적 테이블에 대해, 또는 특정 열에 대해 선택적인
ON
절을 지정하는 경우 검색 최적화 를 추가합니다.특히 테이블의 데이터가 자주 변경되는 경우 검색 최적화를 유지 관리하는 비용이 많이 들 수 있습니다. 자세한 내용은 검색 최적화 비용 추정 및 관리 섹션을 참조하십시오.
ON search_method_with_target [, search_method_with_target ... ]
(전체 동적 테이블이 아니라) 특정 열 또는 VARIANT 필드에 대한 검색 최적화를 구성하도록 지정합니다.
search_method_with_target
의 경우 다음 구문을 가진 식을 사용합니다.<search_method>(<target> [, ...])
여기서
search_method
는 특정 유형의 조건자에 대한 쿼리를 최적화하는 다음 방법 중 하나를 지정합니다.GEO
: GEOGRAPHY 유형을 사용하는 조건자.SUBSTRING
: 하위 문자열 및 정규식과 일치하는 조건자(예: [ NOT ] LIKE, [ NOT ] ILIKE, [ NOT ] RLIKE, REGEXP_LIKE 등)EQUALITY
: 같음 조건자와 IN 조건자.
target
은 열, VARIANT 필드 또는 별표(*)를 지정합니다.search_method
의 값에 따라 다음 유형 중 하나의 열 또는 VARIANT 필드를 지정할 수 있습니다.GEO
: GEOGRAPHY 데이터 타입의 열입니다.SUBSTRING
: VARIANTs 의 필드 경로를 포함한 문자열 또는 VARIANT 데이터 타입의 열입니다.EQUALITY
항목에서 설명한 대로 필드 경로를 지정합니다. 중첩된 필드에 대한 검색도 같은 방식으로 개선되었습니다.EQUALITY
: VARIANT 열의 필드에 대한 경로를 포함한 숫자, 문자열, 이진 및 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
등)를 사용하는 쿼리에만 영향을 미칩니다.
테이블에서 적용 가능한 모든 열을 대상으로 지정하려면 별표(
*
)를 사용하십시오.주어진 검색 방법에 대해 별표와 특정 열 이름을 모두 지정할 수는 없습니다. 하지만 다양한 검색 방법에서 별표를 지정할 수 있습니다.
예를 들어 다음 식을 지정할 수 있습니다.
ON SUBSTRING(*) ON EQUALITY(*), SUBSTRING(*), GEO(*)
다음 식은 지정할 수 없습니다.
ON EQUALITY(*, c1) ON EQUALITY(c1, *) ON EQUALITY(v1:path, *) ON EQUALITY(c1), EQUALITY(*)
한 대상에 둘 이상의 검색 방법을 지정하려면 쉼표를 사용하여 각 후속 방법과 대상을 구분하십시오.
ALTER DYNAMIC TABLE product ADD SEARCH OPTIMIZATION ON EQUALITY(c1), EQUALITY(c2, c3);
같은 테이블에서 ALTER DYNAMIC TABLE … ADD SEARCH OPTIMIZATION ON … 명령을 여러 번 실행하는 경우 각 후속 명령이 테이블의 기존 구성에 추가됩니다. 예를 들어 다음 명령을 실행한다고 가정하겠습니다.
ALTER DYNAMIC TABLE product ADD SEARCH OPTIMIZATION ON EQUALITY(c1, c2); ALTER DYNAMIC TABLE product ADD SEARCH OPTIMIZATION ON EQUALITY(c3, c4);
그러면
c1
,c2
,c3
,c4
열에 대한 같음 조건자가 테이블 구성에 추가됩니다. 이는 다음 명령을 실행하는 것과 같습니다.ALTER DYNAMIC TABLE product 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로 검색 방법의 조합을 지정할 수 있습니다.
예는 특정 열의 검색 최적화 삭제하기 을 참조하십시오.
사용법 노트¶
동적 테이블을 변경하려면 해당 동적 테이블에 대한 OPERATE 권한이 있는 역할을 사용해야 합니다. 일반 정보는 동적 테이블의 메타데이터 보기 권한 섹션을 참조하십시오.
동적 테이블을 생성한 후에는 마스킹 정책을 변경할 수 없습니다.
기존 동적 테이블을 업데이트하려는데 현재 정의를 확인해야 하는 경우 GET_DDL 함수를 호출하십시오.
ALTER TABLE 명령을 실행하면 동적 테이블에서 데이터 메트릭 함수를 사용할 수 있습니다. 자세한 내용은 데이터 메트릭 함수 작업 섹션을 참조하십시오.
IDENTIFIER() 를 사용하여 변경할 동적 테이블의 이름을 지정할 수 없습니다. 예를 들어 다음 문은 지원되지 않습니다.
ALTER DYNAMIC TABLE IDENTIFIER(product) SUSPEND;
메타데이터 관련:
주의
고객은 Snowflake 서비스를 사용할 때 개인 데이터(사용자 오브젝트 제외), 민감한 데이터, 수출 통제 대상 데이터 또는 기타 규제 데이터가 메타데이터로 입력되지 않도록 해야 합니다. 자세한 내용은 Snowflake의 메타데이터 필드 섹션을 참조하십시오.
예¶
이름이 product
인 동적 테이블의 목표 지연 시간을 1시간으로 변경합니다.
ALTER DYNAMIC TABLE product SET TARGET_LAG = '1 hour';
이름이 product
인 동적 테이블에 대한 동적 테이블의 다운스트림 목표 지연을 지정합니다.
ALTER DYNAMIC TABLE product SET TARGET_LAG = DOWNSTREAM;
product
동적 테이블을 일시 중단합니다.
ALTER DYNAMIC TABLE product SUSPEND;
product
동적 테이블을 재개합니다.
ALTER DYNAMIC TABLE product RESUME;
product
동적 테이블의 이름을 바꿉니다.
ALTER DYNAMIC TABLE product RENAME TO updated_product;
product
동적 테이블을 new-product
로 바꿉니다.
ALTER DYNAMIC TABLE product SWAP WITH new_product;
테이블에 대한 클러스터링 키를 변경합니다.
ALTER DYNAMIC TABLE product CLUSTER BY (date);
테이블에서 클러스터링을 제거합니다.
ALTER DYNAMIC TABLE product DROP CLUSTERING KEY;