Snowflake 작업 알림받기 — Alert & Email Notification 기능 활용

Hyuna J
Snowflake Korea
Published in
4 min readJul 18, 2023

Snowflake의 Alert 및 Email Notification 기능을 통해 특정 조건을 만족했을 때 자동으로 이메일에 알림을 보내고 작업을 수행할 수 있습니다.
Alert 기능은 사용자가 조건과 액션만 지정해주면 되도록 매우 간단하게 구성되어 있습니다.
예를 들어 Snowflake 계정 내의 ACCOUNT_USAGE 스키마를 참조해서 웨어하우스 크레딧 사용의 사용 비율이 기존보다 증가했을 때 알림을 받거나, 데이터가 설정한 특정 비즈니스 규칙을 맞추지 못했을 때, 유저가 추가되었을 때 알림을 받도록 설정할 수 있습니다.

Snowflake Alert
이를 위해 먼저 Snowflake Alert을 생성합니다. Alert은 다음과 같은 요소들로 구성되어 있습니다.
- Alert을 트리거하는 조건 (예시)완료하는 데 5분 이상 걸리는 쿼리가 있음)
- 조건 충족 시 수행해야 할 동작 (예시)이메일 알림 전송, 테이블에서 일부 데이터 캡쳐)
- 조건을 평가하는 시기와 빈도 (예시)매주 일요일 아침 9시마다 평가, 24시간마다 평가)

Snowflake Alert을 생성할 때 구문은 크게 IF와 THEN으로 구성되는데 IF 구문에 원하는 조건절을, THEN 구문에 해당 조건을 만족했을 때 수행할 액션을 입력할 수 있습니다.
만약 특정조건을 만족했을 때 이메일을 받고 싶다면, 수행할 액션을 지정하는 THEN 구문에 이메일을 보내는 구문을 추가하는 방식으로 alert 기능을 활용할 수 있습니다.
Snowflake는 해당 Alert에 대해 LAST_SUCCESSFUL_SCHEDULED_TIME(마지막으로 alert이 조건절을 평가했을 시간)과 SCHEDULED_TIME(현재 조건절을 평가할 시간)을 기능으로 제공하기 때문에 조건절 쿼리 안에서 마지막 alert과 현재 alert 평가 시간 사이의 특정 조건을 평가할 수도 있습니다.

Email Notification
사용자는 Snowflake에서 기본 제공하는 SYSTEM$SEND_EMAIL() 저장 프로시저를 사용하여 이메일 알림을 보내는 액션을 수행할 수 있습니다.
Snowflake 상에서 CREATE NOTIFICATION INTEGRATION 구문을 사용하여 알림을 받을 이메일 주소목록을 설정합니다.
그리고 SYSTEM$SEND_EMAIL() 저장 프로시저 호출시 생성한 NOTIFICATION INTEGRATION을 지정하여 메일을 보내줄 수 있습니다.

그럼 위의 두가지 작업을 활용하여 10분 단위로 완료된 데이터 적재 작업이 있는지 확인하고 알림을 받을 수 있는 기능을 생성해보겠습니다.

CREATE OR REPLACE ALERT myalert
WAREHOUSE = COMPUTE_WH
SCHEDULE = '10 minute'
-- TRIPS 테이블에 대한 로딩작업이 이전 조건 평가시간 때와 현재 조건 평가시간 사이에 성공한 내역이 있다면,
IF( EXISTS(
SELECT * FROM TABLE(information_schema.copy_history(TABLE_NAME=>'TRIPS', START_TIME=> DATEADD(hours, -1, CURRENT_TIMESTAMP())))
WHERE STATUS = 'Loaded' and last_load_time BETWEEN SNOWFLAKE.ALERT.LAST_SUCCESSFUL_SCHEDULED_TIME() AND SNOWFLAKE.ALERT.SCHEDULED_TIME()))
-- 아래 이메일 주소에 다음과 같은 제목과 내용으로 메일을 보내주세요.
THEN
CALL SYSTEM$SEND_EMAIL(
'my_email_int',
'myemail@company.com',
'Snowflake Email Alert',
'TRIPS 테이블에 대한 적재 작업이 완료되었습니다.');

그리고 로딩작업을 성공적으로 수행했다면, 사용자는 아래와 같은 메일을 받을 수 있습니다.

위 기능을 활용한다면 반대로 COPY INTO 작업이 실패했을 때 에러코드를 메일로 전송해주는 기능을 구현할 수도 있습니다.

alert 기능의 활용 방안은 무궁무진합니다. 여러분들이 원하시는 다양한 형태로 이 기능을 활용해보세요!

--

--

Hyuna J
Snowflake Korea

Interested in working with DATA | Sales Engineer at Snowflake. Previously at AWS and Oracle