JavaScript์—์„œ ๋ฉ”์‹œ์ง€ ๋กœ๊น…ํ•˜๊ธฐยถ

Snowflake JavaScript API์— ํฌํ•จ๋œ snowflake ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ JavaScript๋กœ ์ž‘์„ฑ๋œ ํ•จ์ˆ˜ ๋˜๋Š” ํ”„๋กœ์‹œ์ € ์ฒ˜๋ฆฌ๊ธฐ์˜ ๋ฉ”์‹œ์ง€๋ฅผ ๋กœ๊น…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋กœ๊ทธ ํ•ญ๋ชฉ์„ ์ €์žฅํ•˜๋„๋ก ์ด๋ฒคํŠธ ํ…Œ์ด๋ธ”์„ ์„ค์ •ํ•˜๋ฉด Snowflake๊ฐ€ ์ฒ˜๋ฆฌ๊ธฐ ์ฝ”๋“œ์—์„œ ์ƒ์„ฑ๋œ ๋กœ๊ทธ ํ•ญ๋ชฉ์„ ํ…Œ์ด๋ธ”์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. JavaScript API์— ๋Œ€ํ•œ ์ฐธ์กฐ ์ž๋ฃŒ๋Š” JavaScript ์ €์žฅ ํ”„๋กœ์‹œ์ € API ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

์ฝ”๋“œ์—์„œ ๋กœ๊น…ํ•˜๊ธฐ ์ „์— ์›ํ•˜๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ์ด๋ฒคํŠธ ํ…Œ์ด๋ธ”์— ์ €์žฅ๋˜๋„๋ก ๋กœ๊น… ์ˆ˜์ค€์„ ์„ค์ •ํ–ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋กœ๊น…, ๋ฉ”ํŠธ๋ฆญ ๋ฐ ์ถ”์ ์„ ์œ„ํ•œ ์ˆ˜์ค€ ์„ค์ •ํ•˜๊ธฐ ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

์ฐธ๊ณ 

๋ฉ”์‹œ์ง€ ๋กœ๊น…์„ ์‹œ์ž‘ํ•˜๋ ค๋ฉด ๋จผ์ € ์ด๋ฒคํŠธ ํ…Œ์ด๋ธ”์„ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ด๋ฒคํŠธ ํ…Œ์ด๋ธ” ๊ฐœ์š” ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

์ด๋ฒคํŠธ ํ…Œ์ด๋ธ”์—์„œ SELECT ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ ๋กœ๊ทธ ๋ฉ”์‹œ์ง€์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋กœ๊ทธ ๋ฉ”์‹œ์ง€ ๋ณด๊ธฐ ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

Snowflake์—์„œ ๋กœ๊น… ์„ค์ • ๋ฐ ๋ฉ”์‹œ์ง€ ๊ฒ€์ƒ‰์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ์ •๋ณด๋Š” ํ•จ์ˆ˜ ๋ฐ ํ”„๋กœ์‹œ์ €์˜ ๋ฉ”์‹œ์ง€ ๋กœ๊น…ํ•˜๊ธฐ ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

๋‹ค์Œ ์˜ˆ์ œ์˜ ์ฝ”๋“œ์—์„œ๋Š” ํฌํ•จ๋œ snowflake ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง€์›๋˜๋Š” ๊ฐ ์ˆ˜์ค€์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ ๋กœ๊น…ํ•ฉ๋‹ˆ๋‹ค. ์ฐธ๊ณ ๋กœ, ์ž…๋ ฅ ํ–‰์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฉ”์„œ๋“œ์—์„œ ๋กœ๊น…๋œ ๋ฉ”์‹œ์ง€๋Š” UDF์—์„œ ์ฒ˜๋ฆฌํ•œ ๋ชจ๋“  ํ–‰์— ๋Œ€ํ•ด ๋กœ๊น…๋ฉ๋‹ˆ๋‹ค. UDF๊ฐ€ ํฐ ํ…Œ์ด๋ธ”์—์„œ ์‹คํ–‰๋˜๋ฉด ์ด๋ฒคํŠธ ํ…Œ์ด๋ธ”์— ๋งŽ์€ ์ˆ˜์˜ ๋ฉ”์‹œ์ง€๊ฐ€ ์ƒ์„ฑ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

snowflake.log("info", "Information-level message");
snowflake.log("error", "Error message");
snowflake.log("warn", "Warning message");
snowflake.log("debug", "Debug message");
snowflake.log("trace", "Trace message");
snowflake.log("fatal", "Fatal message");
Copy

์‚ฌ์šฉ์ž ์ง€์ • ํŠน์„ฑ ์ถ”๊ฐ€ํ•˜๊ธฐยถ

๋กœ๊ทธ ํ•ญ๋ชฉ์„ ์ƒ์„ฑํ•  ๋•Œ ํ‚ค-๊ฐ’ ํŽ˜์–ด๋กœ ์‚ฌ์šฉ์ž ๊ณ ์œ ์˜ ํŠน์„ฑ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Snowflake๋Š” ์ด๋Ÿฌํ•œ ์‚ฌ์šฉ์ž ์ง€์ • ํŠน์„ฑ์„ ์ด๋ฒคํŠธ ํ…Œ์ด๋ธ”์˜ RECORD_ATTRIBUTES ์—ด ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

snowflake.log ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์‚ฌ์šฉ์ž ์ง€์ • ํŠน์„ฑ์„ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด log ํ•จ์ˆ˜์— ์„ธ ๋ฒˆ์งธ ์ธ์ž๋กœ ์ „๋‹ฌํ•œ JSON ํ˜•์‹์˜ ํ‚ค-๊ฐ’ ํŽ˜์–ด๋ฅผ ์กฐํ•ฉํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ์˜ˆ์ œ์˜ ์ฝ”๋“œ๋Š” ์ด๋ฒคํŠธ ํ…Œ์ด๋ธ”์˜ VALUE ์—ด์— โ€œํŠน์„ฑ ํฌํ•จ ๊ธฐ๋กโ€ ๋ฉ”์‹œ์ง€๋ฅผ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ 2๊ฐœ์˜ RECORD_ATTRIBUTES ์—ด์— ์‚ฌ์šฉ์ž ์ง€์ • ํŠน์„ฑ๋„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

CREATE OR REPLACE PROCEDURE do_logging_javascript()
RETURNS VARCHAR
LANGUAGE JAVASCRIPT
AS $$
  let log_attributes = {
    "custom1": "value1",
    "custom2": "value2"
  }
  snowflake.log("info", "Logging with attributes", log_attributes)
  return "success";
$$;
Copy

์ด log ํ˜ธ์ถœ์˜ ์ถœ๋ ฅ์€ ์ด๋ฒคํŠธ ํ…Œ์ด๋ธ”์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. RECORD_ATTRIBUTES ์—ด์—๋Š” Snowflake๊ฐ€ ์ž๋™์œผ๋กœ ์ถ”๊ฐ€ํ•˜๋Š” ํŠน์„ฑ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

------------------------------------------------------------------
| VALUE                     | RECORD_ATTRIBUTES                  |
------------------------------------------------------------------
| "Logging with attributes" | {                                  |
|                           |   "custom1": "value1",             |
|                           |   "custom2": "value2"              |
|                           | }                                  |
------------------------------------------------------------------