ALTER TABLE

ALTER TABLE (이벤트 테이블)

기존 이벤트 테이블(event table)의 속성, 열 또는 제약 조건을 수정하는 명령이에요.

출처: 문서

본문

관련 명령: CREATE EVENT TABLE, DROP TABLE, SHOW EVENT TABLES, DESCRIBE EVENT TABLE

구문 (Syntax)

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  } ]
  [ CONTACT <purpose> = <contact_name> [ , <purpose> = <contact_name> ... ] ]
  [ COMMENT = '<string_literal>' ]

ALTER TABLE [ IF EXISTS ] <name> UNSET {
                                       DATA_RETENTION_TIME_IN_DAYS         |
                                       MAX_DATA_EXTENSION_TIME_IN_DAYS     |
                                       CHANGE_TRACKING                     |
                                       CONTACT <purpose>                   |
                                       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> }
          [ , ... ]
     ]

  }

자세한 내용은 Search optimization actions을 참고하세요.

파라미터 (Parameters)

*name*

수정할 이벤트 테이블의 식별자예요. 식별자에 공백이나 특수 문자가 포함되면 전체 문자열을 큰따옴표로 감싸야 해요. 큰따옴표로 감싼 식별자는 대소문자를 구분해요.

RENAME TO *new_table_name*

지정된 이벤트 테이블을 스키마의 다른 이벤트 테이블이 현재 사용하지 않는 새 식별자로 이름을 바꿔요.

참고

기본 이벤트 테이블 SNOWFLAKE.TELEMETRY.EVENTS에서는 지원되지 않아요.

이벤트 테이블 식별자에 대한 자세한 내용은 Identifier requirements를 참고하세요.

객체를 선택적으로 이름을 바꾸면서 다른 데이터베이스 및/또는 스키마로 이동할 수 있어요. 그러려면 새 데이터베이스 및/또는 스키마 이름을 포함한 정규화된 new_name 값을 각각 db_name.schema_name.object_name 또는 schema_name.object_name 형식으로 지정해요.

참고

  • 대상 데이터베이스 및/또는 스키마는 이미 존재해야 해요. 또한 새 위치에 같은 이름의 객체가 이미 있으면 안 되며, 그렇지 않으면 문이 오류를 반환해요.

  • 객체 소유자(즉 객체에 OWNERSHIP 권한이 있는 역할)가 대상 스키마도 소유하지 않는 한 관리 액세스 스키마로 객체를 이동하는 것은 금지돼요.

객체(테이블, 열 등)의 이름이 바뀌면 그것을 참조하는 다른 객체를 새 이름으로 업데이트해야 해요.

SET ...

이벤트 테이블에 대해 설정할 하나 이상의 속성/파라미터를 지정해요(공백, 쉼표 또는 새 줄로 구분):

DATA_RETENTION_TIME_IN_DAYS = *integer*

Time Travel에 대한 이벤트 테이블의 보존 기간을 수정하는 객체 수준 파라미터예요. 자세한 내용은 Understanding & using Time TravelWorking with Temporary and Transient Tables를 참고하세요.

이 파라미터와 객체 파라미터에 대한 자세한 설명은 Parameters를 참고하세요.

값:

  • Standard Edition: 0 또는 1

  • Enterprise Edition:

    • 영구 이벤트 테이블의 경우 0~90

    • 임시·transient 이벤트 테이블의 경우 0 또는 1

참고

0 값은 이벤트 테이블의 Time Travel을 사실상 비활성화해요.

MAX_DATA_EXTENSION_TIME_IN_DAYS = *integer*

이벤트 테이블의 스트림이 오래되지 않도록 하기 위해 Snowflake가 이벤트 테이블의 데이터 보존 기간을 연장할 수 있는 최대 일수를 지정하는 객체 파라미터예요.

이 파라미터에 대한 자세한 설명은 MAX_DATA_EXTENSION_TIME_IN_DAYS를 참고하세요.

CHANGE_TRACKING = { TRUE | FALSE }

