Python UDF ์„ค๊ณ„ํ•˜๊ธฐยถ

์ด ํ•ญ๋ชฉ์€ Python UDF๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

์ด ํ•ญ๋ชฉ์˜ ๋‚ด์šฉ:

์ฐธ๊ณ 

๋ฒกํ„ฐํ™”๋œ Python UDF๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ž…๋ ฅ ํ–‰ ๋ฐฐ์น˜๋ฅผ Pandas DataFrames ๋กœ ์ˆ˜์‹ ํ•˜๊ณ  ๊ฒฐ๊ณผ ๋ฐฐ์น˜๋ฅผ Pandas ๋ฐฐ์—ด ๋˜๋Š” Series ๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” Python ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฐ์น˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋จธ์‹  ๋Ÿฌ๋‹ ์ถ”๋ก  ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ํ›จ์”ฌ ๋” ๋‚˜์€ ์„ฑ๋Šฅ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ฒกํ„ฐํ™”๋œ Python UDF ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

๋ฐ์ดํ„ฐ ํƒ€์ž… ์„ ํƒํ•˜๊ธฐยถ

์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์ „์—:

  • ํ•จ์ˆ˜๊ฐ€ ์ธ์ž๋กœ ์ˆ˜๋ฝํ•ด์•ผ ํ•˜๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…, ๊ทธ๋ฆฌ๊ณ  ํ•จ์ˆ˜๊ฐ€ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•˜๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์„ ํƒํ•˜์‹ญ์‹œ์˜ค.

  • ํƒ€์ž„์กด ๊ด€๋ จ ๋ฌธ์ œ๋ฅผ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค.

  • NULL ๊ฐ’์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ฒฐ์ •ํ•˜์‹ญ์‹œ์˜ค.

Snowflake๊ฐ€ Python ๋ฐ SQL ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ๋งคํ•‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ SQL-Python ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋งคํ•‘ ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

TIMESTAMP_LTZ ๊ฐ’ ๋ฐ ํƒ€์ž„์กดยถ

Python UDF๋Š” ํ˜ธ์ถœ๋˜๋Š” ํ™˜๊ฒฝ๊ณผ ํฌ๊ฒŒ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํƒ€์ž„์กด์€ ํ˜ธ์ถœ ํ™˜๊ฒฝ์—์„œ ์ƒ์†๋ฉ๋‹ˆ๋‹ค. ํ˜ธ์ถœ์ž์˜ ์„ธ์…˜์ด Python UDF ํ˜ธ์ถœ ์ „์— ๊ธฐ๋ณธ ํƒ€์ž„์กด์„ ์„ค์ •ํ•œ ๊ฒฝ์šฐ, Python UDF๋Š” ๋™์ผํ•œ ๊ธฐ๋ณธ ํƒ€์ž„์กด์„ ๊ฐ–์Šต๋‹ˆ๋‹ค. ํƒ€์ž„์กด์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ TIMEZONE ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

NULL ๊ฐ’ยถ

Variant๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  Snowflake ํ˜•์‹์˜ ๊ฒฝ์šฐ Python UDF์— ๋Œ€ํ•œ SQL NULL ์ธ์ž๋Š” Python None ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜๋˜๊ณ  ๋ฐ˜ํ™˜๋œ Python None ๊ฐ’์€ ๋‹ค์‹œ SQL NULL ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.

Variant ํ˜•์‹ ๊ฐ’์€ SQL NULL ๋˜๋Š” VARIANT JSON null ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Snowflake VARIANT NULL์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ NULL ๊ฐ’ ์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

  • VARIANT JSON null ์€ Python None ์œผ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.

  • SQL NULL ์€ is_sql_null ์†์„ฑ์ด ์žˆ๋Š” Python ์˜ค๋ธŒ์ ํŠธ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด Python UDF์—์„œ์˜ NULL ์ฒ˜๋ฆฌ ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

