

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

# 使用 UDF 查詢語法進行查詢
<a name="udf-query-syntax"></a>

`USING EXTERNAL FUNCTION` 子句指定一個 UDF 或多個 UDF，供查詢中的後續 `SELECT` 陳述式參考。您需要 UDF 的方法名稱及託管 UDF 之 Lambda 函數的名稱。若要取代 Lambda 函數名稱，您可以使用 Lambda ARN。在跨帳戶案例中，需要使用 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}})] [...]
```

## Parameters
<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_tw/athena/latest/ug/udf-query-syntax.html)

**RETURNS {{data\_type}}**  
`data_type` 會指定 UDF 傳回作為輸出的 SQL 資料類型。支援上表列出的 Athena 資料類型。對於 `DECIMAL` 資料類型，請使用語法 `RETURNS DECIMAL({{precision}}, {{scale}})`，其中{{精確度}}和{{比例}}是整數。

**LAMBDA '{{lambda\_function}}'**  
{{lambda\_function}} 指定在執行 UDF 時要叫用的 Lambda 函數之名稱。

**SELECT [...] {{UDF\_name}}({{expression}}) [...]**  
將值傳遞給 UDF 並傳回結果的 `SELECT` 查詢。{{UDF\_name}} 指定要使用的 UDF，後接評估為傳遞值的 {{expression}}。傳遞和傳回的值必須符合 `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 連接器](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-udfs)頁面。