UDF クエリ構文を使用してクエリする - Amazon Athena

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 は UDF の名前を指定します。この名前は、参照される Lambda 関数内の Java メソッドに対応している必要があります。各 variable data_type は、UDF が入力として受け入れる名前付きの変数とそれに対応するデータ型を指定します。data_type は、以下の表に記載されているサポート対象の Athena データ型の 1 つであり、対応する Java データ型にマップする必要があります。

Athena データ型 Java データ型

TIMESTAMP

java.time.LocalDateTime (UTC)

DATE

java.time.LocalDate (UTC)

TINYINT

java.lang.Byte

SMALLINT

java.lang.Short

REAL

java.lang.Float

DOUBLE

java.lang.Double

DECIMAL (「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<文字列,オブジェクト>

RETURNS data_type

data_type は、UDF が出力として返す SQL データ型を指定します。上記の表にリストされている Athena データ型がサポートされます。DECIMAL データ型の場合、この構文 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 コードに基づいたクエリの例については、GitHub の「Amazon Athena UDF connector」(Amazon Athena UDF コネクタ) ページを参照してください。