Snowflake์—์„œ ๋ถ€๊ณผํ•œ ์ œ์•ฝ ์กฐ๊ฑด ๋‚ด์—์„œ ์œ ์ง€๋˜๋Š” Python UDFs ์„ค๊ณ„ํ•˜๊ธฐยถ

Snowflake ํ™˜๊ฒฝ ๋‚ด์—์„œ ์•ˆ์ •์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด Snowflake๋Š” Python UDF์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ œ์•ฝ ์กฐ๊ฑด์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‹ฌ๋ฆฌ ๋ช…์‹œ๋˜์ง€ ์•Š๋Š” ํ•œ ์ด๋Ÿฌํ•œ ์ œํ•œ ์‚ฌํ•ญ์€ UDF๊ฐ€ ๋งŒ๋“ค์–ด์งˆ ๋•Œ๊ฐ€ ์•„๋‹ˆ๋ผ ์‹คํ–‰๋  ๋•Œ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋จธ์‹  ๋Ÿฌ๋‹(Z) ๋ชจ๋ธ ํ•™์Šต์€ ๋•Œ๋กœ๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ๋งค์šฐ ๋งŽ์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Snowpark์— ์ตœ์ ํ™”๋œ ์›จ์–ดํ•˜์šฐ์Šค๋Š” ๋Œ€๋Ÿ‰์˜ ๋ฉ”๋ชจ๋ฆฌ์™€ ์ปดํ“จํŒ… ๋ฆฌ์†Œ์Šค๊ฐ€ ํ•„์š”ํ•œ ์›Œํฌ๋กœ๋“œ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์ข…์˜ Snowflake ๊ฐ€์ƒ ์›จ์–ดํ•˜์šฐ์Šค์ž…๋‹ˆ๋‹ค. ๋จธ์‹  ๋Ÿฌ๋‹ ๋ชจ๋ธ๊ณผ Snowpark Python์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ Snowpark Python์œผ๋กœ ๋จธ์‹  ๋Ÿฌ๋‹ ๋ชจ๋ธ ํ•™์Šต์‹œํ‚ค๊ธฐ ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

๋ฉ”๋ชจ๋ฆฌยถ

๋„ˆ๋ฌด ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

  • ํฐ ๋ฐ์ดํ„ฐ ๊ฐ’์€ ๋งŽ์€ ์–‘์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๊ณผ๋„ํ•œ ์Šคํƒ ๊นŠ์ด๋Š” ๋งŽ์€ ์–‘์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

UDF๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋„ˆ๋ฌด ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ํŠน์ • ์ œํ•œ์€ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋„ˆ๋ฌด ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ UDF๊ฐ€ ์‹คํŒจํ•˜๋Š” ๊ฒฝ์šฐ Snowpark์— ์ตœ์ ํ™”๋œ ์›จ์–ดํ•˜์šฐ์Šค ๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์‹ญ์‹œ์˜ค.

์‹œ๊ฐ„ยถ

ํ˜ธ์ถœ๋‹น ๋งŽ์€ ์‹œ๊ฐ„์ด ์†Œ์š”๋˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ”ผํ•˜์‹ญ์‹œ์˜ค.

UDF๋ฅผ ์™„๋ฃŒํ•˜๋Š” ๋ฐ ๋„ˆ๋ฌด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ๊ฒฝ์šฐ, Snowflake๋Š” SQL ๋ฌธ์„ ์ข…๋ฃŒํ•˜๊ณ  ์‚ฌ์šฉ์ž์—๊ฒŒ ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ฌดํ•œ ๋ฃจํ”„์™€ ๊ฐ™์€ ์˜ค๋ฅ˜์˜ ์˜ํ–ฅ๊ณผ ๋น„์šฉ์„ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“ˆ ์„ค๊ณ„ํ•˜๊ธฐยถ

