

# 将机器学习（ML）与 Amazon Athena 结合使用
<a name="querying-mlmodel"></a>

通过将机器学习（ML）与 Amazon Athena 结合使用，您可以借助 Athena 编写将使用 Amazon SageMaker AI 运行机器学习（ML）推理的 SQL 语句。此功能简化了对 ML 模型的访问以进行数据分析，无需使用复杂的编程方法来运行推理。

要将机器学习（ML）与 Athena 结合使用，您可以使用 `USING EXTERNAL FUNCTION` 子句定义将机器学习（ML）与 Athena 结合的函数。该函数指向要使用的 SageMaker AI 模型端点，并指定要传递给模型的变量名称和数据类型。查询中的后续子句引用该函数以将值传递给模型。模型根据查询传递的值运行推理，然后返回推理结果。有关 SageMaker AI 以及 SageMaker AI 端点工作原理的信息，请参阅 [Amazon SageMaker AI 开发人员指南](https://docs.aws.amazon.com/sagemaker/latest/dg/)。

有关将 ML 与 Athena 和 SageMaker AI 推理结果结合使用来检测结果集中异常值的示例，请参阅 AWS 大数据博客文章：[Detecting anomalous values by invoking the Amazon Athena machine learning inference function](https://aws.amazon.com/blogs/big-data/detecting-anomalous-values-by-invoking-the-amazon-athena-machine-learning-inference-function/)。

## 注意事项和限制
<a name="considerations-and-limitations"></a>
+ **可用区域** – Athena ML 功能已在支持 Athena 引擎版本 2 的 AWS 区域开放。
+ **SageMaker AI 模型端点必须接受并返回 `text/csv`** – 有关数据格式的更多信息，请参阅《Amazon SageMaker 开发人员指南》中的 [Common data formats for inference](https://docs.aws.amazon.com/sagemaker/latest/dg/cdf-inference.html)**。
+ **Athena 不发送 CSV 标头** – 如果您的 SageMaker AI 端点是 `text/csv`，则您的输入处理程序不应假设输入的第一行是 CSV 标头。由于 Athena 不发送 CSV 标头，因此返回给 Athena 的输出将比 Athena 预期的少一行，从而导致错误。
+ **SageMaker AI 端点扩展** – 确保引用的 SageMaker AI 模型端点已充分纵向扩展，以便 Athena 调用该端点。有关更多信息，请参阅《Amazon SageMaker AI 开发人员指南》中的 [Automatically scale SageMaker AI models](https://docs.aws.amazon.com/sagemaker/latest/dg/endpoint-auto-scaling.html)** 和《Amazon SageMaker AI API 参考》中的 [CreateEndpointConfig](https://docs.aws.amazon.com/sagemaker/latest/dg/API_CreateEndpointConfig.html)**。
+ **IAM 权限** – 要运行指定将 ML 与 Athena 相结合的函数的查询，必须允许运行该查询的 IAM 主体为引用的 SageMaker AI 模型端点执行 `sagemaker:InvokeEndpoint` 操作。有关更多信息，请参阅 [允许使用 Athena 访问机器学习](machine-learning-iam-access.md)。
+ **机器学习与 Athena 相结合的函数不能直接在 `GROUP BY` 子句中使用**

**Topics**
+ [注意事项和限制](#considerations-and-limitations)
+ [将机器学习（ML）与 Athena 结合使用的语法](ml-syntax.md)
+ [请参阅客户使用示例](ml-videos.md)

# 将机器学习（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;
```

# 请参阅客户使用示例
<a name="ml-videos"></a>

以下视频使用了机器学习（ML）与 Amazon Athena 相结合函数的预览版，展示了您可以将 Athena 与 SageMaker AI 结合使用的方式。

## 预测客户流失
<a name="ml-videos-predict-churn"></a>

以下视频展示了如何将 Athena 与 Amazon SageMaker AI 的机器学习功能相结合，从而预测客户流失情况。

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/CUHbSpekRVg/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/CUHbSpekRVg)


## 检测僵尸网络
<a name="ml-videos-detect-botnets"></a>

以下视频展示了一家公司如何使用 Amazon Athena 和 Amazon SageMaker AI 来检测僵尸网络。

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/0dUv-jCt2aw/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/0dUv-jCt2aw)
