Event Table (이벤트 테이블) 로 스노우플레이크 프로시저 로깅 및 트레이싱 맛보기

Claire H. Do
Snowflake Korea
Published in
5 min readAug 7, 2023

💬 이번 포스트에서는 quick 하게 Snowflake 의 Public Preview 기능 중 Event Table 의 정의 및 간단한 테스트 코드까지 살펴보겠습니다.

Snowflake 의 Event Table 이란?

Snowflake Event Table: diagram
Snowflake Event Table

Event Table 은 UDF , UDTF 또는 Stored Procedure 에서 로그 (log) 및 트레이스 (trace) 정보를 별도 저장 할 수 있는, 말 그대로 ‘이벤트’ 용 테이블입니다.

Supported languages for logging from Stored Procedures:
Java, JavaScript, Python, Scala & Snowflake Scripting (SQL)

Supported languages for logging from Scalar UDF and UDTF:
Java, JavaScript, Python, Scala

기존에는 일반 테이블을 만들고 해당 테이블로 이벤트 정보를 저장하게끔 custom logger 를 Stored Procedure 형태로 개발하여 사용했지만, Event Table PuPr 기능 출시로 인해 logging & tracing 이 매우 간편해진 것이지요. 🤩

Event Table 테스트 해보기

테스트 절차

테스트는 ACCOUNTADMIN role 로 진행합니다.

1. 사용할 Database 및 Schema 생성

-- 세션에 사용할 role 설정
USE ROLE accountadmin;

-- DB 및 schema 생성
CREATE DATABASE test_db;
CREATE SCHEMA events;

2. Event Table 생성

-- Event Table 생성
CREATE EVENT TABLE test_db.events.account_events;

-- Event Table 조회 (빈 테이블)
select * from test_db.events.account_events;

3. Snowflake Account 에 사용할 Event Table 설정

-- Snowflake Account에 생성한 이벤트 테이블 매핑
-- Note: 한 Account 에는 하나의 활성 Event Table 만 있을 수 있음
ALTER ACCOUNT SET EVENT_TABLE = test_db.events.account_events;

-- EVENT_TABLE 파라미터가 잘 설정되었는지 확인
SHOW PARAMETERS LIKE 'event_table' IN ACCOUNT;

4. Log 및 Trace 이벤트를 남기는 프로시저 (Stored Procedure) 생성

-- Log 및 Trace 이벤트 생성 테스트 프로시저 (Snowflake Scripting)
CREATE OR REPLACE PROCEDURE event_thrower()
RETURNS VARCHAR
LANGUAGE SQL
AS
$$
DECLARE
my_msg TEXT;
BEGIN
my_msg := 'testing the new logging feature!';
SYSTEM$LOG('info', my_msg); -- 로그 저장
SYSTEM$ADD_EVENT('SProcEmptyEvent'); -- 트레이스 저장
RETURN 'the end...';
END;
$$
;

5. 프로시저에 LOG_LEVEL 및 TRACE_LEVEL 설정

-- 프로시저에 LOG_LEVEL 및 TRACE_LEVEL 설정
ALTER PROCEDURE event_thrower() SET LOG_LEVEL = INFO;
ALTER PROCEDURE event_thrower() SET TRACE_LEVEL = ALWAYS;

6. 프로시저 실행 후 로그 및 트레이스가 저장된 Event Table 확인

-- 프로시저 실행
call event_thrower();

-- Event Table 다시 조회 (3건 조회됨)
select * from test_db.events.account_events;
Snowflake Event Table: 로그 및 트레이스가 저장된 Event Table 내용
Snowflake Event Table: 로그 및 트레이스가 저장된 Event Table 내용

로그 내용을 이메일 알림으로 보내야한다면..?

Snowflake Alert & Email Notification 기능을 통해 Event Table 에 적재되는 로그를 모니터링하여 이메일 알림을 보낼 수 있습니다.

Hyuna J 님의 Snowflake 작업 알림받기 — Alert & Email Notification 기능 활용 아티클에서 quick 한 how-to 를 알려드립니다. 😉

Event Table에 대해 더 자세히 알고싶다면..

아래 리소스를 참고해보세요!

--

--