Java UDF ์๊ฐยถ
Java์์ UDF(์ฌ์ฉ์ ์ ์ ํจ์)์ ์ฒ๋ฆฌ๊ธฐ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์ด ์น์ ์ ํญ๋ชฉ์์๋ Java ์ฒ๋ฆฌ๊ธฐ๋ฅผ ์ค๊ณํ๊ณ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค. ์์ ๋ ์ฐพ์๋ณผ ์ ์์ต๋๋ค.
UDF ์ฒ๋ฆฌ๊ธฐ๋ฅผ ์์ฑํ ์ ์๋ ์ธ์ด ๋ชฉ๋ก์ ํฌํจํ์ฌ, UDF์ ๋ํ ์๊ฐ๋ ์ฌ์ฉ์ ์ ์ ํจ์ ๊ฐ์ ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
์ฒ๋ฆฌ๊ธฐ๊ฐ ์์ผ๋ฉด SQL๋ก UDF๋ฅผ ์์ฑํฉ๋๋ค. SQL์ ์ฌ์ฉํ์ฌ UDF์ ๋ง๋ค๊ฑฐ๋ ํธ์ถํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ฌ์ฉ์ ์ ์ ํจ์ ์์ฑํ๊ธฐ ๋๋ UDF ์คํํ๊ธฐ ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
Snowflake๋ ํ์ฌ ๋ค์ Java ๋ฒ์ ์์ UDF ์์ฑ์ ์ง์ํฉ๋๋ค.
11.x
17.x
์ฐธ๊ณ
Java UDF ์ฒ๋ฆฌ๊ธฐ์ ๊ด๋ จ๋ ์ ํ ์ฌํญ์ Java UDF ์ ํ ์ฌํญ ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
์ด ํญ๋ชฉ์ ๋ด์ฉ:
Java ์ฒ๋ฆฌ๊ธฐ ์๋ ๋ฐฉ์ยถ
์ฌ์ฉ์๋ UDF๋ฅผ ํธ์ถํ ๋ UDF์ ์ด๋ฆ๊ณผ ์ธ์๋ฅผ Snowflake์ ์ ๋ฌํฉ๋๋ค. Snowflake๋ UDF์ ๋ ผ๋ฆฌ๋ฅผ ์คํํ๊ธฐ ์ํด ๊ด๋ จ ์ฒ๋ฆฌ๊ธฐ ์ฝ๋(์ธ์๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ์ธ์๋ ํฌํจ)๋ฅผ ํธ์ถํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ํธ๋ค๋ฌ ๋ฉ์๋๋ ์ถ๋ ฅ์ Snowflake๋ก ๋ฐํํ๊ณ Snowflake๋ ์ด๋ฅผ ๋ค์ ํด๋ผ์ด์ธํธ๋ก ์ ๋ฌํฉ๋๋ค.
UDF์ ์ ๋ฌ๋ ๊ฐ ํ์ ๋ํด UDF๋ ์ค์นผ๋ผ(์ฆ, ๋จ์ผ) ๊ฐ์ ๋ฐํํ๊ฑฐ๋, ํ ์ด๋ธ ํจ์๋ก ์ ์๋ ๊ฒฝ์ฐ ํ ์ธํธ๋ฅผ ๋ฐํํฉ๋๋ค.
Java UDF๋ ์ ์ฝ๋์ ๊ธฐ์กด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ํธ์ถ์ ๋ ๋ค ํฌํจํ ์ ์์ผ๋ฏ๋ก ์ ์ฐ์ฑ๊ณผ ์ฝ๋ ์ฌ์ฌ์ฉ์ ๋ชจ๋ ํ์ฉํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ด๋ฏธ Java์ ๋ฐ์ดํฐ ๋ถ์ ์ฝ๋๊ฐ ์๋ ๊ฒฝ์ฐ, ์ด๋ฅผ Java UDF์ ํตํฉํ ์ ์์ต๋๋ค.
๋ค์์ ๋ฐ์ดํฐ ํ๋ฆ์ ๋จ์ํํ ๊ทธ๋ฆผ์ ๋๋ค.