SQL ๋ฌธ์ด Python UDF๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด Snowflake๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ž‘์„ฑํ•œ Python ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. Python ํ•จ์ˆ˜๋ฅผ โ€œํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜โ€ ๋˜๋Š” ์ค„์—ฌ์„œ โ€œํ•ธ๋“ค๋Ÿฌโ€๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ํ•ธ๋“ค๋Ÿฌ๋Š” ์‚ฌ์šฉ์ž ์ œ๊ณต ๋ชจ๋“ˆ ๋‚ด๋ถ€์— ๊ตฌํ˜„๋œ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  Python ํ•จ์ˆ˜์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ•จ์ˆ˜๋Š” ๋ชจ๋“ˆ์˜ ์ผ๋ถ€๋กœ ์„ ์–ธ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ•ธ๋“ค๋Ÿฌ๋Š” Python UDF์— ์ „๋‹ฌ๋œ ๊ฐ ํ–‰์— ๋Œ€ํ•ด ํ•œ ๋ฒˆ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ ํฌํ•จํ•˜๋Š” ๋ชจ๋“ˆ์€ ๊ฐ ํ–‰์— ๋Œ€ํ•ด ๋‹ค์‹œ ๊ฐ€์ ธ์˜ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Snowflake๋Š” ๋™์ผํ•œ ๋ชจ๋“ˆ์˜ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜๋ฅผ ๋‘ ๋ฒˆ ์ด์ƒ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฝ”๋“œ ์‹คํ–‰์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด Snowflake๋Š” ์ดˆ๊ธฐํ™”๊ฐ€ ๋А๋ฆด ์ˆ˜ ์žˆ๋Š” ๋ฐ˜๋ฉด ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜์˜ ์‹คํ–‰์€ ๋น ๋ฅด๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. Snowflake๋Š” ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ(ํ•œ ํ–‰์˜ ์ž…๋ ฅ์œผ๋กœ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์‹œ๊ฐ„)๋ณด๋‹ค ์ดˆ๊ธฐํ™” ์‹คํ–‰(UDF๋ฅผ ๋กœ๋”ฉํ•˜๋Š” ์‹œ๊ฐ„๊ณผ ๋ชจ๋“ˆ์„ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ์‹œ๊ฐ„ ํฌํ•จ)์— ๋” ๊ธด ์‹œ๊ฐ„ ์ œํ•œ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“ˆ ์„ค๊ณ„์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ •๋ณด๋Š” Python UDF ๋งŒ๋“ค๊ธฐ ์— ์žˆ์Šต๋‹ˆ๋‹ค.

์Šค์นผ๋ผ UDFs์—์„œ ์ดˆ๊ธฐํ™” ์ตœ์ ํ™”ํ•˜๊ธฐ ๋ฐ ์ „์—ญ ์ƒํƒœ ์ œ์–ดํ•˜๊ธฐยถ

๋Œ€๋ถ€๋ถ„์˜ ์Šค์นผ๋ผ UDF๋Š” ์•„๋ž˜ ์ง€์นจ์„ ๋”ฐ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ํ–‰ ๊ฐ„์— ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š” ๊ณต์œ  ์ƒํƒœ๋ฅผ ์ดˆ๊ธฐํ™”ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜ ๋Œ€์‹  ๋ชจ๋“ˆ์—์„œ ์ดˆ๊ธฐํ™”ํ•˜์‹ญ์‹œ์˜ค.

  • ์Šค๋ ˆ๋“œ๋กœ๋ถ€ํ„ฐ ์•ˆ์ „ํ•˜๋„๋ก ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•˜์‹ญ์‹œ์˜ค.

  • ํ–‰ ๊ฐ„์— ๋™์  ์ƒํƒœ๋ฅผ ์ €์žฅ ๋ฐ ๊ณต์œ ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

