

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 考量和限制
<a name="udf-considerations-limitations"></a>

當您在 Athena 中運用使用者定義函式 (UDF) 時，請考慮下列幾點。
+ **內建 Athena 函數** – Athena 中內建的函數專為高效能而設計。建議您盡可能使用內建函數，而不要使用 UDF。如需內建函數的詳細資訊，請參閱[Amazon Athena 中的函數](functions.md)。
+ **僅限純量 UDF** – Athena 僅支援純量 UDF，一次只處理一個資料行，並傳回單一資料欄值。Athena 每次叫用 Lambda 時，可能會平行地將一整批的資料行傳遞給 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 開發人員指南》**中的[使用 Java 建立 Lambda 函數](https://docs.aws.amazon.com/lambda/latest/dg/lambda-java.html)。
**注意**  
 對於 Java 17，您必須將 `JAVA_TOOL_OPTIONS` 環境變數的值設定為 Lambda 中的 `--add-opens=java.base/java.nio=ALL-UNNAMED`。
+ **IAM 許可** – 若要在 Athena 中執行和建立 UDF 查詢陳述式，執行查詢的 IAM 委託人必須能夠執行 Athena 函數以外的動作。如需詳細資訊，請參閱[允許存取 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 一節中的[限制與問題](https://github.com/awslabs/aws-athena-query-federation/wiki/Limitations_And_Issues)。