CREATE EVENT TABLE
CREATE EVENT TABLE
함수와 프로시저의 로그 메시지를 포함한 이벤트를 캡처하는 이벤트 테이블(event table)을 만드는 명령이에요.
출처: 문서
본문
함수와 프로시저의 로그 메시지를 포함한 이벤트를 캡처하는 이벤트 테이블을 만들어요.
함께 보기: ALTER TABLE (event tables), DESCRIBE EVENT TABLE, DROP TABLE, SHOW EVENT TABLES
구문 (Syntax)
CREATE [ OR REPLACE ] EVENT TABLE [ IF NOT EXISTS ] <name>
[ CLUSTER BY ( <expr> [ , <expr> , ... ] ) ]
[ DATA_RETENTION_TIME_IN_DAYS = <integer> ]
[ MAX_DATA_EXTENSION_TIME_IN_DAYS = <integer> ]
[ CHANGE_TRACKING = { TRUE | FALSE } ]
[ DEFAULT_DDL_COLLATION = '<collation_specification>' ]
[ COPY GRANTS ]
[ [ WITH ] COMMENT = '<string_literal>' ]
[ [ WITH ] ROW ACCESS POLICY <policy_name> ON ( <col_name> [ , <col_name> ... ] ) ]
[ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
[ WITH CONTACT ( <purpose> = <contact_name> [ , <purpose> = <contact_name> ... ] ) ]
변형 구문 (Variant syntax)
CREATE EVENT TABLE … CLONE
동일한 사전 정의된 컬럼 정의를 가지며 데이터를 실제로 복사하지 않고 소스 테이블의 모든 기존 데이터를 포함하는 새 이벤트 테이블을 만들어요. 이 변형은 Time Travel을 사용해 과거의 특정 시점에서 이벤트 테이블을 클론하는 데도 사용할 수 있어요.
CREATE [ OR REPLACE ] EVENT TABLE [ IF NOT EXISTS ] <name>
CLONE <source_table>
[ { AT | BEFORE } ( { TIMESTAMP => <timestamp> | OFFSET => <time_difference> | STATEMENT => <id> } ) ]
[ COPY GRANTS ]
[ ... ]
참고: 문이 같은 이름의 이벤트 테이블을 교체하면 권한 부여는 교체되는 이벤트 테이블에서 복사돼요. 그 외에는 권한 부여가 클론되는 소스 이벤트 테이블에서 복사돼요.
COPY GRANTS에 대한 자세한 내용은 이 문서의 COPY GRANTS를 참고해요. 클론에 대한 자세한 내용은 CREATE <object> … CLONE을 참고해요.
필수 매개변수 (Required parameters)
name
이벤트 테이블의 식별자(이름)를 지정하며, 이벤트 테이블이 만들어지는 스키마 안에서 고유해야 해요.
또한 식별자는 반드시 알파벳 문자로 시작해야 하며, 전체 식별자 문자열이 큰따옴표로 묶이지 않는 한 공백이나 특수 문자를 포함할 수 없어요 (예: "My object"). 큰따옴표로 묶인 식별자는 대소문자를 구분해요.
자세한 내용은 식별자 요구 사항(Identifier requirements)을 참고해요.
source_table
CLONE에 필수예요. 클론의 소스로 사용할 이벤트 테이블을 지정해요.
선택 매개변수 (Optional parameters)
CLUSTER BY ( expr [ , expr , ... ] )
테이블에서 하나 이상의 컬럼 또는 컬럼 표현식을 클러스터링 키로 지정해요. 자세한 내용은 클러스터링 키와 클러스터링 테이블(Clustering Keys & Clustered Tables)을 참고해요.
- 기본값: 값 없음 (테이블에 클러스터링 키가 정의되지 않음)
⚠️ 중요: 클러스터링 키는 모든 테이블에 의도되거나 권장되지 않아요. 일반적으로 매우 큰(즉 수 테라바이트) 테이블에 유용해요. 테이블에 클러스터링 키를 지정하기 전에 Snowflake 테이블 구조 이해(Understanding Snowflake Table Structures)를 읽어 보세요.
DATA_RETENTION_TIME_IN_DAYS = integer
테이블의 보존 기간을 지정해 테이블의 과거 데이터에 대해 Time Travel 작업(SELECT, CLONE, UNDROP)을 수행할 수 있게 해요. 자세한 내용은 Time Travel 이해와 사용(Understanding & using Time Travel)을 참고해요.
이 객체 수준 매개변수와 객체 매개변수에 대한 자세한 설명은 매개변수(Parameters)를 참고해요.
값:
- Standard Edition:
0또는1 - Enterprise Edition: 영구 테이블의 경우
0부터90까지
기본값:
- Standard Edition:
1 - Enterprise Edition(또는 그 이상):
1(스키마·데이터베이스·계정 수준에서 다른 기본값을 지정하지 않은 경우)
참고: 값
0은 테이블의 Time Travel을 사실상 비활성화해요.
MAX_DATA_EXTENSION_TIME_IN_DAYS = integer
테이블의 스트림이 오래(stale)되지 않도록 Snowflake가 테이블의 데이터 보존 기간을 확장할 수 있는 최대 일수를 지정하는 객체 매개변수예요.
이 매개변수에 대한 자세한 설명은 MAX_DATA_EXTENSION_TIME_IN_DAYS를 참고해요.
CHANGE_TRACKING = { TRUE | FALSE }
테이블에서 변경 추적(change tracking)을 활성화할지 지정해요.
TRUE는 테이블에서 변경 추적을 활성화해요. 이 설정은 소스 테이블에 숨겨진 컬럼 한 쌍을 추가하고 컬럼에 변경 추적 메타데이터 저장을 시작해요. 이 컬럼들은 약간의 스토리지를 소비해요.- 변경 추적 메타데이터는 SELECT 문의 CHANGES 절로 쿼리하거나, 테이블에 스트림을 하나 이상 만들고 쿼리해 사용할 수 있어요.
FALSE는 테이블에서 변경 추적을 활성화하지 않아요.- 기본값: FALSE
DEFAULT_DDL_COLLATION = 'collation_specification'
테이블의 컬럼에 대한 기본 데이터 정렬(collation) 사양을 지정해요.
이 매개변수에 대한 자세한 내용은 DEFAULT_DDL_COLLATION을 참고해요.
COPY GRANTS
다음 CREATE TABLE 변형 중 하나로 새 테이블을 만들 때 원래 테이블의 접근 권한을 유지하도록 지정해요.
- CREATE OR REPLACE EVENT TABLE
- CREATE EVENT TABLE … CLONE
이 매개변수는 OWNERSHIP을 제외한 모든 권한을 기존 테이블에서 새 테이블로 복사해요. 새 테이블은 스키마의 객체 유형에 정의된 미래 권한 부여(future grants)를 상속하지 않아요. 기본적으로 CREATE EVENT TABLE 문을 실행하는 역할이 새 테이블을 소유해요.
CREATE EVENT TABLE 문에 이 매개변수를 포함하지 않으면 새 테이블은 원래 테이블에 부여된 명시적 접근 권한을 상속하지 않지만, 스키마의 객체 유형에 정의된 미래 권한 부여는 상속해요.
참고: 교체 테이블의 SHOW GRANTS 출력은 복사된 권한의 피수여자(grantee)로 CREATE EVENT TABLE 문을 실행한 역할을, 실행 시점의 현재 타임스탬프를 나열해요. 권한 복사 작업은 CREATE EVENT TABLE 명령 안에서 원자적으로(즉 같은 트랜잭션 안에서) 발생해요.
ROW ACCESS POLICY policy_name ON ( col_name [ , col_name ... ] )
테이블에 설정할 행 접근 정책(row access policy)을 지정해요.
COMMENT = 'string_literal'
테이블에 대한 설명(comment)을 지정해요.
- 기본값: 값 없음
WITH DATA METRIC FUNCTION ( dmf_name ON ( col_name [ , col_name ... ] ) [ , dmf_binding ... ] )
생성 시점에 이벤트 테이블과 하나 이상의 DMF(데이터 메트릭 함수)를 연결해요. DMF는 생성되는 즉시 테이블에 대해 구성된 스케줄로 실행되기 시작해요.
여러 DMF 바인딩을 쉼표로 구분해 연결할 수 있어요. 각 바인딩은 ALTER TABLE … ADD DATA METRIC FUNCTION과 같은 속성을 받아들이며, EXECUTE AS ROLE, ANOMALY_DETECTION, SENSITIVITY, DATA_QUALITY_NOTIFICATION, EXPECTATION을 포함해요.
각 속성에 대한 설명은 데이터 메트릭 함수 작업(Data metric function actions)을 참고해요.
Snowflake는 바인딩 목록 주위의 괄호 없이도 이 절을 받아들이지만, 그 형식은 더 이상 사용되지 않으며 향후 동작 변경 릴리스에서 제거돼요.
사용 지침과 예시는 생성 시점에 DMF 연결(Attach DMFs at creation time)을 참고해요.
- 기본값: 값 없음 (이벤트 테이블에 DMF가 연결되지 않음)
TAG ( tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ] )
태그 이름과 태그 문자열 값을 지정해요.
태그 값은 항상 문자열이며, 태그 값의 최대 문자 수는 256이에요.
문에서 태그를 지정하는 방법에 대한 정보는 태그 할당량(Tag quotas)을 참고해요.
WITH CONTACT ( purpose = contact [ , purpose = contact ...] )
새 객체를 하나 이상의 연락처(contact)와 연결해요.
이 명령이 지원한다면 AS 절을 제외한 다른 모든 절 뒤에 WITH CONTACT 절을 지정해요.
접근 제어 요구 사항 (Access control requirements)
이 작업을 실행하는 데 사용하는 역할(role)은 최소한 다음 권한을 가져야 해요.
| 권한 (Privilege) | 객체 (Object) | 비고 |
|---|---|---|
| CREATE EVENT TABLE | Schema | 이벤트 테이블을 만들 계획인 스키마 |
스키마 안의 객체를 작업하려면 상위 데이터베이스에 대한 권한이 최소 하나, 상위 스키마에 대한 권한이 최소 하나 필요해요.
지정된 권한 집합으로 사용자 지정 역할을 만드는 방법은 사용자 지정 역할 만들기(Creating custom roles)를 참고해요. 보호 가능한 객체에 대해 SQL 작업을 수행하기 위한 역할과 권한 부여의 일반적인 내용은 접근 제어 개요(Overview of Access Control)를 참고해요.
사용 메모 (Usage notes)
스키마는 같은 이름의 이벤트 테이블, 테이블, 그리고/또는 뷰를 포함할 수 없어요. 이벤트 테이블을 만들 때:
- 스키마에 같은 이름의 테이블이나 뷰가 이미 있으면 오류가 반환되고 이벤트 테이블이 만들어지지 않아요.
- 스키마에 같은 이름의 이벤트 테이블이 이미 있으면, 명령에 선택적
OR REPLACE키워드가 포함되지 않는 한 오류가 반환되고 이벤트 테이블이 만들어지지 않아요.
⚠️ 중요:
OR REPLACE를 사용하는 것은 기존 이벤트 테이블에 DROP TABLE을 사용한 뒤 같은 이름으로 새 이벤트 테이블을 만드는 것과 동일해요. 다만 삭제된 테이블은 시스템에서 영구적으로 제거되지 않아요. 대신 Time Travel에 보존돼요. Time Travel의 삭제된 테이블은 복구할 수 있지만 계정의 데이터 스토리지에도 기여하므로 이 점을 주의해야 해요. 자세한 내용은 Time Travel 및 Fail-safe의 스토리지 비용(Storage costs for Time Travel and Fail-safe)을 참고해요.
CREATE OR REPLACE <object> 문은 원자적(atomic)으로 동작해요. 즉, 객체를 교체할 때 기존 객체는 삭제되고 새 객체는 단일 트랜잭션 안에서 생성돼요.
이는 CREATE OR REPLACE EVENT TABLE 작업과 동시에 실행되는 모든 쿼리가 기존 버전 또는 새 버전의 테이블을 사용한다는 의미예요.
(선택적 OR REPLACE 키워드로) 테이블을 다시 만들면 그 이력이 삭제되어 테이블의 스트림이 오래(stale)돼요. 오래된 스트림은 읽을 수 없어요.
메타데이터에 관해서는 다음 사항에 주의해요.
⚠️ 주의: 고객은 Snowflake 서비스를 사용할 때 (User 객체를 제외하고) 개인 데이터·민감 데이터·수출 통제 데이터·기타 규제 데이터를 메타데이터로 입력하지 않도록 해야 해요. 자세한 내용은 Snowflake의 메타데이터 필드를 참고해요.
CREATE EVENT TABLE … CLONE:
- 소스 이벤트 테이블에 클러스터링 키가 있으면 새 이벤트 테이블에도 클러스터링 키가 있어요. 기본적으로 새 이벤트 테이블에 대해 Automatic Clustering은 일시 중지돼요. 소스 테이블에서 Automatic Clustering이 일시 중지되지 않았어도 그래요.
OR REPLACE와 IF NOT EXISTS 절은 서로 배타적이에요. 같은 문에서 둘 다 사용할 수 없어요.
예시 (Examples)
my_events라는 이벤트 테이블을 만들어요.
CREATE EVENT TABLE my_events;
더 알아보기 (Learn more)
- ALTER TABLE (event tables) — 이벤트 테이블 수정
- SHOW EVENT TABLES — 이벤트 테이블 조회
- DESCRIBE EVENT TABLE — 이벤트 테이블 설명