이벤트 테이블에서 변경 추적(change tracking)을 활성화하거나 비활성화하도록 지정해요.

  • TRUE는 이벤트 테이블에서 변경 추적을 활성화해요. 이 옵션은 소스 이벤트 테이블에 한 쌍의 숨은 열을 추가하고 열에 변경 추적 메타데이터 저장을 시작해요. 이 열은 약간의 스토리지를 소비해요.

    변경 추적 메타데이터는 SELECT 문의 CHANGES 절로 쿼리하거나, 이벤트 테이블에 하나 이상의 스트림을 만들어 쿼리할 수 있어요.

  • FALSE는 이벤트 테이블에서 변경 추적을 비활성화해요. 한 쌍의 숨은 열이 이벤트 테이블에서 삭제돼요.

CONTACT purpose = contact [ , purpose = contact ... ]

기존 객체를 하나 이상의 연락처(contacts)와 연결해요. 유효한 목적 목록은 Associate a contact with an object를 참고하세요.

같은 문에서 CONTACT 속성을 다른 속성과 함께 설정할 수 없어요.

COMMENT = '*string_literal*'

이벤트 테이블에 주석을 추가하거나 기존 주석을 덮어써요.

UNSET ...

이벤트 테이블에 대해 설정 해제할 속성/파라미터 하나(이상)를 지정하며, 기본값으로 재설정돼요:

  • DATA_RETENTION_TIME_IN_DAYS

  • MAX_DATA_EXTENSION_TIME_IN_DAYS

  • CHANGE_TRACKING

  • CONTACT *purpose*

  • COMMENT

같은 문에서 CONTACT 속성을 다른 속성과 함께 해제할 수 없어요.

데이터 거버넌스 정책 및 태그 작업 (dataGovnPolicyTagAction)

TAG tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ]

태그(tag) 이름과 태그 문자열 값을 지정해요.

태그 값은 항상 문자열이고 태그 값의 최대 문자 수는 256이에요.

문에서 태그를 지정하는 방법에 대한 정보는 Tag quotas를 참고하세요.

policy_name

정책의 식별자예요. 스키마 내에서 고유해야 해요.

다음 절은 행 접근 정책(row access policies)을 지원하는 모든 테이블 종류(테이블, 뷰, 이벤트 테이블 등에 국한되지 않음)에 적용돼요. 간단히 하기 위해 절은 "테이블"만 언급해요.

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

테이블에서 모든 행 접근 정책 연관을 제거해요.

이 표현식은 행 접근 정책이 이벤트 테이블에서 정책을 제거하기 전에 스키마에서 삭제될 때 유용해요. 이 표현식을 사용해 테이블에서 행 접근 정책 연관을 제거해요.

백업이 만들어질 때 테이블에 행 접근 정책이 적용되어 있었고 정책이 나중에 삭제되었다고 가정해요. 백업(backup)에서 테이블을 복원한 뒤에는 DROP ALL ROW ACCESS POLICIES 절이 있는 ALTER TABLE 명령을 실행할 때까지 테이블을 쿼리할 수 없어요.

SET AGGREGATION POLICY policy_name

[ ENTITY KEY (col_name [ , ... ]) ] [ FORCE ]

테이블에 집계 정책(aggregation policy)을 할당해요.

선택 ENTITY KEY 파라미터를 사용해 테이블 내에서 엔티티를 고유하게 식별하는 열을 정의해요. 자세한 내용은 Implementing entity-level privacy with aggregation policies를 참고하세요.

선택 FORCE 파라미터를 사용해 기존 집계 정책을 새 집계 정책으로 원자적으로 교체해요.

UNSET AGGREGATION POLICY

테이블에서 집계 정책을 분리해요.

SET JOIN POLICY policy_name

[ FORCE ]

테이블에 조인 정책(join policy)을 할당해요.

선택 FORCE 파라미터를 사용해 기존 조인 정책을 새 조인 정책으로 원자적으로 교체해요.

