

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

# 使用 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\$1name*(*variable1* *data\$1type*[, *variable2* *data\$1type*][,...])**  
*UDF\$1name* 指定 UDF 的名稱，其必須對應於所參考 Lambda 函數中的 Java 方法。每個 *variable data\$1type* 會指定具名變數及其相應的資料類型，供 UDF 接受作為輸入。此 *data\$1type* 必須是下表列出的其中一種支援的 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\$1type***  
`data_type` 會指定 UDF 傳回作為輸出的 SQL 資料類型。支援上表列出的 Athena 資料類型。對於 `DECIMAL` 資料類型，請使用語法 `RETURNS DECIMAL(precision, scale)`，其中*精確度*和*比例*是整數。

**LAMBDA '*lambda\$1function*'**  
*lambda\$1function* 指定在執行 UDF 時要叫用的 Lambda 函數之名稱。

**SELECT [...] *UDF\$1name*(*expression*) [...]**  
將值傳遞給 UDF 並傳回結果的 `SELECT` 查詢。*UDF\$1name* 指定要使用的 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)頁面。