使用 UDF 查询语法进行查询 - Amazon Athena

使用 UDF 查询语法进行查询

USING EXTERNAL FUNCTION 子句指定可由查询中的后续 SELECT 语句引用的 UDF 或多个 UDF。您需要 UDF 的方法名称和托管 UDF 的 Lambda 函数的名称。您可以使用 Lambda ARN 代替 Lambda 函数名称。在跨账户场景中,需要提供 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(variable1data_type[, variable2data_type][,...])

UDF_name 指定 UDF 的名称,该名称必须与引用的 Lambda 函数中的 Java 方法对应。每个 variable data_type 指定一个命名变量,且其相应的数据类型应可为 UDF 接受作为输入。data_type 必须是下表中列出的受支持 Athena 数据类型之一,并映射到相应的 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<String, Object>

RETURNS data_type

data_type 指定 UDF 作为输出返回的 SQL 数据类型。上表中列出的 Athena 数据类型均受支持。对于 DECIMAL 数据类型,请使用语法 RETURNS DECIMAL(precision, scale),其中 precision(精度)和 scale(小数位数)是整数。

LAMBDA 'lambda_function'

lambda_function 指定运行 UDF 时要调用的 Lambda 函数的名称。

SELECT [...]UDF_name(expression) [...]

SELECT 查询会将值传递给 UDF 并返回结果。UDF_name 指定要使用的 UDF,后跟一个表达式,该表达式将进行估算以传递值。传递和返回的值必须与 USING EXTERNAL FUNCTION 子句中为 UDF 指定的相应数据类型匹配。

示例

如需获取 GitHub 上基于AthenaUDFHandler.java 代码的示例查询,请参阅 GitHub 的 Amazon Athena UDF connector(Amazon Athena UDF 连接器)页面。