์ยถ
๋ค์ ์์ ์ ์ฝ๋๋ ์ฒ๋ฆฌ๊ธฐ ๋ฉ์๋ TestFunc.echoVarchar
๋ฅผ ์ฌ์ฉํ์ฌ echo_varchar
์ด๋ผ๋ UDF๋ฅผ ์์ฑํฉ๋๋ค. Snowflake๋ SQL-Java ๋ฐ์ดํฐ ํ์
๋งคํ ์ ์ค๋ช
๋ ๋งคํ์ ๋ฐ๋ผ Java ์ธ์ ๋ฐ ๋ฐํ ์ ํ์ SQL๋ก ๋ณํํ๊ฑฐ๋ ๊ทธ ๋ฐ๋๋ก ๋ณํํฉ๋๋ค.
CREATE OR REPLACE FUNCTION echo_varchar(x VARCHAR)
RETURNS VARCHAR
LANGUAGE JAVA
CALLED ON NULL INPUT
HANDLER = 'TestFunc.echoVarchar'
TARGET_PATH = '@~/testfunc.jar'
AS
'class TestFunc {
public static String echoVarchar(String x) {
return x;
}
}';
์ค๊ณ ๊ณ ๋ ค ์ฌํญยถ
์ ์ฉํ ์ฒ๋ฆฌ๊ธฐ๋ฅผ ์ค๊ณํ๋ ค๋ฉด ๋ค์ ์ฌํญ์ ์ผ๋์ ๋์ญ์์ค.
์ผ๋ฐ ๊ณ ๋ ค ์ฌํญ. UDF์ ํ๋ก์์ ์ ๋ํ ์ผ๋ฐ์ ์ธ ๊ณ ๋ ค ์ฌํญ์ ํจ์์ ํ๋ก์์ ์ ์ค๊ณ ์ง์นจ ๋ฐ ์ ์ฝ ์กฐ๊ฑด ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
SQL-Java ์ ํ ๋งคํ. UDF๋ก ์ธ์ ๋ฐ ๋ฐํ ๊ฐ์ ๊ตํํ ๋ Snowflake๋ ์ฒ๋ฆฌ๊ธฐ ์ธ์ด์ SQL ์ฌ์ด์์ ์ ํํฉ๋๋ค. ์ฒ๋ฆฌ๊ธฐ ์ฝ๋์ ๋ฐ์ดํฐ ํ์ ์ ํ์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ฐ์ดํฐ ํ์ ์ ํํ๊ธฐ ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
์ฝ๋ ํจํค์ง. ์ฒ๋ฆฌ๊ธฐ ์ฝ๋๋ฅผ CREATE FUNCTION ๋ฌธ๊ณผ ํจ๊ป ์ธ๋ผ์ธ์ผ๋ก ์ฌ์ฉํ๊ฑฐ๋ ์คํ ์ด์ง์์ JAR๋ก ์ปดํ์ผ๋ ์ฝ๋๋ก ์ฌ์ฉํ๋๋ก ํ ์ ์์ต๋๋ค. ์ฐจ์ด์ ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ฒ๋ฆฌ๊ธฐ ์ฝ๋๋ฅผ ์ธ๋ผ์ธ ๋๋ ์คํ ์ด์ง์ ์ ์งํ๊ธฐ ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
์ฝ๋ ์ต์ ํ. ์ฝ๋๊ฐ ์ฌ๋ฌ ํ์์ ๊ณต์ ๋๋ ์ํ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฒฝ์ฐ์ ๊ฐ์ด, ์ฒ๋ฆฌ๊ธฐ ์ฝ๋ ์ต์ ํ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ค์นผ๋ผ UDFs์์ ์ด๊ธฐํ ์ต์ ํํ๊ธฐ ๋ฐ ์ ์ญ ์ํ ์ ์ดํ๊ธฐ ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
๋ชจ๋ฒ ์ฌ๋ก. ๋ชจ๋ฒ ์ฌ๋ก์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ชจ๋ฒ ์ฌ๋ก ๋ฐ๋ฅด๊ธฐ ๋ฐ UDF ๋ฐ ํ๋ก์์ ์ ๋ณด์ ๋ชจ๋ฒ ์ฌ๋ก ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
์ฒ๋ฆฌ๊ธฐ ์ฝ๋ฉยถ
๊ธฐ๋ณธ ์ฌํญ๋ถํฐ ์์ธํ ์์ ๊น์ง, ๋ค์ ํญ๋ชฉ์์๋ UDF ์ฒ๋ฆฌ๊ธฐ๋ฅผ Java๋ก ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค.
Java ํด๋์ค ์ ์. Java ํด๋์ค์์ UDF์ ๋ ผ๋ฆฌ๋ฅผ ์์ฑํฉ๋๋ค. Snowflake๊ฐ ์ฝ๋์ ์ํธ ์์ฉํ๋ ๋ฐฉ์์ ๋ํ ์์ธํ ๋ด์ฉ์ ํด๋์ค ์ค๊ณํ๊ธฐ ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
์ค๋ฅ ์ฒ๋ฆฌ. Snowflake๊ฐ ์ฒ๋ฆฌ๊ธฐ์์ ์์ฑ๋๋ ์ค๋ฅ๋ฅผ ํ์ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ค๋ฅ ์ฒ๋ฆฌ ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
ํ ์ด๋ธ ํ์ ๋ฐํ ๊ฐ. UDF์์ ์ค์นผ๋ผ(๋จ์ผ) ๊ฐ๋ฟ ์๋๋ผ ํ ์ด๋ธ ํ์ ๊ฐ๋ ๋ฐํํ ์ ์์ต๋๋ค. ํ ์ด๋ธ ํ์ ๊ฐ์ ๋ฐํํ๋ ์ฒ๋ฆฌ๊ธฐ๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ ํ ์ด๋ธ ํ์ Java UDF(UDTF) ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
๋ก๊น ๋ฐ ์ด๋ฒคํธ ์ถ์ . ์ฒ๋ฆฌ๊ธฐ ์ฝ๋๊ฐ ์คํ๋ ๋ ๋ก๊ทธ ๋ฐ ์ถ์ ๋ฐ์ดํฐ๋ฅผ ์บก์ฒํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ก๊น , ์ถ์ ๋ฐ ๋ฉํธ๋ฆญ ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
์ข ์์ฑ. ์คํ ์ด์ง์ ์ข ์์ฑ์ ์ ๋ก๋ํ์ฌ ๋ฐํ์์ ์ฝ๋์์ ์ฌ์ฉ ๊ฐ๋ฅํ๋๋ก ๋ง๋ค ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ์ฝ๋์ ์ข ์์ฑ์ ์ฌ์ฉํ ์ ์๋๋ก ๋ง๋ค๊ธฐ ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.
์ฒ๋ฆฌ๊ธฐ ํ์ผ ๊ตฌ์ฑ. ์ปดํ์ผ๋ ์ฒ๋ฆฌ๊ธฐ ์ฝ๋๋ฅผ JAR ํ์ผ๋ก ํจํค์งํ๋ ค๋ ๊ฒฝ์ฐ ํ์ผ ์ ๋ฆฌํ๊ธฐ ์ ์ ์์ ์ฌ์ฉํ์ฌ ์ฝ๋๋ฅผ ๊ตฌ์ฑํ๊ณ ๋น๋ํ์ญ์์ค.
์ฝ๋ ์์ Java์ ๋ค์ํ ์ฒ๋ฆฌ๊ธฐ ์์ ๋ Java UDF ์ฒ๋ฆฌ๊ธฐ์ ์ ์น์ ์ ์ฐธ์กฐํ์ญ์์ค.