CREATE ALERT
CREATE ALERT
현재 스키마에 새 경고(alert)를 만드는 명령이에요.
출처: 문서
본문
이 명령은 다음 변형을 지원해요:
-
CREATE OR ALTER ALERT: 경고가 없으면 만들고, 있으면 기존 경고를 수정해요.
-
CREATE ALERT … CLONE: 기존 경고의 복제본을 만들어요.
-
CREATE ALERT … FROM TEMPLATE: 경고 템플릿에서 경고를 만들어요.
관련 명령: ALTER ALERT, DESCRIBE ALERT, DROP ALERT, SHOW ALERTS, EXECUTE ALERT
중요
새로 만들거나 복제한 경고는 생성 시 중단(suspended)된 상태예요. 중단된 경고를 다시 시작하는 방법은 Suspending and resuming an alert을 참고하세요.
구문 (Syntax)
CREATE [ OR REPLACE ] ALERT [ IF NOT EXISTS ] <name>
[ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
[ SCHEDULE = '{ <num> MINUTE | USING CRON <expr> <time_zone> }' ]
[ WAREHOUSE = <warehouse_name> ]
[ COMMENT = '<string_literal>' ]
[ CONFIG = '<configuration_string>' ]
[ RUNBOOK = '<string_literal>' ]
[ SUSPEND_ALERT_AFTER_NUM_FAILURES = <number> ]
IF( EXISTS(
<condition>
))
THEN
<action>
변형 구문 (Variant syntax)
CREATE OR ALTER ALERT
경고가 없으면 새로 만들고, 있으면 문에 정의된 경고로 변환해요. CREATE OR ALTER ALERT 문은 CREATE ALERT 문의 구문 규칙을 따르고 ALTER ALERT 문과 같은 제한이 있어요.
CREATE OR ALTER ALERT를 CREATE ALERT … FROM TEMPLATE 절과 결합해 템플릿 경고가 없으면 만들거나 기존 것을 다시 렌더링할 수 있어요. WITH TAG 절은 CREATE OR ALTER ALERT에서 지원되지 않아요.
자세한 내용은 CREATE OR ALTER ALERT 사용 참고사항과 CREATE OR ALTER 를 참고하세요.
CREATE OR ALTER ALERT <name>
[ SCHEDULE = '{ <num> MINUTE | USING CRON <expr> <time_zone> }' ]
[ WAREHOUSE = <warehouse_name> ]
[ COMMENT = '<string_literal>' ]
[ CONFIG = '<configuration_string>' ]
[ RUNBOOK = '<string_literal>' ]
[ SUSPEND_ALERT_AFTER_NUM_FAILURES = <number> ]
IF( EXISTS(
<condition>
))
THEN
<action>
CREATE ALERT … CLONE
같은 파라미터 값으로 새 경고를 만들어요:
CREATE [ OR REPLACE ] ALERT <name> CLONE <source_alert>
[ ... ]
자세한 내용은 CREATE 을 참고하세요.
참고
CREATE ALERT <name> CLONE을 사용하거나 경고를 포함한 스키마·데이터베이스를 복제해서 경고를 복제하면, 명시적으로 재정의한 속성을 제외하고 새 경고는 원래 경고의 모든 속성을 가져요.
CREATE ALERT … FROM TEMPLATE
명시적인 조건과 액션이 아니라 경고 템플릿(alert template)에서 경고를 만들어요. Snowflake는 TEMPLATE_PARAMS의 값을 사용해 템플릿을 렌더링하고 단일 문으로 경고를 만들어요. FROM TEMPLATE 절은 경고 이름 바로 뒤에 옵니다.
CREATE [ OR REPLACE ] ALERT [ IF NOT EXISTS ] <name>
FROM TEMPLATE <template_id>
[ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
[ WAREHOUSE = <warehouse_name> ]
[ SCHEDULE = '{ <num> MINUTE | USING CRON <expr> <time_zone> }' ]
[ COMMENT = '<string_literal>' ]
[ RUNBOOK = '<string_literal>' ]
[ SUSPEND_ALERT_AFTER_NUM_FAILURES = <number> ]
[ TEMPLATE_PARAMS = '<json_string>' ]
FROM TEMPLATE *template_id*
경고를 렌더링할 경고 템플릿을 지정해요. Snowflake는 TEMPLATE_PARAMS에서 제공한 값을 사용해 템플릿을 렌더링하고 단일 문으로 경고를 만들어요.
식별자는 대소문자를 구분하지 않아요. SYSTEM$LIST_ALERT_TEMPLATES로 사용 가능한 템플릿을 찾고, SYSTEM$GET_ALERT_TEMPLATE로 템플릿의 변수·데이터 유형·기본값·허용 값을 볼 수 있어요.
FROM TEMPLATE를 사용할 때는 TEMPLATE_PARAMS를 통해 템플릿의 변수를 제공해요. CONFIG 파라미터와 IF ... THEN 조건·액션은 템플릿에서 생성되므로 FROM TEMPLATE 문에서는 허용되지 않아요.
TEMPLATE_PARAMS = '*json_string*'
템플릿의 변수와 알림 구성을 제공하는 JSON 문자열이에요. FROM TEMPLATE 절에서만 유효해요.
JSON 객체에는 다음이 포함될 수 있어요:
-
template_variables. 변수 이름에서 값으로의 객체예요. 예:{ "ERROR_RATE_THRESHOLD": 0.4, "SCOPE_ACTIVE": "DATABASE" }.template_variables래퍼 없이 평평한 최상위 객체로도 이 변수들을 전달할 수 있어요. 생략된 변수는 템플릿의 기본값을 사용해요. SYSTEM$GET_ALERT_TEMPLATE으로 변수 이름·유형·기본값·허용 값을 확인하세요. -
notification_config. 알림 통합과, 이메일의 경우 수신자예요. 예:
"notification_config": {
"notification_integration": "my_email_int",
"email_config": { "toAddress": ["[email protected]"], "subject": "..." }
}
수신자는 렌더링 입력값이지 템플릿 변수가 아니에요.
경고 이름, WAREHOUSE, SCHEDULE, COMMENT, RUNBOOK, SUSPEND_ALERT_AFTER_NUM_FAILURES, 태그 같은 문 속성은 TEMPLATE_PARAMS가 아니라 일반 경고 절로 지정해요.
ALTER ALERT … FROM TEMPLATE 또는 CREATE OR ALTER ALERT로 기존 경고를 다시 렌더링할 때 TEMPLATE_PARAMS는 전체 적용돼요: 생략한 변수는 이전 값을 유지하지 않고 템플릿의 기본값으로 재설정돼요.
일반 오류 (Common errors)
Snowflake는 문이 컴파일될 때, 경고가 만들어지기 전에 템플릿을 해석하고 TEMPLATE_PARAMS를 검증해요. 다음 중 하나가 사실이면 문이 실패해요:
-
template_id가 존재하고 접근 가능한 템플릿을 가리키지 않으면(object does not exist or not authorized 오류 반환). -
TEMPLATE_PARAMS키가 선언된 템플릿 변수가 아니면. -
값의 데이터 유형이 틀리면.
-
열거 값이 변수의 허용
options중 하나가 아니면. -
숫자 값이 변수의
min/max범위 밖이면. -
필수 변수(
default_value가 없고optional: true가 아닌 변수)가 없거나 비어 있으면. -
참조된 알림 통합이 존재하지 않거나 유형이 틀리면.
사용 세부 사항은 CREATE ALERT … FROM TEMPLATE 사용 참고사항을 참고하세요.
필수 파라미터 (Required parameters)
*name*
경고의 식별자(이름)를 지정하는 문자열이에요. 경고가 만들어진 스키마에서 고유해야 해요.
식별자는 영문자로 시작해야 하고, 전체 식별자 문자열을 큰따옴표로 감싸지 않는 한 공백이나 특수 문자를 포함할 수 없어요(예: "My object"). 큰따옴표로 감싼 식별자는 대소문자를 구분해요.
자세한 내용은 Identifier requirements를 참고하세요.
TAG ( tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ] )
태그(tag) 이름과 태그 문자열 값을 지정해요.
태그 값은 항상 문자열이고 태그 값의 최대 문자 수는 256이에요.
문에서 태그를 지정하는 방법에 대한 정보는 Tag quotas를 참고하세요.
IF( EXISTS( *condition* ))
경고의 조건을 나타내는 SQL 문이에요. 다음 명령을 사용할 수 있어요:
문이 하나 이상의 행을 반환하면 경고의 액션이 실행돼요.
THEN *action*
조건이 하나 이상의 행을 반환하면 실행해야 하는 SQL 문이에요.
알림을 보내려면 SYSTEM$SEND_EMAIL 또는 SYSTEM$SEND_SNOWFLAKE_NOTIFICATION 저장 프로시저를 호출할 수 있어요.
선택 파라미터 (Optional parameters)
WAREHOUSE = warehouse_name
이 경고를 실행하는 컴퓨트 리소스를 제공하는 가상 웨어하우스(virtual warehouse)를 지정해요.
참고
서버리스 경고(serverless alerts)에서는 이 속성을 설정하지 마세요.
SCHEDULE ...
정기적으로 경고 조건을 평가하는 스케줄을 지정해요.
경고를 만들 때 이 파라미터를 생략하거나 NULL로 설정하면 새 데이터에 대한 경고(alert on new data)를 만들어요.
스케줄 경고의 경우 다음과 같은 방법으로 스케줄을 지정할 수 있어요:
USING CRON *expr* *time_zone*
경고 조건을 주기적으로 평가하기 위한 cron 표현식과 시간대를 지정해요. 표준 cron 유틸리티 구문의 하위 집합을 지원해요.
cron 표현식은 다음 필드로 구성돼요:
# __________ minute (0-59)
# | ________ hour (0-23)
# | | ______ day of month (1-31, or L)
# | | | ____ month (1-12, JAN-DEC)
# | | | | _ day of week (0-6, SUN-SAT, or L)
# | | | | |
# | | | | |
* * * * *
지원되는 특수 문자는 다음과 같아요:
| Special Character | Description |
|---|---|
| * | 와일드카드. 특정 필드에 지정되면 경고는 해당 필드의 모든 시간 단위마다 실행돼요. 예를 들어 month 필드의 * 는 경고가 매달 실행됨을 지정해요. |
| L | "마지막(last)"을 나타내요. 요일(day-of-week) 필드에서 사용하면 주어진 달의 "마지막 금요일"("5L") 같은 구문을 지정할 수 있게 해요. 월중일(day-of-month) 필드에서는 달의 마지막 날을 지정해요. |
| /n | 주어진 시간 단위의 n번째 인스턴스를 나타내요. 각 시간 단위는 독립적으로 계산돼요. 예를 들어 month 필드에 4/3을 지정하면 조건 평가는 4월, 7월, 10월(즉 연도의 4번째 달부터 3개월마다)로 예약돼요. 이후 연도에도 같은 스케줄이 유지돼요. 즉 조건은 (10월 실행 3개월 후인) 1월에 평가되도록 예약되지 않아요. |
참고
-
cron 표현식은 현재 지정된 시간대에 대해서만 평가돼요. 계정의 TIMEZONE 파라미터 값을 변경하거나 사용자·세션 수준에서 값을 설정해도 경고의 시간대는 바뀌지 않아요.
-
cron 표현식은 경고 조건 평가의 모든 유효 시간을 정의해요. Snowflake는 이 스케줄에 따라 조건 평가를 시도하지만, 이전 실행이 다음 유효 실행 시간이 시작되기 전에 완료되지 않으면 해당 유효 실행 시간은 건너뛰어져요.
-
cron 표현식에 특정 월중일과 요일이 모두 포함되면 조건 평가는 월중일 또는 요일 중 하나를 만족하는 날에 예약돼요. 예를 들어
SCHEDULE = 'USING CRON 0 0 10-20 * TUE,THU UTC'는 매달 10일~20일의 자정(0AM)과 그 날짜 밖의 화요일·목요일에도 평가를 예약해요. -
*num* MINUTE
경고 평가 사이에 삽입되는 대기 간격(분)을 지정해요. 양의 정수만 허용해요.
*num* M 구문도 지원해요.
모호성을 피하기 위해 경고가 (ALTER ALERT … RESUME으로) 다시 시작될 때 *기준 간격 시간(base interval time)*이 설정돼요.
기준 간격 시간은 현재 시계 시간부터 간격 카운터를 시작해요. 예를 들어 10 MINUTE로 경고를 만들고 오전 9:03에 경고를 다시 시작하면 조건은 오전 9:13, 9:23 등에 평가돼요. 절대 정밀도를 보장하기 위해 최선을 다하지만, 조건이 설정된 간격 전에 평가되지 않는다는 것만 보장해요(즉 이 예에서 조건이 오전 9:14에 처음 평가될 수는 있지만 오전 9:12에는 절대 안 돼요).
참고
최대 지원 값은 11520(8일)이에요. 더 큰 *num* MINUTE 값을 가진 경고는 조건이 절대 평가되지 않아요.
COMMENT = 'string_literal'
경고에 대한 주석을 지정해요.
CONFIG = '*configuration_string*'
경고가 런타임에 SYSTEM$GET_ALERT_CONFIG를 호출해 접근할 수 있는 유효한 JSON 형식의 구성 문자열을 지정해요.
구성은 경고의 조건(IF) 블록과 액션(THEN) 블록 모두에서 사용할 수 있어요.
구문:
CONFIG=$${"string1": value1 [, "string2": value2, ...] }$$
예:
CONFIG=$${
"enabled": true,
"threshold": 10,
"notify": "ops"
}$$
RUNBOOK = '*string_literal*'
이 경고의 실행 가이드(runbook)에 대한 URL 또는 자유 텍스트 참조를 지정해요. 실행 가이드는 경고가 트리거될 때 대응하는 방법에 대한 문서나 지침을 제공해요.
최대 길이: 2048자.
예:
RUNBOOK='https://www.snowflake.com/alerts/my-alert-runbook'
SUSPEND_ALERT_AFTER_NUM_FAILURES = *number*
경고가 자동으로 중단되는 연속 실패한 경고 실행 횟수를 지정해요. 자세한 내용은 SUSPEND_ALERT_AFTER_NUM_FAILURES를 참고하세요.
접근 제어 요구사항 (Access control requirements)
이 작업을 실행하는 역할은 최소한 다음 권한을 가져야 해요:
| Privilege | Object | Notes |
|---|---|---|
| EXECUTE MANAGED ALERT | Account | 서버리스 경고에만 필요해요. |
| EXECUTE ALERT | Account | |
| CREATE ALERT | Schema | |
| USAGE | Warehouse | 사용할 웨어하우스를 지정하는 경고에만 필요해요. |
| OWNERSHIP | Alert | 기존 경고에 대한 문을 실행하려면 필요해요. OWNERSHIP은 자동으로 객체를 만든 역할에 부여되는 특수 권한이지만, 소유 역할(또는 MANAGE GRANTS 권한이 있는 역할)이 GRANT OWNERSHIP 명령으로 다른 역할에 이전할 수도 있어요. 관리 액세스 스키마(managed access schema)에서는 스키마 소유자(즉 스키마에 OWNERSHIP 권한이 있는 역할) 또는 MANAGE GRANTS 권한이 있는 역할만 스키마의 객체에 대한 권한(future grants 포함)을 부여·취소할 수 있음에 유의하세요. |
스키마의 객체를 작업하려면 상위 데이터베이스에 최소한 하나의 권한과 상위 스키마에 최소한 하나의 권한이 필요해요.
사용 참고사항 (Usage notes)
- 경고는 경고 소유자(즉 경고에 OWNERSHIP 권한이 있는 역할)에게 부여된 권한으로 실행돼요. 경고를 실행하기 위한 최소 필수 권한 목록은 Granting the privileges to create alerts을 참고하세요.
경고 소유자 역할이 조건·액션의 SQL 문을 실행할 필수 권한이 있는지 확인하려면, CREATE ALERT에 지정하기 전에 경고 소유자 역할로 이 문들을 실행해 보는 것을 권장해요.
- 경고를 만들 때 경고는 기본적으로 중단되어 있어요.
경고를 활성화하려면 ALTER ALERT … RESUME을 실행해야 해요.
-
런타임에 구성 값을 읽으려면 조건 또는 액션 SQL에서 SYSTEM$GET_ALERT_CONFIG를 호출해요. 구성이 설정되지 않으면 함수는
NULL을 반환해요. -
CREATE ALERT 또는 ALTER ALERT를 실행할 때 조건·액션의 문에 대해 일부 검증 검사가 수행되지 않아요. 예:
-
객체 식별자의 해석.
-
표현식 데이터 유형의 해석.
-
함수 호출 인수의 개수와 유형 검증.
CREATE ALERT와 ALTER ALERT 명령은 조건·액션의 SQL 문이 잘못된 식별자, 잘못된 데이터 유형, 잘못된 함수 인수 개수·유형 등을 지정해도 실패하지 않아요. 대신 경고가 실행될 때 실패해요.
기존 경고의 실패를 확인하려면 ALERT_HISTORY 테이블 함수를 사용해요.
이런 유형의 실패를 피하려면, 경고의 조건·액션을 지정하기 전에 해당 SQL 표현식과 문을 검증하세요.
-
-
메타데이터에 관해: 고객은 Snowflake 서비스를 사용할 때 메타데이터로 개인 데이터(User 객체 외), 민감 데이터, 수출 통제 데이터 또는 기타 규제 데이터를 입력하지 않도록 해야 해요. 자세한 내용은 Metadata fields in Snowflake를 참고하세요.
-
OR REPLACE와IF NOT EXISTS절은 상호 배타적이에요. 같은 문에서 둘 다 사용할 수 없어요. -
CREATE OR REPLACE <object>문은 원자적이에요. 즉 객체를 교체할 때 기존 객체가 삭제되고 새 객체가 단일 트랜잭션으로 만들어져요.
CREATE OR ALTER ALERT 사용 참고사항
-
ALTER ALERT 명령의 모든 제한이 적용돼요.
-
CREATE OR ALTER ALERT 명령으로 경고를 다시 시작하거나 중단할 수 없어요. 경고를 다시 시작하거나 중단하려면 ALTER ALERT 명령을 사용해요.
-
태그 설정 또는 해제는 지원되지 않아요. 다만 기존 태그는 CREATE OR ALTER ALERT 문으로 변경되지 않고 그대로 유지돼요.
CREATE ALERT … FROM TEMPLATE 사용 참고사항
-
TEMPLATE_PARAMS를 만들기 전에 SYSTEM$LIST_ALERT_TEMPLATES로 템플릿을 찾고 SYSTEM$GET_ALERT_TEMPLATE로 템플릿의 변수·데이터 유형·기본값·허용 값을 확인하세요. -
FROM TEMPLATE절은 경고 이름 바로 뒤에 옵니다. 그 앞에 다른 속성을 배치하면 구문 오류예요. -
CONFIG와IF ... THEN조건·액션은FROM TEMPLATE에서 허용되지 않아요.CLONE과FROM TEMPLATE절은 상호 배타적이에요. -
SCHEDULE을 생략하면 경고는 템플릿의 기본 스케줄을 사용해요. -
범위 데이터베이스, 범위 스키마, 필터 패턴 같은 자유 텍스트 변수는 기존 객체와 검증되지 않아요. 아무것도 일치하지 않는 값으로 경고를 만들면 성공하지만, 데이터가 일치할 때까지 경고가 발화(fire)하지 않아요.
예제 (Examples)
Creating an alert을 참고하세요.
TASKS_ERROR_RATE 템플릿에서 두 템플릿 변수를 재정의하며 경고를 만드는 예제예요:
CREATE OR REPLACE ALERT my_db.my_schema.task_error_rate_alert
FROM TEMPLATE TASKS_ERROR_RATE
WAREHOUSE = my_wh
SCHEDULE = '30 MINUTE'
TEMPLATE_PARAMS = '{
"template_variables": {
"ERROR_RATE_THRESHOLD": 0.4,
"SCOPE_ACTIVE": "DATABASE",
"SCOPE_DATABASE": "MY_DB"
},
"notification_config": {
"notification_integration": "my_email_int",
"email_config": { "toAddress": ["[email protected]"] }
}
}';
더 알아보기 (Learn more)
ALTER ALERT, DESCRIBE ALERT, DROP ALERT, SHOW ALERTS, EXECUTE ALERT