UDF๊ฐ€ ์ด๋Ÿฌํ•œ ์ง€์นจ์„ ๋”ฐ๋ฅผ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ Snowflake๋Š” ์Šค์นผ๋ผ UDF๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ถœ ๊ฐ„์— ๊ณต์œ ๋˜๋Š” ์ƒํƒœ์— ์˜์กดํ•˜๋ฉด ์˜ˆ๊ธฐ์น˜ ์•Š์€ ๋™์ž‘์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ์ด ์ž„์˜์˜ ์ˆœ์„œ๋กœ ํ–‰์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์ด๋Ÿฌํ•œ ํ˜ธ์ถœ์„ ์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค์— ๋ถ„์‚ฐํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ์˜ ๋™์ผํ•œ Python ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋‚ด์—์„œ ๊ฐ™์€ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜๊ฐ€ ์—ฌ๋Ÿฌ ๋ฒˆ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

UDF๋Š” ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜์— ๋Œ€ํ•œ ํ˜ธ์ถœ์—์„œ ๊ณต์œ  ์ƒํƒœ์— ์˜์กดํ•˜๋Š” ๊ฒƒ์„ ํ”ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‚ฌ์šฉ์ž๊ฐ€ UDF์—์„œ ๊ณต์œ  ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๋ ค ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์Œ ๋‘ ๊ฐ€์ง€ ์ƒํ™ฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๊ฐ ํ–‰์— ๋Œ€ํ•ด ๋ฐ˜๋ณตํ•˜๊ณ  ์‹ถ์ง€ ์•Š์€, ๋ถ€๋‹ด์ด ํฐ ์ดˆ๊ธฐํ™” ๋…ผ๋ฆฌ๊ฐ€ ํฌํ•จ๋œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

  • ์บ์‹œ์™€ ๊ฐ™์ด ํ–‰ ๊ฐ„์— ๊ณต์œ  ์ƒํƒœ๋ฅผ ํ™œ์šฉํ•˜๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ ํ•ธ๋“ค๋Ÿฌ ํ˜ธ์ถœ์—์„œ ๊ณต์œ ํ•  ์ „์—ญ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•  ๋•Œ๋Š” ์Šค๋ ˆ๋”ฉ - ์Šค๋ ˆ๋“œ ๊ธฐ๋ฐ˜ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ์— ์„ค๋ช…๋œ ๋™๊ธฐํ™” ๊ธฐ๋ณธ ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๊ฒฝํ•ฉ์œผ๋กœ๋ถ€ํ„ฐ ์ „์—ญ ์ƒํƒœ๋ฅผ ๋ณดํ˜ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทœ๋ชจ์™€ ์„ฑ๋Šฅ ์ตœ์ ํ™”ํ•˜๊ธฐยถ

๋ฐ์ดํ„ฐ ๊ณผํ•™ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ•จ๊ป˜ ๋ฒกํ„ฐํ™”๋œ Python UDFs ์‚ฌ์šฉํ•˜๊ธฐยถ

์ฝ”๋“œ์—์„œ ๋จธ์‹  ๋Ÿฌ๋‹ ๋˜๋Š” ๋ฐ์ดํ„ฐ ๊ณผํ•™ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋ฒกํ„ฐํ™”๋œ Python UDF๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋Ÿฌํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ž‘๋™ํ•˜๋„๋ก ์ตœ์ ํ™”๋œ ๋ฐฐ์น˜๋กœ ์ž…๋ ฅ ํ–‰์„ ์ˆ˜์‹ ํ•˜๋Š” Python ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ฒกํ„ฐํ™”๋œ Python UDF ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

๋‹จ์ผ ์Šค๋ ˆ๋“œ UDF ์ฒ˜๋ฆฌ๊ธฐ ์ž‘์„ฑํ•˜๊ธฐยถ

๋‹จ์ผ ์Šค๋ ˆ๋“œ๋กœ ๋œ UDF ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. Snowflake๋Š” ๊ฐ€์ƒ ์›จ์–ดํ•˜์šฐ์Šค ์ปดํ“จํŒ… ๋ฆฌ์†Œ์Šค ์ „๋ฐ˜์— ๊ฑธ์ณ ๋ฐ์ดํ„ฐ ๋ถ„ํ• ๊ณผ UDF ํ™•์žฅ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“ˆ์— ๊ฐ’๋น„์‹ผ ์ดˆ๊ธฐํ™” ์ฝ”๋“œ ๋„ฃ๊ธฐยถ

