Python UDF ์๊ฐยถ
Python์์ UDF(์ฌ์ฉ์ ์ ์ ํจ์)์ ์ฒ๋ฆฌ๊ธฐ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์ด ์น์ ์ ํญ๋ชฉ์์๋ Python ์ฒ๋ฆฌ๊ธฐ๋ฅผ ์ค๊ณํ๊ณ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค. ์์ ๋ ์ฐพ์๋ณผ ์ ์์ต๋๋ค.
UDF ์ฒ๋ฆฌ๊ธฐ๋ฅผ ์์ฑํ ์ ์๋ ์ธ์ด ๋ชฉ๋ก์ ํฌํจํ์ฌ, UDF์ ๋ํ ์๊ฐ๋ ์ฌ์ฉ์ ์ ์ ํจ์ ๊ฐ์ ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
์ฒ๋ฆฌ๊ธฐ๊ฐ ์์ผ๋ฉด SQL๋ก UDF๋ฅผ ์์ฑํฉ๋๋ค. SQL์ ์ฌ์ฉํ์ฌ UDF์ ๋ง๋ค๊ฑฐ๋ ํธ์ถํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ฌ์ฉ์ ์ ์ ํจ์ ์์ฑํ๊ธฐ ๋๋ UDF ์คํํ๊ธฐ ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
Snowflake๋ ํ์ฌ ๋ค์ Python ๋ฒ์ ์์ UDF ์์ฑ์ ์ง์ํฉ๋๋ค.
3.9
3.10
3.11
3.12
์ฐธ๊ณ
Python UDF ์ฒ๋ฆฌ๊ธฐ์ ๊ด๋ จ๋ ์ ํ ์ฌํญ์ Python UDF ์ ํ ์ฌํญ ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
์ด ํญ๋ชฉ์ ๋ด์ฉ:
Python ์ฒ๋ฆฌ๊ธฐ ์๋ ๋ฐฉ์ยถ
์ฌ์ฉ์๋ UDF๋ฅผ ํธ์ถํ ๋ UDF์ ์ด๋ฆ๊ณผ ์ธ์๋ฅผ Snowflake์ ์ ๋ฌํฉ๋๋ค. Snowflake๋ UDF์ ๋ ผ๋ฆฌ๋ฅผ ์คํํ๊ธฐ ์ํด ๊ด๋ จ ์ฒ๋ฆฌ๊ธฐ ์ฝ๋(์ธ์๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ์ธ์๋ ํฌํจ)๋ฅผ ํธ์ถํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ํธ๋ค๋ฌ ๋ฉ์๋๋ ์ถ๋ ฅ์ Snowflake๋ก ๋ฐํํ๊ณ Snowflake๋ ์ด๋ฅผ ๋ค์ ํด๋ผ์ด์ธํธ๋ก ์ ๋ฌํฉ๋๋ค.
UDF์ ์ ๋ฌ๋ ๊ฐ ํ์ ๋ํด UDF๋ ์ค์นผ๋ผ(์ฆ, ๋จ์ผ) ๊ฐ์ ๋ฐํํ๊ฑฐ๋, ํ ์ด๋ธ ํจ์๋ก ์ ์๋ ๊ฒฝ์ฐ ํ ์ธํธ๋ฅผ ๋ฐํํฉ๋๋ค.
Python UDF๋ ์ ์ฝ๋์ ๊ธฐ์กด ํจํค์ง์ ๋ํ ํธ์ถ์ ๋ ๋ค ํฌํจํ ์ ์์ผ๋ฏ๋ก ์ ์ฐ์ฑ๊ณผ ์ฝ๋ ์ฌ์ฌ์ฉ์ ๋ชจ๋ ํ์ฉํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ด๋ฏธ Python์ ๋ฐ์ดํฐ ๋ถ์ ์ฝ๋๊ฐ ์๋ ๊ฒฝ์ฐ, ์ด๋ฅผ Python UDF ์ฒ๋ฆฌ๊ธฐ์ ํตํฉํ ์ ์์ต๋๋ค.
์ยถ
๋ค์ ์์ ์ ์ฝ๋๋ ์ฒ๋ฆฌ๊ธฐ ๋ฉ์๋ addone_py
๋ฅผ ์ฌ์ฉํ์ฌ addone
์ด๋ผ๋ UDF๋ฅผ ์์ฑํฉ๋๋ค. Snowflake๋ SQL-Python ๋ฐ์ดํฐ ํ์
๋งคํ ์ ์ค๋ช
๋ ๋งคํ์ ๋ฐ๋ผ Python ์ธ์ ๋ฐ ๋ฐํ ์ ํ์ SQL๋ก ๋ณํํ๊ฑฐ๋ ๊ทธ ๋ฐ๋๋ก ๋ณํํฉ๋๋ค.
CREATE OR REPLACE FUNCTION addone(i INT)
RETURNS INT
LANGUAGE PYTHON
RUNTIME_VERSION = '3.9'
HANDLER = 'addone_py'
AS $$
def addone_py(i):
return i+1
$$;
์ค๊ณ ๊ณ ๋ ค ์ฌํญยถ
์ ์ฉํ ์ฒ๋ฆฌ๊ธฐ๋ฅผ ์ค๊ณํ๋ ค๋ฉด ๋ค์ ์ฌํญ์ ์ผ๋์ ๋์ญ์์ค.
์ผ๋ฐ ๊ณ ๋ ค ์ฌํญ. UDF์ ํ๋ก์์ ์ ๋ํ ์ผ๋ฐ์ ์ธ ๊ณ ๋ ค ์ฌํญ์ ํจ์์ ํ๋ก์์ ์ ์ค๊ณ ์ง์นจ ๋ฐ ์ ์ฝ ์กฐ๊ฑด ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
SQL-Python ์ ํ ๋งคํ. UDF๋ก ์ธ์ ๋ฐ ๋ฐํ ๊ฐ์ ๊ตํํ ๋ Snowflake๋ ์ฒ๋ฆฌ๊ธฐ ์ธ์ด์ SQL ์ฌ์ด์์ ์ ํํฉ๋๋ค. ์ฒ๋ฆฌ๊ธฐ ์ฝ๋์ ๋ฐ์ดํฐ ํ์ ์ ํ์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ฐ์ดํฐ ํ์ ์ ํํ๊ธฐ ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
์ฝ๋ ํจํค์ง. ์ฒ๋ฆฌ๊ธฐ ์ฝ๋๋ฅผ CREATE FUNCTION ๋ฌธ๊ณผ ํจ๊ป ์ธ๋ผ์ธ์ผ๋ก ์ฌ์ฉํ๊ฑฐ๋ ์คํ ์ด์ง์์ ์ฌ์ฉํ๋๋ก ํ ์ ์์ต๋๋ค. ์ฐจ์ด์ ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ฒ๋ฆฌ๊ธฐ ์ฝ๋๋ฅผ ์ธ๋ผ์ธ ๋๋ ์คํ ์ด์ง์ ์ ์งํ๊ธฐ ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
์ฝ๋ ์ต์ ํ. ์ฝ๋๊ฐ ์ฌ๋ฌ ํ์์ ๊ณต์ ๋๋ ์ํ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฒฝ์ฐ์ ๊ฐ์ด, ์ฒ๋ฆฌ๊ธฐ ์ฝ๋ ์ต์ ํ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ค์นผ๋ผ UDFs์์ ์ด๊ธฐํ ์ต์ ํํ๊ธฐ ๋ฐ ์ ์ญ ์ํ ์ ์ดํ๊ธฐ ๋ฐ ๊ท๋ชจ์ ์ฑ๋ฅ ์ต์ ํํ๊ธฐ ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
๋ชจ๋ฒ ์ฌ๋ก. ๋ชจ๋ฒ ์ฌ๋ก์ ๋ํ ์์ธํ ๋ด์ฉ์ UDF ๋ฐ ํ๋ก์์ ์ ๋ณด์ ๋ชจ๋ฒ ์ฌ๋ก ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
์ฒ๋ฆฌ๊ธฐ ์ฝ๋ฉยถ
๊ธฐ๋ณธ ์ฌํญ๋ถํฐ ์์ธํ ์์ ๊น์ง, ๋ค์ ํญ๋ชฉ์์๋ UDF ์ฒ๋ฆฌ๊ธฐ๋ฅผ Python์ผ๋ก ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค.
Python ๋ชจ๋ ์ ์. Python ๋ชจ๋์์ UDF์ ๋ ผ๋ฆฌ๋ฅผ ์์ฑํฉ๋๋ค. Snowflake๊ฐ ์ฝ๋์ ์ํธ ์์ฉํ๋ ๋ฐฉ์์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ชจ๋ ์ค๊ณํ๊ธฐ ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
์ค๋ฅ ์ฒ๋ฆฌ. Snowflake๊ฐ ์ฒ๋ฆฌ๊ธฐ์์ ์์ฑ๋๋ ์ค๋ฅ๋ฅผ ํ์ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ค๋ฅ ์ฒ๋ฆฌ ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
ํ ์ด๋ธ ํ์ ๋ฐํ ๊ฐ. UDF์์ ์ค์นผ๋ผ(๋จ์ผ) ๊ฐ๋ฟ ์๋๋ผ ํ ์ด๋ธ ํ์ ๊ฐ๋ ๋ฐํํ ์ ์์ต๋๋ค. ํ ์ด๋ธ ํ์ ๊ฐ์ ๋ฐํํ๋ ์ฒ๋ฆฌ๊ธฐ๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ Python์ผ๋ก UDTF ์์ฑํ๊ธฐ ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
๋ก๊น ๋ฐ ์ด๋ฒคํธ ์ถ์ . ์ฒ๋ฆฌ๊ธฐ ์ฝ๋๊ฐ ์คํ๋ ๋ ๋ก๊ทธ ๋ฐ ์ถ์ ๋ฐ์ดํฐ๋ฅผ ์บก์ฒํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ก๊น , ์ถ์ ๋ฐ ๋ฉํธ๋ฆญ ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
์ข ์์ฑ. ์คํ ์ด์ง์ ์ข ์์ฑ์ ์ ๋ก๋ํ์ฌ ๋ฐํ์์ ์ฝ๋์์ ์ฌ์ฉ ๊ฐ๋ฅํ๋๋ก ๋ง๋ค ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ์ฝ๋์ ์ข ์์ฑ์ ์ฌ์ฉํ ์ ์๋๋ก ๋ง๋ค๊ธฐ ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
์ฝ๋ ์์ Python์ ๋ค์ํ ์ฒ๋ฆฌ๊ธฐ ์์ ๋ Python UDF ์ฒ๋ฆฌ๊ธฐ ์ ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.