ALTER TABLE(이벤트 테이블)

기존 이벤트 테이블 의 속성, 열 또는 제약 조건을 수정합니다.

참고 항목:

CREATE EVENT TABLE , DROP TABLE , SHOW EVENT TABLES , DESCRIBE EVENT TABLE

구문

ALTER TABLE [ IF EXISTS ] <name> RENAME TO <new_table_name>

ALTER TABLE [ IF EXISTS ] <name> clusteringAction

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                             |
                                       }

ALTER TABLE [ IF EXISTS ] <name> SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ]

ALTER TABLE [ IF EXISTS ] <name> UNSET TAG <tag_name> [ , <tag_name> ... ]

ALTER TABLE [ IF EXISTS ] <name>
  ADD ROW ACCESS POLICY <policy_name> ON (<col_name> [ , ... ])

ALTER TABLE [ IF EXISTS ] <name>
  DROP ROW ACCESS POLICY <policy_name>

ALTER TABLE [ IF EXISTS ] <name>
  DROP ROW ACCESS POLICY <policy_name>,
  ADD ROW ACCESS POLICY <policy_name> ON (<col_name> [ , ... ])

ALTER TABLE [ IF EXISTS ] <name> DROP ALL ROW ACCESS POLICIES
Copy

여기서

clusteringAction ::=
  {
     CLUSTER BY ( <expr> [ , <expr> , ... ] )
   | { SUSPEND | RESUME } RECLUSTER
   | DROP CLUSTERING KEY
  }
Copy
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> }
          [ , ... ]
     ]

  }
Copy

자세한 내용은 검색 최적화 작업(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

이벤트 테이블에서 변경 내용 추적을 활성화 또는 비활성화하도록 지정합니다.

  • TRUE 로 지정하면 이벤트 테이블에서 변경 내용 추적이 활성화됩니다. 이 옵션을 선택하면 원본 이벤트 테이블에 한 쌍의 숨겨진 열이 추가되고 열에 변경 내용 추적 메타데이터가 저장되기 시작합니다. 이러한 열은 소량의 저장소를 사용합니다.

    SELECT 문에 CHANGES 절을 사용하거나 이벤트 테이블에서 하나 이상의 스트림을 만들고 쿼리하여 변경 내용 추적 메타데이터를 쿼리할 수 있습니다.

  • FALSE 로 지정하면 이벤트 테이블에서 변경 내용 추적이 비활성화됩니다. 숨겨진 열 쌍이 이벤트 테이블에서 삭제됩니다.

COMMENT = 'string_literal'

이벤트 테이블에 대한 설명을 추가하거나 기존 설명을 덮어씁니다.

UNSET ...

이벤트 테이블에 대해 설정 해제할 속성/매개 변수를 하나 이상 지정하여 다시 기본값으로 재설정합니다.

  • DATA_RETENTION_TIME_IN_DAYS

  • MAX_DATA_EXTENSION_TIME_IN_DAYS

  • CHANGE_TRACKING

  • COMMENT

policy_name

마스킹 정책 또는 행 액세스 정책에 대한 식별자입니다. 스키마에 대해 고유해야 합니다.

ADD ROW ACCESS POLICY policy_name ON (col_name [ , ... ])

이벤트 테이블에 행 액세스 정책을 추가합니다.

하나 이상의 열 이름을 지정해야 합니다. 각 열 이름을 구분하는 쉼표로 추가 열을 지정할 수 있습니다. 이 식을 사용하여 이벤트 테이블과 외부 테이블에 모두 행 액세스 정책을 추가합니다.

DROP ROW ACCESS POLICY policy_name

이벤트 테이블에서 행 액세스 정책을 삭제합니다.

이 식을 사용하여 이벤트 테이블과 외부 이벤트 테이블에서 모두 정책을 삭제합니다.

DROP ALL ROW ACCESS POLICIES

이벤트 테이블에서 모든 행 액세스 정책 연결을 삭제합니다.

이 식은 스키마에서 행 액세스 정책을 삭제한 후에 이벤트 테이블에서 정책을 삭제할 때 유용합니다. 이 식을 사용하여 이벤트 테이블과 외부 테이블에서 모두 행 액세스 정책 연결을 삭제합니다.

클러스터링 작업(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> [, ...])
Copy

여기서

  • search_method 는 특정 유형의 조건자에 대한 쿼리를 최적화하는 다음 방법 중 하나를 지정합니다.

    검색 방법

    설명

    EQUALITY

    같음 조건자와 IN 조건자.

    SUBSTRING

    하위 문자열 및 정규식과 일치하는 조건자(예: LIKE, ILIKE, 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(*)
    
    Copy

    다음 식은 지정할 수 없습니다.

    -- Not allowed
    ON EQUALITY(*, c1)
    ON EQUALITY(c1, *)
    ON EQUALITY(v1:path, *)
    ON EQUALITY(c1), EQUALITY(*)
    
    Copy

한 대상에 둘 이상의 검색 방법을 지정하려면 쉼표를 사용하여 각 후속 방법과 대상을 구분하십시오.

ALTER TABLE t1 ADD SEARCH OPTIMIZATION ON EQUALITY(c1), EQUALITY(c2, c3);
Copy

같은 이벤트 테이블에서 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);
Copy

그러면 열 c1, c2, c3, c4에 대한 같음 조건자가 이벤트 테이블 구성에 추가됩니다. 이는 다음 명령을 실행하는 것과 같습니다.

ALTER TABLE t1 ADD SEARCH OPTIMIZATION ON EQUALITY(c1, c2, c3, c4);
Copy

예는 특정 열의 검색 최적화 활성화하기 을 참조하십시오.

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) ...
    
    Copy

    두 경우 모두 열의 순서는 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              |
---------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------+----------------+
Copy

이벤트 테이블의 클러스터링 키 순서 변경:

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              |
---------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------------+----------------+
Copy

다음은 단일 열을 지정하는 동안 이벤트 테이블에 행 액세스 정책을 추가하는 예입니다. 정책을 설정한 후, 정보 스키마 를 검사하여 확인할 수 있습니다.

ALTER TABLE t1
  ADD ROW ACCESS POLICY rap_t1 ON (empl_id);
Copy

다음은 단일 이벤트 테이블에 두 개의 열을 지정하는 동안 행 액세스 정책을 추가하는 예입니다.

ALTER TABLE t1
  ADD ROW ACCESS POLICY rap_test2 ON (cost, item);
Copy

다음은 이벤트 테이블에서 행 액세스 정책을 삭제하는 예입니다. 정보 스키마 를 쿼리하여 정책이 삭제되었음을 확인합니다.

ALTER TABLE t1
  DROP ROW ACCESS POLICY rap_v1;
Copy

다음은 테이블에 대한 단일 SQL 문에서 행 액세스 정책 추가 및 삭제를 결합하는 방법을 보여주는 예입니다. 정보 스키마 를 검사하여 결과를 확인합니다.

alter table t1
  drop row access policy rap_t1_version_1,
  add row access policy rap_t1_version_2 on (empl_id);
Copy