์ฌ์ฉ์ ์ ์ ํจ์ ์์ฑํ๊ธฐยถ
Snowflake์์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ฌ๋ฌ ๋ฉ์๋ ์ค ํ๋๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์ ์ ํจ์(UDF) ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ์ด๋ฌํ ๋ฉ์๋๋ ์ด ํญ๋ชฉ์ ์ค๋ช ๋์ด ์์ต๋๋ค.
๋ค์ ๊ฒฝ์ฐ์ UDF๋ฅผ ๋ง๋ญ๋๋ค.ยถ
Python, Java, Scala ๋ฑ ์ง์๋๋ ์ฌ๋ฌ ์ธ์ด ์ค ํ๋๋ฅผ ์ฌ์ฉํ์ฌ ํจ์ ๋ก์ง์ ์ฒ๋ฆฌ๊ธฐ๋ก ์์ฑํ์ญ์์ค.
๋๊ตฌ๋ฅผ ์ ํํ๊ฑฐ๋ API ์์ ์์ฑํ ์ฒ๋ฆฌ๊ธฐ๋ก ํจ์๋ฅผ ๋ง๋ญ๋๋ค.
๊ฐ ํญ๋ชฉ์ ๋ํ ์์ธํ ๋ด์ฉ์ UDF ์์ฑ์ ์ํ ๋๊ตฌ ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
SQL
SQL ์ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ์ธ์ด ์ค ํ๋๋ก ๋ก์ง์ ์์ฑํ์ญ์์ค.
Snowpark
Java, Python ๋๋ Scala์ฉ Snowpark API ๋ฅผ ์ฌ์ฉํ์ญ์์ค.
๋ช ๋ น์ค
CLI ๋ช ๋ น์ ์คํํ์ฌ ํจ์๋ฅผ ๋ง๋ญ๋๋ค.
Python API
ํด๋ผ์ด์ธํธ ์ธก Python ๋ช ๋ น์ ์คํํ์ฌ ํจ์๋ฅผ ์์ฑํฉ๋๋ค.
REST
RESTful API ์ ์์ฒญํ์ฌ ํจ์๋ฅผ ์์ฑํฉ๋๋ค.
ํ์์ ๋ฐ๋ผ ์ฌ๋ฌ ๋๊ตฌ ์ค ํ๋๋ฅผ ์ฌ์ฉํ์ฌ ํจ์๋ฅผ ์คํํฉ๋๋ค.
UDF ์์ฑ์ ์ํ ๋๊ตฌยถ
์ฌ์ฉ ๊ฐ๋ฅํ ์ธ์ด ๋ฐ ์คํฌ ์ธํธ์ ๋ฐ๋ผ Snowflake์์ ์ฌ์ฉํ ์ ์๋ ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ๋ฒ ์ค ํ๋๋ฅผ ์ฌ์ฉํ์ฌ UDF ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ๋ค์ ํ์์ ํ์์ ๋ง๋ ๋๊ตฌ๋ฅผ ์ ํํ์ญ์์ค.
์ธ์ด |
์ ๊ทผ ๋ฐฉ์ |
|---|---|
SQL SQL ๋ช ๋ น์ ์คํํฉ๋๋ค(์: Snowsight ์ฌ์ฉ). |
SQL CREATE FUNCTION ๋ช ๋ น์ ์คํํ์ฌ ๋ค์ ์ธ์ด ์ค ํ๋๋ก ์์ฑ๋ ์ฒ๋ฆฌ๊ธฐ ์ฝ๋๊ฐ ํฌํจ๋ ํจ์๋ฅผ ์์ฑํฉ๋๋ค. |
Snowpark๋ฅผ ์ฌ์ฉํ๋ Java, Python ๋๋ Scala ์ง์๋๋ ์ธ์ด ์ค ํ๋๋ก ์ฝ๋๋ฅผ ์์ฑํ ๋ค์ ๋ก์ปฌ์์ ์ฝ๋๋ฅผ ์คํํ์ฌ Snowflake์์ ์์ ์ ์ํํฉ๋๋ค. |
๋ค์ ์ธ์ด ์ค ํ๋๋ก Snowpark API๋ฅผ ์ฌ์ฉํ๋ ํด๋ผ์ด์ธํธ ์ฝ๋๋ฅผ ์คํํฉ๋๋ค. |
๋ช ๋ น์ค ๋ช ๋ น์ค์์ ๋ช ๋ น์ ์คํํ์ฌ Snowflake ์ํฐํฐ๋ฅผ ๋ง๋ค๊ณ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. |
Snowflake CLI ์ ๋ช ๋ น์ ์คํํฉ๋๋ค. |
Python ํด๋ผ์ด์ธํธ์์ Snowflake์์ ๊ด๋ฆฌ ์์ ์ ์คํํ๋ ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค. |
Snowflake Python API ๋ฅผ ์ฌ์ฉํ๋ ์ฝ๋๋ฅผ ์คํํฉ๋๋ค. |
RESTful API (์ธ์ด ๋ถ๋ฌธ) RESTful ์๋ํฌ์ธํธ์ ์์ฒญํ์ฌ Snowflake ์ํฐํฐ๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํ์ญ์์ค. |
Snowflake REST API ๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก์์ ๋ฅผ ์์ฑํ๋๋ก ์์ฒญํฉ๋๋ค. |
ํค ์์ฑยถ
๋ค์์ ํจ์๋ฅผ ๋ง๋ค ๋ ํ์ํ๊ฑฐ๋ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๋ช ๊ฐ์ง ์์ฑ์ ๋ํ ์ค๋ช ์ ๋๋ค.
- ํจ์ ์ด๋ฆ:
ํจ์ ์ด๋ฆ์ ์ฒ๋ฆฌ๊ธฐ์ ์ด๋ฆ๊ณผ ์ผ์นํ ํ์๊ฐ ์์ต๋๋ค. ์ด๋ฆ ์ ์ฝ ์กฐ๊ฑด๊ณผ ๊ท์น์ ๋ํ ์์ธํ ๋ด์ฉ์ ํ๋ก์์ ์ UDF์ ๋ช ๋ช ๋ฐ ์ค๋ฒ๋ก๋ฉ ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
- ์ธ์:
์๊ตฌ ์ฌํญ์ ๋ํ ์์ธํ ๋ด์ฉ์ UDF ๋ฐ ์ ์ฅ ํ๋ก์์ ์ ๋ํ ์ธ์ ์ ์ํ๊ธฐ ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
- ๋ฐํ ์ ํ:
Snowflake๊ฐ SQL ๋ฐ์ดํฐ ํ์ ์ ์ฒ๋ฆฌ๊ธฐ ๋ฐ์ดํฐ ํ์ ์ ๋งคํํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ SQL ๋ฐ ์ฒ๋ฆฌ๊ธฐ ์ธ์ด ๊ฐ์ ๋ฐ์ดํฐ ํ์ ๋งคํ ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
- ์ฒ๋ฆฌ๊ธฐ ์ด๋ฆ:
ํ์ํ ๊ฒฝ์ฐ ์ด๋ ํจ์๊ฐ ์คํ๋ ๋ ์คํ๋๋ ์ฝ๋๋ฅผ ํฌํจํ๋ ํด๋์ค ๋๋ ๋ฉ์๋์ ์ด๋ฆ์ ๋๋ค. Java, Python, Scala๋ก ์์ฑ๋ ์ฒ๋ฆฌ๊ธฐ์ ๋ํด์๋ง ์ฒ๋ฆฌ๊ธฐ ์ด๋ฆ์ ์ง์ ํด์ผ ํฉ๋๋ค. JavaScript ๋ฐ SQL ์ฒ๋ฆฌ๊ธฐ์ ๊ฒฝ์ฐ ์ธ๋ผ์ธ์ผ๋ก ์ง์ ๋ ๋ชจ๋ ์ฝ๋๊ฐ ์ฒ๋ฆฌ๊ธฐ๋ก ์คํ๋ฉ๋๋ค.
- ์ข ์์ฑ:
Java, Python ๋๋ Scala๋ก ์์ฑ๋ ์ฒ๋ฆฌ๊ธฐ์ ๊ฒฝ์ฐ ํจ์๋ฅผ ์์ฑํ ๋์ ๊ฐ์ด Snowpark ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ง์ ํด์ผ ํ ์๋ ์์ต๋๋ค.
์ฒ๋ฆฌ๊ธฐ์์ ์ข ์ ํญ๋ชฉ์ ์ฌ์ฉํ ์ ์๋๋ก ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ฝ๋์ ์ข ์์ฑ์ ์ฌ์ฉํ ์ ์๋๋ก ๋ง๋ค๊ธฐ ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
- ์ฒ๋ฆฌ๊ธฐ ์ธ์ด ๋ฐํ์:
์ฒ๋ฆฌ๊ธฐ ์ธ์ด๊ฐ Java, Python ๋๋ Scala์ธ ๊ฒฝ์ฐ ๋ฐํ์ ๋ฒ์ ์ ์ง์ ํ์ฌ ์ฌ์ฉํ ์ง์๋๋ ๋ฐํ์ ๋ฒ์ ์ ํ์ํฉ๋๋ค. ๊ธฐ๋ณธ ๋ฒ์ ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์๊ฐ์ด ์ง๋๋ฉด ๊ธฐ๋ณธ๊ฐ์ด ๋ณ๊ฒฝ๋๋ค๋ ์ ์ ์ ์ํ์ญ์์ค.
์ก์ธ์ค ์ ์ด ์๊ตฌ ์ฌํญยถ
์ด ์์ ์ ์คํํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์ญํ ์๋ ์ต์ํ ๋ค์ ๊ถํ ์ด ์์ด์ผ ํฉ๋๋ค.
๊ถํ |
์ค๋ธ์ ํธ |
์ฐธ๊ณ |
|---|---|---|
CREATE FUNCTION |
์คํค๋ง |
์ด ๊ถํ์ผ๋ก๋ง ์คํค๋ง์์ ์ฌ์ฉ์ ์ ์ ํจ์๋ง ์์ฑํ ์ ์์ต๋๋ค. ๋ฐ์ดํฐ ๋ฉํธ๋ฆญ ํจ์ ์์ฑ์ ํ์ฑํํ๋ ค๋ฉด ์ญํ ์ CREATE DATA METRIC FUNCTION ๊ถํ์ด ์์ด์ผ ํฉ๋๋ค. |
USAGE |
ํจ์ |
์๋ก ์์ฑํ ํจ์์ ๋ํ USAGE ๊ถํ์ ์ญํ ์ ๋ถ์ฌํ๋ฉด ํด๋น ์ญํ (์: ์ธ๋ถ ํ ํฐํ์ ๋ํ ๋ง์คํน ์ ์ฑ ์์ ์ ์ญํ )์ ๊ฐ์ง ์ฌ์ฉ์๊ฐ Snowflake์ ๋ค๋ฅธ ๊ณณ์์ ํจ์๋ฅผ ํธ์ถํ ์ ์์ต๋๋ค. |
USAGE |
์ธ๋ถ ์ก์ธ์ค ํตํฉ |
ํตํฉ(์๋ ๊ฒฝ์ฐ)์ ํ์ํ๋ฉฐ, EXTERNAL_ACCESS_INTEGRATIONS ๋งค๊ฐ ๋ณ์๋ก ์ง์ ๋ฉ๋๋ค. ์์ธํ ๋ด์ฉ์ CREATE EXTERNAL ACCESS INTEGRATION ์น์ ์ ์ฐธ์กฐํ์ญ์์ค. |
READ |
์ํฌ๋ฆฟ |
SECRETS ๋งค๊ฐ ๋ณ์๋ก ์ง์ ๋ ์ํฌ๋ฆฟ(์๋ ๊ฒฝ์ฐ)์ ํ์ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ์๊ฒฉ ์ฆ๋ช ์ ๋ํ๋ด๋ ์ํฌ๋ฆฟ ๋ง๋ค๊ธฐ ๋ฐ ํจ์ ๋๋ ํ๋ก์์ ์์ ์ธ๋ถ ์ก์ธ์ค ํตํฉ ์ฌ์ฉํ๊ธฐ ์น์ ์ ์ฐธ์กฐํ์ญ์์ค. |
USAGE |
์คํค๋ง |
SECRETS ๋งค๊ฐ ๋ณ์๋ก ์ง์ ๋ ์ํฌ๋ฆฟ์ด ํฌํจ๋ ์คํค๋ง(์๋ ๊ฒฝ์ฐ)์ ํ์ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ์๊ฒฉ ์ฆ๋ช ์ ๋ํ๋ด๋ ์ํฌ๋ฆฟ ๋ง๋ค๊ธฐ ๋ฐ ํจ์ ๋๋ ํ๋ก์์ ์์ ์ธ๋ถ ์ก์ธ์ค ํตํฉ ์ฌ์ฉํ๊ธฐ ์น์ ์ ์ฐธ์กฐํ์ญ์์ค. |
์คํค๋ง์ ๋ชจ๋ ์ค๋ธ์ ํธ์ ๋ํด ์์ ์ ์ํํ๋ ค๋ฉด ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐ ์คํค๋ง์ ๋ํ USAGE ๊ถํ.
์ง์ ๋ ๊ถํ ์ธํธ๋ก ์ฌ์ฉ์ ์ง์ ์ญํ ์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ํ ์ง์นจ์ ์ฌ์ฉ์ ์ง์ ์ญํ ๋ง๋ค๊ธฐ ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
๋ณด์ ์ค๋ธ์ ํธ ์ ๋ํด SQL ์์ ์ ์ํํ๊ธฐ ์ํ ์ญํ ๊ณผ ๊ถํ ๋ถ์ฌ์ ๋ํ ์ผ๋ฐ์ ์ธ ์ ๋ณด๋ ์ก์ธ์ค ์ ์ด์ ๊ฐ์ ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
์ฌ์ฉ๋ฒ ๋ ธํธยถ
๋ค์ ๋ ธํธ์์๋ ์ฒ๋ฆฌ๊ธฐ ์์ฑ์ ์ง์๋๋ ์ธ์ด์ ๊ด๋ จ๋ ์ฌ์ฉ๋ฒ ๋ ธํธ๋ฅผ ์ค๋ช ํฉ๋๋ค. ๋ค์ ์น์ ์ ์ฐธ๊ณ ์ฌํญ์ SQL CREATE FUNCTION ๋ช ๋ น์ ์ ์ ์ฐธ์กฐํ์ง๋ง, ์ด๋ฌํ ์ ์ ์ผ๋ฐ์ ์ผ๋ก ํจ์๋ฅผ ๋ง๋๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ๋ค๋ฅธ ๋๊ตฌ์์ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ํํ๋ฉ๋๋ค.
๋ชจ๋ ์ธ์ดยถ
function_definition์๋ ํฌ๊ธฐ ์ ํ์ด ์์ต๋๋ค. ํ์ฉ ๊ฐ๋ฅํ ์ต๋ ํฌ๊ธฐ๋ ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค.function_definition์ฃผ์์ ๊ตฌ๋ถ ๊ธฐํธ๋ ์์๋ฐ์ดํ ๋๋ ํ ์์ ๋ฌ๋ฌ ๊ธฐํธ์ผ ์ ์์ต๋๋ค.$$๋ฅผ ๊ตฌ๋ถ ๊ธฐํธ๋ก ์ฌ์ฉํ๋ฉด ์์๋ฐ์ดํ๊ฐ ํฌํจ๋ ํจ์๋ฅผ ๋ ์ฝ๊ฒ ์์ฑํ ์ ์์ต๋๋ค.ํจ์ ๋ณธ๋ฌธ์ ๊ตฌ๋ถ ๊ธฐํธ๊ฐ ์์๋ฐ์ดํ ๋ฌธ์์ธ ๊ฒฝ์ฐ ๋ฐ๋์
function_definition๋ด์ ๋ชจ๋ ์์๋ฐ์ดํ(์: ๋ฌธ์์ด ๋ฆฌํฐ๋ด)๋ฅผ ์์๋ฐ์ดํ๋ก ์ด์ค์ผ์ดํํด์ผ ํฉ๋๋ค.๋ง์คํน ์ ์ฑ ์์ UDF๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ด์ ๋ฐ์ดํฐ ํ์ , UDF, ๋ง์คํน ์ ์ฑ ์ด ์ผ์นํ๋์ง ํ์ธํ์ญ์์ค. ์์ธํ ๋ด์ฉ์ ๋ง์คํน ์ ์ฑ ์ ์ฌ์ฉ์ ์ ์ ํจ์ ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
UDF์ ํธ๋ค๋ฌ ์ฝ๋์ CURRENT_DATABASE ๋๋ CURRENT_SCHEMA ํจ์๋ฅผ ์ง์ ํ๋ฉด ํจ์๋ ์ธ์ ์ ์ฌ์ฉ ์ค์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋๋ ์คํค๋ง๊ฐ ์๋๋ผ UDF๊ฐ ํฌํจ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋๋ ์คํค๋ง๋ฅผ ๋ฐํํฉ๋๋ค.
๋ฉํ๋ฐ์ดํฐ ๊ด๋ จ:
์ฃผ์
๊ณ ๊ฐ์ Snowflake ์๋น์ค๋ฅผ ์ฌ์ฉํ ๋ ๊ฐ์ธ ๋ฐ์ดํฐ(์ฌ์ฉ์ ์ค๋ธ์ ํธ ์ ์ธ), ๋ฏผ๊ฐํ ๋ฐ์ดํฐ, ์์ถ ํต์ ๋์ ๋ฐ์ดํฐ ๋๋ ๊ธฐํ ๊ท์ ๋ฐ์ดํฐ๊ฐ ๋ฉํ๋ฐ์ดํฐ๋ก ์ ๋ ฅ๋์ง ์๋๋ก ํด์ผ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ Snowflake์ ๋ฉํ๋ฐ์ดํฐ ํ๋ ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
OR REPLACE๋ฐIF NOT EXISTS์ ์ ์ํธ ๋ฐฐํ์ ์ ๋๋ค. ๋ ๋ฌธ์๋ฅผ ๊ฐ์ ๋ฌธ์ ํจ๊ป ์ฌ์ฉํ ์ ์์ต๋๋ค.CREATE OR REPLACE <์ค๋ธ์ ํธ> ๋ฌธ์ ์์์ฑ์ ๋๋ค. ์ฆ, ์ค๋ธ์ ํธ๊ฐ ๋ฐ๋ ๋ ๋จ์ผ ํธ๋์ญ์ ์ผ๋ก ์ด์ ์ค๋ธ์ ํธ๊ฐ ์ญ์ ๋๊ณ ์ ์ค๋ธ์ ํธ๊ฐ ์์ฑ๋ฉ๋๋ค.
Javaยถ
Java์์ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ํ์ ์ NULL ๊ฐ์ ํ์ฉํ์ง ์์ผ๋ฏ๋ก, ์ด๋ฌํ ์ ํ์ ์ธ์์ ๋ํด NULL์ ์ ๋ฌํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
HANDLER ์ ์์ ๋ฉ์๋ ์ด๋ฆ์ ๋/์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค.
IMPORTS ๋ฐ TARGET_PATH ์ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
ํจํค์ง, ํด๋์ค ๋ฐ ํ์ผ ์ด๋ฆ์ ๋/์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค.
์คํ ์ด์ง ์ด๋ฆ์ ๋/์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์์ต๋๋ค.
PACKAGES ์ ์ ์ฌ์ฉํ์ฌ Snowflake ์์คํ ์ ์ ์ข ์์ฑ์ ๋ํ ํจํค์ง ์ด๋ฆ๊ณผ ๋ฒ์ ๋ฒํธ(์: Snowpark์ ํจํค์ง ์ด๋ฆ๊ณผ ๋ฒ์ ๋ฒํธ)๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค. ๋ค๋ฅธ ์ข ์ ํญ๋ชฉ์ ๊ฒฝ์ฐ IMPORTS ์ ์ ์ฌ์ฉํ์ฌ ์ข ์ ํญ๋ชฉ JAR ํ์ผ์ ์ง์ ํฉ๋๋ค.
Snowflake๋ ๋ค์์ ์ ํจ์ฑ์ ๊ฒ์ฌํฉ๋๋ค.
CREATE FUNCTION ๋ฌธ์ HANDLER์ ์ง์ ๋ JAR ํ์ผ์ด ์กด์ฌํ๊ณ ์ด ํ์ผ์๋ ์ง์ ๋ ํด๋์ค์ ๋ฉ์๋๊ฐ ์์ต๋๋ค.
UDF ์ ์ธ์ ์ง์ ๋ ์ ๋ ฅ ๋ฐ ์ถ๋ ฅ ์ ํ์ Java ๋ฉ์๋์ ์ ๋ ฅ ๋ฐ ์ถ๋ ฅ ์ ํ๊ณผ ํธํ๋ฉ๋๋ค.
์ ํจ์ฑ ๊ฒ์ฌ๋ ํ๋ ์ค์ธ Snowflake ์จ์ดํ์ฐ์ค์ ์ฐ๊ฒฐ๋์ด ์๋์ง ์ฌ๋ถ์ ๋ฐ๋ผ ์์ฑ ์ ๋๋ ์คํ ์ ์ํํ ์ ์์ต๋๋ค.
์์ฑ ์๊ฐ โ CREATE FUNCTION ๋ฌธ์ด ์คํ๋ ๋ ํ์ฑ ์ํ์ธ Snowflake ์จ์ดํ์ฐ์ค์ ์ฐ๊ฒฐ๋์ด ์์ผ๋ฉด UDF ๋ ์์ฑ ์์ ์ ์ ํจ์ฑ์ด ๊ฒ์ฌ๋ฉ๋๋ค.
์คํ ์๊ฐ โ ํ๋ ์ค์ธ Snowflake ์จ์ดํ์ฐ์ค์ ์ฐ๊ฒฐ๋์ด ์์ง ์์ ๊ฒฝ์ฐ UDF ๊ฐ ์์ฑ๋์ง๋ง ์ฆ์ ์ ํจ์ฑ์ด ๊ฒ์ฌ๋์ง ์์ผ๋ฉฐ, Snowflake๋ ๋ค์ ๋ฉ์์ง๋ฅผ ๋ฐํํฉ๋๋ค.
Function <์ด๋ฆ> created successfully, but could not be validated since there is no active warehouse
JavaScriptยถ
Snowflake๋ UDF ์์ฑ ์์ ์๋ JavaScript ์ฝ๋์ ์ ํจ์ฑ์ ๊ฒ์ฌํ์ง ์์ต๋๋ค. ์ฆ, ์ฝ๋๊ฐ ์ ํจํ์ง ์ฌ๋ถ์ ๊ด๊ณ์์ด UDF ์์ฑ์ ์ฑ๊ณตํฉ๋๋ค. ์ฝ๋๊ฐ ์ ํจํ์ง ์์ผ๋ฉด ์ฟผ๋ฆฌ ์ UDF ๋ฅผ ํธ์ถํ ๋ Snowflake๊ฐ ์ค๋ฅ๋ฅผ ๋ฐํํฉ๋๋ค.
Pythonยถ
HANDLER ์ ์์ ํธ๋ค๋ฌ ํจ์ ์ด๋ฆ์ ๋/์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค.
IMPORTS ์ ์์:
ํ์ผ ์ด๋ฆ์ ๋/์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค.
์คํ ์ด์ง ์ด๋ฆ์ ๋/์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์์ต๋๋ค.
PACKAGES ์ ์ ์ฌ์ฉํ์ฌ ์ข ์์ฑ์ ๋ํ ํจํค์ง ์ด๋ฆ๊ณผ ๋ฒ์ ๋ฒํธ(์: Snowpark์ ํจํค์ง)๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค. ๋ค๋ฅธ ์ข ์ ํญ๋ชฉ์ ๊ฒฝ์ฐ IMPORTS ์ ์ ์ฌ์ฉํ์ฌ ์ข ์ ํญ๋ชฉ ํ์ผ์ ์ง์ ํฉ๋๋ค.
Snowflake๋ ๋ค์์ ์ ํจ์ฑ์ ๊ฒ์ฌํฉ๋๋ค.
CREATE FUNCTION ๋ฌธ์ HANDLER์ ์ง์ ๋ ํจ์ ๋๋ ํด๋์ค๊ฐ ์กด์ฌํฉ๋๋ค.
UDF ์ ์ธ์ ์ง์ ๋ ์ ๋ ฅ ๋ฐ ์ถ๋ ฅ ์ ํ์ ํธ๋ค๋ฌ์ ์ ๋ ฅ ๋ฐ ์ถ๋ ฅ ์ ํ๊ณผ ํธํ๋ฉ๋๋ค.
Scalaยถ
HANDLER ์ ์์ ๋ฉ์๋ ์ด๋ฆ์ ๋/์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค.
IMPORTS ๋ฐ TARGET_PATH ์ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
ํจํค์ง, ํด๋์ค ๋ฐ ํ์ผ ์ด๋ฆ์ ๋/์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค.
์คํ ์ด์ง ์ด๋ฆ์ ๋/์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์์ต๋๋ค.
PACKAGES ์ ์ ์ฌ์ฉํ์ฌ Snowflake ์์คํ ์ ์ ์ข ์์ฑ์ ๋ํ ํจํค์ง ์ด๋ฆ๊ณผ ๋ฒ์ ๋ฒํธ(์: Snowpark์ ํจํค์ง ์ด๋ฆ๊ณผ ๋ฒ์ ๋ฒํธ)๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค. ๋ค๋ฅธ ์ข ์ ํญ๋ชฉ์ ๊ฒฝ์ฐ IMPORTS ์ ์ ์ฌ์ฉํ์ฌ ์ข ์ ํญ๋ชฉ JAR ํ์ผ์ ์ง์ ํฉ๋๋ค.
Snowflake๋ ๋ค์์ ์ ํจ์ฑ์ ๊ฒ์ฌํฉ๋๋ค.
CREATE FUNCTION ๋ฌธ์ HANDLER์ ์ง์ ๋ JAR ํ์ผ์ด ์กด์ฌํ๊ณ ์ด ํ์ผ์๋ ์ง์ ๋ ํด๋์ค์ ๋ฉ์๋๊ฐ ์์ต๋๋ค.
UDF ์ ์ธ์ ์ง์ ๋ ์ ๋ ฅ ๋ฐ ์ถ๋ ฅ ์ ํ์ Scala ๋ฉ์๋์ ์ ๋ ฅ ๋ฐ ์ถ๋ ฅ ์ ํ๊ณผ ํธํ๋ฉ๋๋ค.
์ ํจ์ฑ ๊ฒ์ฌ๋ ํ๋ ์ค์ธ Snowflake ์จ์ดํ์ฐ์ค์ ์ฐ๊ฒฐ๋์ด ์๋์ง ์ฌ๋ถ์ ๋ฐ๋ผ ์์ฑ ์ ๋๋ ์คํ ์ ์ํํ ์ ์์ต๋๋ค.
์์ฑ ์๊ฐ โ CREATE FUNCTION ๋ฌธ์ด ์คํ๋ ๋ ํ์ฑ ์ํ์ธ Snowflake ์จ์ดํ์ฐ์ค์ ์ฐ๊ฒฐ๋์ด ์์ผ๋ฉด UDF ๋ ์์ฑ ์์ ์ ์ ํจ์ฑ์ด ๊ฒ์ฌ๋ฉ๋๋ค.
์คํ ์๊ฐ โ ํ๋ ์ค์ธ Snowflake ์จ์ดํ์ฐ์ค์ ์ฐ๊ฒฐ๋์ด ์์ง ์์ ๊ฒฝ์ฐ UDF ๊ฐ ์์ฑ๋์ง๋ง ์ฆ์ ์ ํจ์ฑ์ด ๊ฒ์ฌ๋์ง ์์ผ๋ฉฐ, Snowflake๋ ๋ค์ ๋ฉ์์ง๋ฅผ ๋ฐํํฉ๋๋ค.
Function <์ด๋ฆ> created successfully, but could not be validated since there is no active warehouse
SQLยถ
ํ์ฌ, NOT NULL ์ ์ SQL UDF์ ๋ํด ์ ์ฉ๋์ง ์์ต๋๋ค.
SQL๋ก UDF ๋ง๋ค๊ธฐยถ
๋ค์ ๋จ๊ณ๋ฅผ ์ฌ์ฉํ์ฌ SQL ๋ก UDF ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
๋ค์ ๋จ๊ณ์ ๋ฐ๋ผ UDF๋ฅผ ๋ง๋ญ๋๋ค.
UDF๊ฐ ํธ์ถ๋ ๋ ์คํ๋๋ ์ฒ๋ฆฌ๊ธฐ ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค.
์ง์๋๋ ์ฒ๋ฆฌ๊ธฐ ์ธ์ด ์ค ํ๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ์ง์ ์ธ์ด ๋ฐ ๋๊ตฌ ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
์ฒ๋ฆฌ๊ธฐ ์ฝ๋๋ฅผ CREATE FUNCTION SQL ๋ฌธ๊ณผ ์ธ๋ผ์ธ์ผ๋ก ์ ์งํ ์ง, ์๋๋ฉด ์คํ ์ด์ง์์ ์ฐธ์กฐํ ์ง ์ ํํฉ๋๋ค.
๊ฐ๊ฐ ๋๋ฆ์ ์ฅ์ ์ด ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ์ฒ๋ฆฌ๊ธฐ ์ฝ๋๋ฅผ ์ธ๋ผ์ธ ๋๋ ์คํ ์ด์ง์ ์ ์งํ๊ธฐ ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
ํจ์์ ์์ฑ์ ์ง์ ํ์ฌ SQL์์ CREATE FUNCTION ๋ฌธ์ ์คํํฉ๋๋ค.
๋ค์ ์์ ์ ์ฝ๋๋ ์ธ๋ผ์ธ ์ฒ๋ฆฌ๊ธฐ
HandlerClass.handlerMethod๋ฅผ ์ฌ์ฉํ๋function_name๋ผ๋ UDF๋ฅผ ์์ฑํฉ๋๋ค.create function function_name(x integer, y integer) returns integer language java handler='HandlerClass.handlerMethod' target_path='@~/HandlerCode.jar' as $$ class HandlerClass { public static int handlerMethod(int x, int y) { return x + y; } } $$;
๋ค์์ ํจ์๋ฅผ ๋ง๋ค ๋ ํ์ํ๊ฑฐ๋ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๋ช ๊ฐ์ง ์์ฑ์ ๋ํ ์ค๋ช ์ ๋๋ค.
ํจ์ ์ด๋ฆ.
UDF ์ด๋ฆ์ ์ฒ๋ฆฌ๊ธฐ์ ์ด๋ฆ๊ณผ ์ผ์นํ ํ์๊ฐ ์์ต๋๋ค. CREATE FUNCTION ๋ฌธ์ UDF ์ด๋ฆ์ ์ฒ๋ฆฌ๊ธฐ์ ์ฐ๊ด์ํต๋๋ค.
์ด๋ฆ ์ ์ฝ ์กฐ๊ฑด๊ณผ ๊ท์น์ ๋ํ ์์ธํ ๋ด์ฉ์ ํ๋ก์์ ์ UDF์ ๋ช ๋ช ๋ฐ ์ค๋ฒ๋ก๋ฉ ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
ํจ์ ์ธ์(์๋ ๊ฒฝ์ฐ).
UDF ๋ฐ ์ ์ฅ ํ๋ก์์ ์ ๋ํ ์ธ์ ์ ์ํ๊ธฐ ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
RETURNS ์ ์ด ์๋ ๋ฐํ ์ ํ์ ๋๋ค.
์ค์นผ๋ผ ๋ฐํ ๊ฐ์ ๊ฒฝ์ฐ RETURNS ์ ์ ๋จ์ผ ๋ฐํ ์ ํ์ ์ง์ ํ๊ณ , ํ ์ด๋ธ ํ์ ๋ฐํ ๊ฐ์ ๊ฒฝ์ฐ RETURNS๋ ํ ์ด๋ธ ํ์ ๋ฐํ ๊ฐ์์ ์ด ์ ํ์ ์ง์ ํ๋ TABLE ํค์๋๋ฅผ ์ง์ ํฉ๋๋ค.
Snowflake๊ฐ SQL ๋ฐ์ดํฐ ํ์ ์ ์ฒ๋ฆฌ๊ธฐ ๋ฐ์ดํฐ ํ์ ์ ๋งคํํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ ํ๋ก์์ ์ UDF์ ๋ช ๋ช ๋ฐ ์ค๋ฒ๋ก๋ฉ ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
HANDLER ์ ์ด ์๋ ์ฒ๋ฆฌ๊ธฐ ์ด๋ฆ์ ๋๋ค.
ํ์ํ ๊ฒฝ์ฐ ์ด๋ UDF๊ฐ ํธ์ถ๋ ๋ ์คํ๋๋ ์ฝ๋๋ฅผ ํฌํจํ๋ ํด๋์ค ๋๋ ๋ฉ์๋์ ์ด๋ฆ์ ๋๋ค. Java์ Python์ผ๋ก ์์ฑ๋ ์ฒ๋ฆฌ๊ธฐ์ ๋ํด์๋ง ์ฒ๋ฆฌ๊ธฐ ์ด๋ฆ์ ์ง์ ํด์ผ ํฉ๋๋ค. JavaScript ๋ฐ SQL ์ฒ๋ฆฌ๊ธฐ์ ๊ฒฝ์ฐ ์ธ๋ผ์ธ์ผ๋ก ์ง์ ๋ ๋ชจ๋ ์ฝ๋๊ฐ ์ฒ๋ฆฌ๊ธฐ๋ก ์คํ๋ฉ๋๋ค.
๋ค์ ํ์๋ ์ฒ๋ฆฌ๊ธฐ ์ธ์ด์ ํจ์ ์ ํ์ ๋ฐ๋ผ HANDLER ์ ์ ๊ฐ ํ์์ ์ค๋ช ํฉ๋๋ค.
์ฒ๋ฆฌ๊ธฐ ์ธ์ด
UDF
UDTF
Java
ํด๋์ค ๋ฐ ๋ฉ์๋ ์ด๋ฆ.
์:
MyClass.myMethodํด๋์ค ์ด๋ฆ๋ง. ์ฒ๋ฆฌ๊ธฐ ๋ฉ์๋ ์ด๋ฆ์ ํ์ํ ์ธํฐํ์ด์ค์ ์ํด ๋ฏธ๋ฆฌ ๊ฒฐ์ ๋ฉ๋๋ค.
JavaScript
์์ต๋๋ค.
์์ต๋๋ค.
Python
ํด๋์ค๊ฐ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ ํด๋์ค ๋ฐ ๋ฉ์๋ ์ด๋ฆ์ด๋ฉฐ, ๊ทธ๋ ์ง ์์ผ๋ฉด ํจ์ ์ด๋ฆ.
์:
module.my_function๋๋my_functionํด๋์ค ์ด๋ฆ๋ง. ์ฒ๋ฆฌ๊ธฐ ๋ฉ์๋ ์ด๋ฆ์ ํ์ํ ์ธํฐํ์ด์ค์ ์ํด ๋ฏธ๋ฆฌ ๊ฒฐ์ ๋ฉ๋๋ค.
SQL
์์ต๋๋ค.
์์ต๋๋ค.
IMPORTS ๋๋ PACKAGES ์ ์ ์ฌ์ฉํ์ฌ ์ฒ๋ฆฌ๊ธฐ์ ํ์ํ ์ข ์ ํญ๋ชฉ(์๋ ๊ฒฝ์ฐ).
์ฒ๋ฆฌ๊ธฐ์์ ์ข ์ ํญ๋ชฉ์ ์ฌ์ฉํ ์ ์๋๋ก ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ฝ๋์ ์ข ์์ฑ์ ์ฌ์ฉํ ์ ์๋๋ก ๋ง๋ค๊ธฐ ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
RUNTIME_VERSION ์ ์ด ์๋ ์ฒ๋ฆฌ๊ธฐ ์ธ์ด ๋ฐํ์.
์ฒ๋ฆฌ๊ธฐ ์ธ์ด๊ฐ Java ๋๋ Python์ธ ๊ฒฝ์ฐ RUNTIME_VERSION ์ ์ ์ฌ์ฉํ์ฌ ์ง์๋๋ ๋ฐํ์ ๋ฒ์ ์ค ์ด๋ค ๋ฒ์ ์ ์ฌ์ฉํ ์ง ์ง์ ํฉ๋๋ค. ์ด ์ ์ ์๋ตํ๋ฉด Snowflake๊ฐ ๊ธฐ๋ณธ๊ฐ์ ์ฌ์ฉํ๊ฒ ๋๋ฉฐ ์ด๋ ๋์ค์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.