๋ชจ๋“ˆ ๋ฒ”์œ„์— ๊ฐ’๋น„์‹ผ ์ดˆ๊ธฐํ™” ์ฝ”๋“œ๋ฅผ ๋„ฃ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด UDF๊ฐ€ ์ดˆ๊ธฐํ™”๋  ๋•Œ ์ฝ”๋“œ๊ฐ€ ํ•œ ๋ฒˆ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  UDF ํ•ธ๋“ค๋Ÿฌ ํ˜ธ์ถœ์—์„œ ๊ฐ’๋น„์‹ผ ์ดˆ๊ธฐํ™” ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

์˜ค๋ฅ˜ ์ฒ˜๋ฆฌยถ

UDF๋กœ ์‚ฌ์šฉ๋˜๋Š” Python ํ•จ์ˆ˜๋Š” ์ผ๋ฐ˜ Python ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•จ์ˆ˜ ๋‚ด์—์„œ ์˜ค๋ฅ˜๋ฅผ ํฌ์ฐฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•จ์ˆ˜ ๋‚ด์—์„œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์ด ์˜ˆ์™ธ๊ฐ€ ํ•จ์ˆ˜์—์„œ ํฌ์ฐฉ๋˜์ง€ ์•Š์œผ๋ฉด Snowflake๋Š” ์˜ˆ์™ธ์— ๋Œ€ํ•œ ์Šคํƒ ์ถ”์ ์„ ํฌํ•จํ•˜๋Š” ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์€ ์˜ˆ์™ธ ๋กœ๊น… ์ด ํ™œ์„ฑํ™”๋˜๋ฉด Snowflake๋Š” ์ด๋ฒคํŠธ ํ…Œ์ด๋ธ”์— ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์€ ์˜ˆ์™ธ์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.

์ฟผ๋ฆฌ๋ฅผ ์ข…๋ฃŒํ•˜๊ณ  SQL ์˜ค๋ฅ˜๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์˜ˆ์™ธ๋ฅผ ํฌ์ฐฉํ•˜์ง€ ์•Š๊ณ  ๋ช…์‹œ์ ์œผ๋กœ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ:

if (x < 0):
  raise ValueError("x must be non-negative.");
Copy

๋””๋ฒ„๊น…ํ•  ๋•Œ SQL ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€ ํ…์ŠคํŠธ์— ๊ฐ’์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ์ „์ฒด Python ํ•จ์ˆ˜ ๋ณธ๋ฌธ์„ try-catch ๋ธ”๋ก์— ๋ฐฐ์น˜ํ•˜๊ณ , ํฌ์ฐฉ๋œ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€์— ์ธ์ž ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๊ณ , ํ™•์žฅ๋œ ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋„๋ก ํ•˜์‹ญ์‹œ์˜ค. ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋…ธ์ถœ๋˜์ง€ ์•Š๋„๋ก ํ•˜๋ ค๋ฉด ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์— ๋ฐฐํฌํ•˜๊ธฐ ์ „์— ์ธ์ž ๊ฐ’์„ ์ œ๊ฑฐํ•˜์‹ญ์‹œ์˜ค.

์šฐ์ˆ˜ํ•œ ๋ณด์•ˆ ๊ด€ํ–‰ ๋”ฐ๋ฅด๊ธฐยถ

์ฒ˜๋ฆฌ๊ธฐ๊ฐ€ ์•ˆ์ „ํ•œ ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•˜๋„๋ก ๋ณด์žฅํ•˜๋ ค๋ฉด UDF ๋ฐ ํ”„๋กœ์‹œ์ €์˜ ๋ณด์•ˆ ๋ชจ๋ฒ” ์‚ฌ๋ก€ ์— ์„ค๋ช…๋œ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.