UDF 쿼리 구문을 사용한 쿼리
USING EXTERNAL FUNCTION
절은 쿼리의 후속 SELECT
문에서 참조할 수 있는 단일 UDF 또는 여러 UDF를 지정합니다. UDF의 메서드 이름과 UDF를 호스팅하는 Lambda 함수의 이름이 필요합니다. Lambda 함수 이름 대신 Lambda ARN을 사용할 수 있습니다. 크로스 계정 시나리오에서는 Lambda ARN이 필요합니다.
시놉시스
USING EXTERNAL FUNCTION UDF_name
(variable1
data_type
[, variable2
data_type
][,...])
RETURNS data_type
LAMBDA 'lambda_function_name_or_ARN
'
[, EXTERNAL FUNCTION UDF_name2
(variable1
data_type
[, variable2
data_type
][,...])
RETURNS data_type
LAMBDA 'lambda_function_name_or_ARN
'[,...]]
SELECT [...] UDF_name
(expression
) [, UDF_name2
(expression
)] [...]
파라미터
- USING EXTERNAL FUNCTION
UDF_name
(variable1
data_type
[,variable2
data_type
][,...]) -
UDF_name
은 참조된 Lambda 함수 내에서 Java 메서드에 해당하는 UDF의 이름을 지정합니다. 각variable data_type
은 UDF가 입력으로 수락하는 명명된 변수와 해당 데이터 형식을 지정합니다.data_type
은 다음 표에 나열된 지원되는 Athena 데이터 형식 중 하나여야 하며 해당 Java 데이터 형식에 매핑되어야 합니다.Athena 데이터 형식 Java 데이터 유형 TIMESTAMP
java.time.LocalDateTime(UTC)
날짜
java.time.LocalDate(UTC)
TINYINT
java.lang.Byte
SMALLINT
java.lang.Short
REAL
java.lang.Float
DOUBLE
java.lang.Double
DECIMA (
RETURNS
참고 사항 참조)java.math.BigDecimal
BIGINT
java.lang.Long
INTEGER
java.lang.Int
VARCHAR
java.lang.String
VARBINARY
byte[]
BOOLEAN
java.lang.Boolean
ARRAY
java.util.List
ROW
java.util.Map<String, Object>
- RETURNS
data_type
-
data_type
은 UDF가 출력으로 반환하는 SQL 데이터 형식을 지정합니다. 위의 표에 나열된 Athena 데이터 형식이 지원됩니다.DECIMAL
데이터 형식의 경우precision
과scale
이 정수인RETURNS DECIMAL(
구문을 사용합니다.precision
,scale
) - LAMBDA '
lambda_function
' -
lambda_function
은 UDF를 실행할 때 호출되는 Lambda 함수의 이름을 지정합니다. - SELECT [...]
UDF_name
(expression
) [...] -
UDF에 값을 전달하고 결과를 반환하는
SELECT
쿼리입니다.UDF_name
은 사용할 UDF를 지정하며, 값을 전달하기 위해 평가되는expression
이 뒤에 옵니다. 전달되고 반환되는 값은USING EXTERNAL FUNCTION
절의 UDF에 대해 지정된 해당 데이터 유형과 일치해야 합니다.
예시
GitHub의 AthenaUDFHandler.java