

# 注意事项和限制
<a name="udf-considerations-limitations"></a>

在 Athena 中使用用户定义函数（UDF）时，请考虑以下几点。
+ **内置 Athena 函数** – Athena 中的内置函数旨在实现高性能。我们建议尽可能使用内置函数而不是 UDF。有关内置函数的更多信息，请参阅 [Amazon Athena 中的函数](functions.md)。
+ **仅标量 UDF** – Athena 仅支持标量 UDF，它将一次处理一行并返回单个列值。每次调用 Lambda 时，Athena 都会将行批量（可能并行）传递给 UDF。在设计 UDF 和查询时，请注意此处理可能对网络流量产生的潜在影响。
+ **UDF 处理函数使用缩写格式**– 对于 UDF 函数使用缩写格式（而非完整格式）（例如，使用 `package.Class` 而非 `package.Class::method`）。
+ **UDF 方法必须为小写**– UDF 方法必须为小写字母；不允许使用骆驼大小写。
+ **UDF 方法需要参数** - UDF 方法必须至少有一个输入参数。尝试调用未定义输入参数的 UDF 会导致运行时异常。UDF 旨在对数据记录执行函数，但是没有参数的 UDF 不接受任何数据，因此会出现异常。
+ **Java 运行时支持**：目前，Athena UDF 支持用于 Lambda 的 Java 8、Java 11 和 Java 17 运行时。有关更多信息，请参阅《*AWS Lambda 开发人员指南*》中的[使用 Jav 构建 Lambda 函数](https://docs.aws.amazon.com/lambda/latest/dg/lambda-java.html)。
**注意**  
 对于 Java 17，您必须在 Lambda 中将 `JAVA_TOOL_OPTIONS` 环境变量的值设置为 `--add-opens=java.base/java.nio=ALL-UNNAMED`。
+ **IAM 权限** – 要在 Athena 中创建并运行 UDF 查询语句，则除 Athena 函数之外，还必须允许运行查询的 IAM 委托人执行操作。有关更多信息，请参阅 [允许访问 Athena UDF：策略示例](udf-iam-access.md)。
+ **Lambda 配额** – Lambda 配额适用于 UDF。有关更多信息，请参阅《*AWS Lambda 开发人员指南*》中的 [Lambda 配额](https://docs.aws.amazon.com/lambda/latest/dg/limits.html)。
+ **行级别筛选** - UDF 不支持 Lake Formation 行级别筛选。
+ **视图** – 您不能将视图与 UDF 同时使用。
+ **已知问题** – 有关已知问题的最新列表，请参阅 GitHub 的 awslabs/aws-athena-query-federation 部分中的 [Limitations and issues](https://github.com/awslabs/aws-athena-query-federation/wiki/Limitations_And_Issues)（限制和问题）。