

# 将机器学习（ML）与 Athena 结合使用的语法
<a name="ml-syntax"></a>

`USING EXTERNAL FUNCTION` 子句指定可由查询中的后续 `SELECT` 语句引用的机器学习（ML）与 Athena 相结合的函数或多个函数。您定义函数名称、变量名称以及变量和返回值的数据类型。

## 摘要
<a name="ml-synopsis"></a>

下面的语法显示了 `USING EXTERNAL FUNCTION` 子句，该子句指定了机器学习（ML）与 Athena 相结合的函数。

```
USING EXTERNAL FUNCTION ml_function_name (variable1 data_type[, variable2 data_type][,...])
RETURNS data_type 
SAGEMAKER 'sagemaker_endpoint'
SELECT ml_function_name()
```

## 参数
<a name="udf-parameters"></a>

**USING EXTERNAL FUNCTION *ml\$1function\$1name* (*variable1**data\$1type*[, *variable2**data\$1type*][,...])**  
*ml\$1function\$1name* 定义函数名称，可以在后续查询子句中使用该函数名称。每个 *variable data\$1type* 都指定一个命名变量，且其相应的数据类型应可为 SageMaker AI 模型接受为输入。指定的数据类型必须是支持的 Athena 数据类型。

**RETURNS *data\$1type***  
*data\$1type* 指定作为 SageMaker AI 模型的输出由 *ml\$1function\$1name* 返回到查询的 SQL 数据类型。

**SAGEMAKER '*sagemaker\$1endpoint*'**  
*sagemaker\$1endpoint* 指定 SageMaker AI 模型的端点。

**SELECT [...]*ml\$1function\$1name*(*expression*) [...]**  
将值传递给函数变量和 SageMaker AI 模型以返回结果的 SELECT 查询。*ml\$1function\$1name* 指定之前在查询中定义的函数，后跟进行计算以传递值的*表达式*。传递和返回的值必须与 `USING EXTERNAL FUNCTION` 子句中为函数指定的相应数据类型匹配。

## 示例
<a name="ml-examples"></a>

以下示例演示了使用机器学习（ML）与 Athena 结合的查询。

**Example**  

```
USING EXTERNAL FUNCTION predict_customer_registration(age INTEGER) 
    RETURNS DOUBLE
    SAGEMAKER 'xgboost-2019-09-20-04-49-29-303' 
SELECT predict_customer_registration(age) AS probability_of_enrolling, customer_id 
     FROM "sampledb"."ml_test_dataset" 
     WHERE predict_customer_registration(age) < 0.5;
```