Java UDF 소개¶
Java에서 UDF(사용자 정의 함수)의 처리기를 작성할 수 있습니다. 이 섹션의 항목에서는 Java 처리기를 설계하고 작성하는 방법을 설명합니다. 예제도 찾아볼 수 있습니다.
UDF 처리기를 작성할 수 있는 언어 목록을 포함하여, UDF에 대한 소개는 사용자 정의 함수 개요 섹션을 참조하십시오.
처리기가 있으면 SQL로 UDF를 생성합니다. SQL을 사용하여 UDF을 만들거나 호출하는 방법에 대한 자세한 내용은 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로 컴파일된 코드로 사용하도록 할 수 있습니다. 차이점에 대한 자세한 내용은 처리기 코드를 인라인 또는 스테이지에 유지하기 섹션을 참조하십시오.
코드 최적화. 코드가 여러 행에서 공유되는 상태를 처리하는 경우와 같이, 처리기 코드 최적화에 대한 자세한 내용은 스칼라 UDF에서 초기화 최적화 및 전역 상태 제어 섹션을 참조하십시오.
모범 사례. 모범 사례에 대한 자세한 내용은 모범 사례 따르기 및 UDF 및 프로시저의 보안 모범 사례 섹션을 참조하십시오.
처리기 코딩¶
기본 사항부터 자세한 예제까지, 다음 항목에서는 UDF 처리기를 Java로 작성하는 방법을 설명합니다.
Java 클래스 정의. Java 클래스에서 UDF의 논리를 작성합니다. Snowflake가 코드와 상호 작용하는 방식에 대한 자세한 내용은 클래스 설계 섹션을 참조하십시오.
오류 처리. Snowflake가 처리기에서 생성되는 오류를 표시하는 방법에 대한 자세한 내용은 오류 처리 섹션을 참조하십시오.
테이블 형식 반환 값. UDF에서 스칼라(단일) 값뿐 아니라 테이블 형식 값도 반환할 수 있습니다. 테이블 형식 값을 반환하는 처리기를 작성하는 방법에 대한 자세한 내용은 테이블 형식 Java UDF(UDTF) 섹션을 참조하십시오.
로깅 및 이벤트 추적. 처리기 코드가 실행될 때 로그 및 추적 데이터를 캡처하는 방법에 대한 자세한 내용은 로깅 및 추적 개요 섹션을 참조하십시오.
종속성. 스테이지에 종속성을 업로드하여 런타임에 코드에서 사용 가능하도록 만들 수 있습니다. 자세한 내용은 코드에 종속성을 사용할 수 있도록 만들기 섹션을 참조하십시오.
처리기 파일 구성. 컴파일된 처리기 코드를 JAR 파일로 패키징하려는 경우 파일 정리 의 제안을 사용하여 코드를 구성하고 빌드하십시오.
코드 예제 Java의 다양한 처리기 예제는 Java UDF 처리기의 예 섹션을 참조하십시오.