

# 使用 UDF 查询语法进行查询
<a name="udf-query-syntax"></a>

`USING EXTERNAL FUNCTION` 子句指定可由查询中的后续 `SELECT` 语句引用的 UDF 或多个 UDF。您需要 UDF 的方法名称和托管 UDF 的 Lambda 函数的名称。您可以使用 Lambda ARN 代替 Lambda 函数名称。在跨账户场景中，需要提供 Lambda ARN。

## 摘要
<a name="udf-synopsis"></a>

```
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}})] [...]
```

## 参数
<a name="udf-parameters"></a>

**USING EXTERNAL FUNCTION {{UDF\_name}}({{variable1}}{{data\_type}}[, {{variable2}}{{data\_type}}][,...])**  
{{UDF\_name}} 指定 UDF 的名称，该名称必须与引用的 Lambda 函数中的 Java 方法对应。每个 {{variable data\_type}} 指定一个命名变量，且其相应的数据类型应可为 UDF 接受作为输入。{{data\_type}} 必须是下表中列出的受支持 Athena 数据类型之一，并映射到相应的 Java 数据类型。      
[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/udf-query-syntax.html)

**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 指定的相应数据类型匹配。

### 示例
<a name="udf-examples"></a>

如需获取 GitHub 上基于[AthenaUDFHandler.java](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-udfs/src/main/java/com/amazonaws/athena/connectors/udfs/AthenaUDFHandler.java) 代码的示例查询，请参阅 GitHub 的 [Amazon Athena UDF connector](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-udfs)（Amazon Athena UDF 连接器）页面。