

# 使用用户定义函数进行查询
<a name="querying-udf"></a>

Amazon Athena 中的用户定义函数 (UDF) 使您可以创建自定义函数来处理记录或记录组。UDF 接受参数，执行工作，然后返回结果。

要在 Athena 中使用 UDF，请在 SQL 查询中的 `SELECT` 语句之前写入 `USING EXTERNAL FUNCTION` 子句。`SELECT` 语句引用 UDF 并定义在查询运行时传递给 UDF 的变量。SQL 查询在调用 UDF 时使用 Java 运行时调用 Lambda 函数。UDF 在 Lambda 函数中定义为 Java 部署包中的方法。可以在同一个 Java 部署包中为某个 Lambda 函数定义多个 UDF。您还可以在 `USING EXTERNAL FUNCTION` 子句中指定 Lambda 函数的名称。

部署 Athena UDF 的 Lambda 函数有两个选项。您可以直接使用 Lambda 部署函数，也可以使用 AWS Serverless Application Repository 来部署。要查找 UDF 的现有 Lambda 函数，您可以搜索公共 AWS Serverless Application Repository 或私有存储库，然后部署到 Lambda。您还可以创建或修改 Java 源代码，将其打包到 JAR 文件中，然后使用 Lambda 或 AWS Serverless Application Repository 来部署它。有关能够帮助您开始使用的示例 Java 源代码和软件包，请参阅 [使用 Lambda 创建和部署 UDF](udf-creating-and-deploying.md)。有关 Lambda 的更多信息，请参阅《[AWS Lambda 开发人员指南](https://docs.aws.amazon.com/lambda/latest/dg/)》。有关 AWS Serverless Application Repository 的更多信息，请参阅《[AWS Serverless Application Repository 开发人员指南](https://docs.aws.amazon.com/serverlessrepo/latest/devguide/)》。

有关使用 UDF 与 Athena 一起翻译和分析文本的示例，请参阅 AWS Machine Learning 博客文章：[使用 Amazon Athena、Amazon Translate 和 Amazon Comprehend 的 SQL 函数翻译和分析文本](https://aws.amazon.com/blogs/machine-learning/translate-and-analyze-text-using-sql-functions-with-amazon-athena-amazon-translate-and-amazon-comprehend/)，或观看 [video](udf-videos.md#udf-videos-xlate)。

有关在 Amazon Athena 中使用 UDF 扩展地理空间查询的示例，请参阅 *AWS 大数据博客*中的[使用 UDF 和 AWS Lambda 在 Amazon Athena 中扩展地理空间查询](https://aws.amazon.com/blogs/big-data/extend-geospatial-queries-in-amazon-athena-with-udfs-and-aws-lambda/)。

**Topics**
+ [Athena 中关于 UDF 的视频](udf-videos.md)
+ [注意事项和限制](udf-considerations-limitations.md)
+ [使用 UDF 查询语法进行查询](udf-query-syntax.md)
+ [使用 Lambda 创建和部署 UDF](udf-creating-and-deploying.md)