UNSET JOIN POLICY

테이블에서 조인 정책을 분리해요.

클러스터링 작업 (clusteringAction)

CLUSTER BY ( *expr* [ , *expr* , ... ] )

이벤트 테이블의 클러스터링 키로 이벤트 테이블 열 하나 이상 또는 열 표현식을 지정(또는 수정)해요. Automatic Clustering이 유지 관리하는 열/표현식이에요.

중요

클러스터링 키는 모든 이벤트 테이블에 권장되지 않아요. 일반적으로 매우 큰(즉 수 테라바이트) 이벤트 테이블에 도움이 돼요.

이벤트 테이블에 클러스터링 키를 지정하기 전에 Understanding Snowflake Table Structures를 참고하세요.

SUSPEND | RESUME RECLUSTER

이벤트 테이블에 대해 Automatic Clustering을 활성화하거나 비활성화해요.

DROP CLUSTERING KEY

이벤트 테이블의 클러스터링 키를 제거해요.

클러스터링 키와 재클러스터링에 대한 자세한 내용은 Understanding Snowflake Table Structures를 참고하세요.

검색 최적화 작업 (searchOptimizationAction)

ADD SEARCH OPTIMIZATION

전체 이벤트 테이블 또는, 선택 ON 절을 지정하면 특정 열에 검색 최적화(search optimization)를 추가해요.

참고:

  • 검색 최적화는 유지 관리 비용이 클 수 있으며, 특히 이벤트 테이블의 데이터가 자주 변경되는 경우 그렇지 않아요. 자세한 내용은 Search optimization cost estimation and management를 참고하세요.

  • 머티리얼라이즈드 뷰에 검색 최적화를 추가하려 하면 Snowflake가 오류 메시지를 반환해요.

프리뷰 기능 — 공개

ON 절은 Enterprise Edition(이상)의 모든 계정에서 사용할 수 있는 프리뷰 기능의 일부예요.

ON *search_method_with_target* [, *search_method_with_target* ... ]

전체 이벤트 테이블이 아니라 특정 열 또는 VARIANT 필드에 대해 검색 최적화를 구성하고 싶다고 지정해요.

*search_method_with_target*에는 다음 구문의 표현식을 사용해요:

<search_method>(<target> [, ...])

여기에서:

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

    Search Method Description
    EQUALITY 동등 및 IN 조건자.
    SUBSTRING 하위 문자열과 정규 표현식을 일치시키는 조건자(예: [NOT] LIKE, [NOT] ILIKE, [NOT] RLIKE, REGEXP_LIKE).
    GEO GEOGRAPHY 유형을 사용하는 조건자.
  • *target*는 열, VARIANT 필드 또는 별표(*)를 지정해요.

    *search_method*의 값에 따라 다음 유형 중 하나의 열이나 VARIANT 필드를 지정할 수 있어요:

    Search Method Supported Targets
    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와 중첩 필드(예: src:a.b.c, src:a.b.c.d)에 대한 쿼리를 개선할 수 있어요. 이 구성은 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);

예제는 Enabling search optimization for specific columns을 참고하세요.

DROP SEARCH OPTIMIZATION

전체 이벤트 테이블 또는, 선택 ON 절을 지정하면 특정 열에서 검색 최적화를 제거해요.

참고:

  • 이벤트 테이블에 검색 최적화 속성이 있으면 이벤트 테이블을 삭제하고 다시 살려도(undrop) 검색 최적화 속성이 보존돼요.

  • 이벤트 테이블에서 검색 최적화 속성을 제거한 뒤 다시 추가하면 처음 추가할 때와 같은 비용이 발생해요.

프리뷰 기능 — 공개

ON 절은 Enterprise Edition(이상)의 모든 계정에서 사용할 수 있는 프리뷰 기능의 일부예요.

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의 어떤 조합이든 지정할 수 있어요.

예제는 Dropping search optimization for specific columns을 참고하세요.

사용 참고사항 (Usage notes)