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
์ PythonNone
์ผ๋ก ๋ณํ๋ฉ๋๋ค.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.");
๋๋ฒ๊น ํ ๋ SQL ์ค๋ฅ ๋ฉ์์ง ํ ์คํธ์ ๊ฐ์ ํฌํจํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ ค๋ฉด ์ ์ฒด Python ํจ์ ๋ณธ๋ฌธ์ try-catch ๋ธ๋ก์ ๋ฐฐ์นํ๊ณ , ํฌ์ฐฉ๋ ์ค๋ฅ ๋ฉ์์ง์ ์ธ์ ๊ฐ์ ์ถ๊ฐํ๊ณ , ํ์ฅ๋ ๋ฉ์์ง์ ํจ๊ป ์์ธ๊ฐ ๋ฐ์ํ๋๋ก ํ์ญ์์ค. ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๊ฐ ๋ ธ์ถ๋์ง ์๋๋ก ํ๋ ค๋ฉด ํ๋ก๋์ ํ๊ฒฝ์ ๋ฐฐํฌํ๊ธฐ ์ ์ ์ธ์ ๊ฐ์ ์ ๊ฑฐํ์ญ์์ค.
์ฐ์ํ ๋ณด์ ๊ดํ ๋ฐ๋ฅด๊ธฐยถ
์ฒ๋ฆฌ๊ธฐ๊ฐ ์์ ํ ๋ฐฉ์์ผ๋ก ์๋ํ๋๋ก ๋ณด์ฅํ๋ ค๋ฉด UDF ๋ฐ ํ๋ก์์ ์ ๋ณด์ ๋ชจ๋ฒ ์ฌ๋ก ์ ์ค๋ช ๋ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ฐธ์กฐํ์ญ์์ค.