알림 변경
알림 변경 (ALTER ALERT)
기존 alert의 속성을 수정하고, 기존 alert을 일시 중지하거나 다시 시작합니다.
참조:
CREATE ALERT, DESCRIBE ALERT, DROP ALERT, SHOW ALERTS, EXECUTE ALERT
출처: 문서
본문
구문
ALTER ALERT [ IF EXISTS ] { RESUME | SUSPEND };
ALTER ALERT [ IF EXISTS ] SET
[ WAREHOUSE = ]
[ SCHEDULE = '{ MINUTE | USING CRON }' ]
[ COMMENT = '' ]
[ CONFIG = '' ]
[ RUNBOOK = '' ]
[ SUSPEND_ALERT_AFTER_NUM_FAILURES = ]
ALTER ALERT [ IF EXISTS ] FROM TEMPLATE SET
[ WAREHOUSE = ]
[ SCHEDULE = '{ MINUTE | USING CRON }' ]
[ COMMENT = '' ]
[ RUNBOOK = '' ]
[ SUSPEND_ALERT_AFTER_NUM_FAILURES = ]
[ TEMPLATE_PARAMS = '' ]
ALTER ALERT [ IF EXISTS ] SET TAG = '' [ , = '' ... ]
ALTER ALERT [ IF EXISTS ] UNSET
[ WAREHOUSE ]
[ COMMENT ]
[ CONFIG ]
[ RUNBOOK ]
[ SUSPEND_ALERT_AFTER_NUM_FAILURES ]
ALTER ALERT UNSET TAG [ , ... ]
ALTER ALERT [ IF EXISTS ] MODIFY CONDITION EXISTS ()
ALTER ALERT [ IF EXISTS ] MODIFY ACTION
파라미터
name
변경할 알림의 식별자예요. 식별자에 공백이나 특수 문자가 포함된 경우 전체 문자열을 큰따옴표로 묶어야 해요. 큰따옴표로 묶인 식별자는 대소문자를 구분해요.
{ RESUME | SUSPEND }
알림에 수행할 작업을 지정해요.
RESUME은 일시 중지된 알림을 활성화해요.SUSPEND는 알림을 'Suspended'(일시 중지) 상태로 만들어요.
알림 일정이 간격(즉, num MINUTE)으로 설정된 경우, 모호함을 피하기 위해 일정의 기준 간격 시간은 알림이 재개될 때 현재 시간으로 재설정돼요.
기준 간격 시간은 현재 시각부터 간격 카운터를 시작해요. 예를 들어, 알림이 10 MINUTE로 생성되고 오전 9:03에 재개되면, 알림은 오전 9:13, 9:23 등에 실행돼요. 참고로, 절대적인 정밀도를 보장하기 위해 최선을 다하지만, 설정된 간격이 되기 전에는 알림이 실행되지 않는다는 것만 보장해요. (예를 들어, 현재 예시에서 알림은 처음에 오전 9:14에 실행될 수 있지만, 오전 9:12에는 절대 실행되지 않아요.)
SET ...
알림에 설정할 하나 이상의 속성을 지정해요 (공백, 쉼표 또는 새 줄로 구분해요).
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) # | | | | | # | | | | | * * * * *다음 특수 문자가 지원돼요:
특수 문자 설명 *와일드카드예요. 특정 필드에 지정되면 해당 필드의 모든 시간 단위마다 알림이 실행돼요. 예를 들어, 월 필드에 *를 지정하면 알림이 매월 실행돼요.L'last'를 의미해요. 요일(day-of-week) 필드에서 사용하면 특정 월의 '마지막 금요일'('5L')과 같은 구문을 지정할 수 있어요. 일(day-of-month) 필드에서는 그 달의 마지막 날을 지정해요. /n주어진 시간 단위의 n번째 인스턴스를 나타내요. 각 시간 단위(quanta)는 독립적으로 계산돼요. 예를 들어, 월 필드에 4/3을 지정하면 조건 평가가 4월, 7월, 10월로 예약돼요 (즉, 연중 4번째 달부터 3개월마다). 이후 연도에도 동일한 일정이 유지돼요. 즉, 10월 실행 후 3개월 뒤인 1월에는 조건이 평가되도록 예약되지 않아요.- cron 표현식은 현재 지정된 시간대에 대해서만 평가돼요. 계정의 파라미터 값을 변경해도 (또는 사용자 또는 세션 수준에서 값을 설정해도) 알림의 시간대는 변경되지 않아요.
- cron 표현식은 알림 조건 평가를 위한 모든 유효한 시간을 정의해요. Snowflake는 이 일정에 따라 조건을 평가하려고 시도해요. 하지만 다음 유효한 실행 시간이 시작되기 전에 이전 실행이 완료되지 않으면 해당 유효한 실행 시간은 건너뛰어져요.
- cron 표현식에 특정 일(day of month)과 요일(day of week)이 모두 포함된 경우, 조건 평가는 일(day of month) 또는 요일(day of week) 중 하나를 충족하는 날짜에 예약돼요. 예를 들어,
SCHEDULE = 'USING CRON 0 0 10-20 * TUE,THU UTC'는 매월 10일부터 20일 사이의 오전 0시와, 그 날짜 범위 밖의 화요일 또는 목요일에도 평가를 예약해요.
-
num MINUTE
알림 평가 사이에 삽입되는 대기 시간 간격(분)을 지정해요. 양의 정수만 허용해요.
num M 구문도 지원해요.
모호함을 피하기 위해 알림이 재개될 때 기준 간격 시간이 설정돼요 (ALTER ALERT ... RESUME 사용).
기준 간격 시간은 현재 시각부터 간격 카운터를 시작해요. 예를 들어, 알림이
10 MINUTE로 생성되고 오전 9:03에 재개되면, 알림의 조건은 오전 9:13, 9:23 등에 평가돼요. 절대적인 정밀도를 보장하기 위해 최선을 다하지만, 설정된 간격이 되기 전에는 조건이 평가되지 않는다는 것만 보장해요 (예를 들어, 현재 예시에서 조건은 처음에 오전 9:14에 평가될 수 있지만, 오전 9:12에는 절대 평가되지 않아요).지원되는 최대 값은
11520(8일)이에요. num MINUTE 값이 더 큰 알림은 조건이 절대 평가되지 않아요.
COMMENT = 'string_literal'
알림에 대한 주석을 지정해요.
CONFIG = 'configuration_string'
알림의 구성을 지정해요. 자세한 내용은 CREATE ALERT ... CONFIG를 참조하세요.
RUNBOOK = 'string_literal'
이 알림에 대한 runbook의 URL 또는 자유 텍스트 참조를 지정해요. 자세한 내용은 CREATE ALERT를 참조하세요.
SUSPEND_ALERT_AFTER_NUM_FAILURES = number
알림이 자동으로 일시 중지되는 연속 실패 실행 횟수를 지정해요. 자세한 내용은 를 참조하세요.
TAG tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ]
tag 이름과 태그 문자열 값을 지정해요.
태그 값은 항상 문자열이며, 태그 값의 최대 문자 수는 256자예요.
문장에서 태그를 지정하는 방법에 대한 자세한 내용은 를 참조하세요.
UNSET ...
알림에 대해 설정 해제할 하나 이상의 속성/파라미터를 지정하며, 이를 기본값으로 다시 재설정합니다:
WAREHOUSECOMMENTCONFIGRUNBOOKSUSPEND_ALERT_AFTER_NUM_FAILURES- TAG tag_key [ , tag_key ... ]
MODIFY CONDITION EXISTS (condition)
알림의 조건을 나타내는 SQL 문을 지정합니다. 다음 명령을 사용할 수 있습니다:
문이 하나 이상의 행을 반환하면 알림에 대한 작업이 실행됩니다.
MODIFY ACTION action
조건이 하나 이상의 행을 반환할 때 실행할 SQL 문을 지정합니다.
알림을 보내려면 call the SYSTEM$SEND_EMAIL or SYSTEM$SEND_SNOWFLAKE_NOTIFICATION stored procedure를 호출할 수 있습니다.
FROM TEMPLATE template_id
알림을 렌더링할 alert template을 지정합니다. 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가 전체적으로 적용됩니다. 생략한 변수는 이전 값을 유지하지 않고 템플릿의 기본값으로 재설정됩니다.
일반적인 오류
Snowflake는 문이 컴파일될 때, 알림이 생성되기 전에 템플릿을 확인하고 TEMPLATE_PARAMS를 검증합니다. 다음 중 하나라도 해당하면 문이 실패합니다:
template_id가 존재하고 액세스 권한이 있는 템플릿을 지정하지 않는 경우(object does not exist or not authorized 오류 반환).TEMPLATE_PARAMS키가 선언된 템플릿 변수가 아닌 경우.- 값의 데이터 타입이 잘못된 경우.
- 열거형 값이 변수의 허용된
options중 하나가 아닌 경우. - 숫자 값이 변수의
min/max범위를 벗어난 경우. - 필수 변수(
default_value가 없고optional: true가 아닌 변수)가 누락되었거나 비어 있는 경우. - 참조된 알림 통합이 존재하지 않거나 잘못된 유형인 경우.
액세스 제어 요구 사항
이 SQL 명령을 실행하려면 최소한 다음 privileges를 가진 roles이 필요합니다:
-
알림을 다시 시작하려면:
- ALTER ALERT를 실행하는 역할은 알림에 대한 OPERATE 또는 OWNERSHIP 권한이 있어야 합니다.
- 알림에 대한 OWNERSHIP 권한이 있는 역할은 다음 권한도 있어야 합니다:
- 전역 EXECUTE ALERT 권한.
- 알림이 serverless alert인 경우 전역 EXECUTE MANAGED ALERT 권한.
- 알림이 alert uses a specified warehouse에 해당하는 경우 웨어하우스에 대한 USAGE 권한.
-
알림을 일시 중단하려면 ALTER ALERT를 실행하는 역할이 알림에 대한 OPERATE 또는 OWNERSHIP 권한이 있어야 합니다.
-
알림의 속성을 수정하려면 ALTER ALERT를 실행하는 역할이 알림에 대한 OWNERSHIP 권한이 있어야 합니다.
스키마의 객체를 조작하려면 상위 데이터베이스에 대한 최소 하나의 권한과 상위 스키마에 대한 최소 하나의 권한이 필요합니다.
지정된 권한 집합으로 사용자 지정 역할을 만드는 방법에 대한 지침은 를 참조하세요.
securable objects에 대해 SQL 작업을 수행하기 위한 역할 및 권한 부여에 대한 일반적인 정보는 Overview of Access Control를 참조하세요.
사용 참고 사항
-
alert on new data를 alert on a schedule로 변경할 수 없어요. 마찬가지로 예약 기반 알림을 새 데이터에 대한 알림으로 변경할 수도 없어요.
-
알림이 재개되면 Snowflake는 알림에 대한 OWNERSHIP 권한이 있는 역할이 알림에 할당된 웨어하우스에 대한 USAGE 권한과 전역 EXECUTE ALERT 권한도 보유하고 있는지 확인해요. 그렇지 않으면 오류가 발생해요.
-
계정 관리자(ACCOUNTADMIN 역할을 가진 사용자)만 EXECUTE ALERT 권한을 역할에 부여할 수 있어요. 사용 편의를 위해 사용자 지정 역할(예: alert_admin)을 만들고 이 역할에 EXECUTE ALERT 권한을 할당하는 것을 권장해요. 권한을 부여할 수 있는 모든 역할(예: SECURITYADMIN 또는 MANAGE GRANTS 권한이 있는 역할)은 이 사용자 지정 역할을 모든 알림 소유자 역할에 부여하여 자신의 알림을 변경할 수 있게 할 수 있어요. 사용자 지정 역할 및 역할 계층 구조 생성에 대한 지침은 Configuring access control을 참조하세요.
-
CONFIG를 변경하려면 교체할 전체 JSON 문자열을 제공해야 해요. 개별 키-값 쌍은 업데이트할 수 없어요.
-
FROM TEMPLATE절은 템플릿에서 생성된 알림에만 사용할 수 있어요. 이 절을 사용하여 동일한 템플릿의 최신 버전으로 템플릿 변수를 제자리에서 변경하거나 다른 template_id를 지정하여 알림을 다른 템플릿으로 다시 지정할 수 있어요. -
FROM TEMPLATE를 사용하여 예약 기반 알림을 새 데이터에 대한 알림으로 변경하거나 그 반대로 변경할 수 없어요. -
CREATE ALERT 또는 ALTER ALERT를 실행하면 조건(condition) 및 작업(action)의 문에 대해 일부 유효성 검사가 수행되지 않아요. 여기에는 다음이 포함돼요:
- 객체에 대한 식별자 확인.
- 표현식의 데이터 타입 확인.
- 함수 호출에서 인수의 개수와 유형 확인.
CREATE ALERT 및 ALTER ALERT 명령은 조건이나 작업에 대한 SQL 문이 잘못된 식별자, 잘못된 데이터 타입, 잘못된 함수 인수 개수 및 유형 등을 지정해도 실패하지 않아요. 대신 알림이 실행될 때 실패가 발생해요.
기존 알림의 실패를 확인하려면 ALERT_HISTORY 테이블 함수를 사용하세요.
이러한 유형의 실패를 방지하려면 알림에 대한 조건과 작업을 지정하기 전에 해당 조건과 작업에 대한 SQL 표현식 및 문을 확인하세요.
-
메타데이터 관련:
고객은 Snowflake 서비스를 사용할 때 User 객체에 대한 데이터 외에는 개인 데이터, 민감한 데이터, 수출 통제 데이터 또는 기타 규제 대상 데이터를 메타데이터로 입력하지 않도록 해야 해요. 자세한 내용은 Metadata fields in Snowflake를 참조하세요.
예제
새 구성 또는 교체 구성으로 기존 알림 업데이트:
ALTER ALERT my_alert SET
CONFIG=$${
"enabled": true,
"threshold": 25,
"notify": "oncall"
}$$;
기존 알림에서 구성 제거:
ALTER ALERT my_alert UNSET CONFIG;
기존 알림에 런북 설정:
ALTER ALERT my_alert SET
RUNBOOK='https://www.snowflake.com/alerts/my-alert-runbook';
기존 알림에서 런북 제거:
ALTER ALERT my_alert UNSET RUNBOOK;
새 임계값으로 템플릿 기반 알림을 다시 렌더링해요. 생략한 템플릿 변수는 템플릿의 기본값으로 재설정돼요:
ALTER ALERT my_db.my_schema.task_error_rate_alert FROM TEMPLATE TASKS_ERROR_RATE SET
TEMPLATE_PARAMS = '{ "ERROR_RATE_THRESHOLD": 0.75 }';