

# 使用 CloudWatch 和 EventBridge 监控查询并控制成本
<a name="workgroups-control-limits"></a>

通过使用工作组，您可以为每个查询或工作组设置数据使用控制限制，在超出这些限制时发出警报，并将查询指标发布到 CloudWatch。

在每个工作组中，您可以执行以下操作：
+ 为每个查询和每个工作组配置**数据使用控制**，并建立在查询超出阈值时将采取的操作。
+ 查看和分析查询指标，并将它们发布到 CloudWatch。如果在控制台中创建工作组，那么将为您选中将指标发布到 CloudWatch 这一设置。如果使用 API 操作，那么必须[启用发布指标](athena-cloudwatch-metrics-enable.md)。发布指标时，它们将显示在 **Workgroups**（工作组）面板的 **Metrics**（指标）选项卡中。默认情况下，将为主工作组禁用指标。

## 视频
<a name="athena-cloudwatch-metrics-video"></a>

以下视频演示了如何在 CloudWatch 中创建自定义控制面板并设置指标告警和触发器。您可以从 Athena 控制台直接使用预先填充的控制面板来使用这些查询指标。

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


**Topics**
+ [视频](#athena-cloudwatch-metrics-video)
+ [启用查询指标](athena-cloudwatch-metrics-enable.md)
+ [使用 CloudWatch 监控查询指标](query-metrics-viewing.md)
+ [使用 CloudWatch 监控使用情况指标](monitoring-athena-usage-metrics.md)
+ [使用 EventBridge 监控查询事件](athena-events.md)
+ [配置数据使用情况控制](workgroups-setting-control-limits-cloudwatch.md)

# 启用 Athena 中的 CloudWatch 查询指标
<a name="athena-cloudwatch-metrics-enable"></a>

在控制台中创建工作组时，默认情况下将选中将查询指标发布到 CloudWatch 这一设置。

**在 Athena 控制台中为工作组启用或禁用查询指标**

1. 从 [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home) 打开 Athena 控制台。

1. 如果控制台导航窗格不可见，请选择左侧的扩展菜单。  
![\[选择扩展菜单。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/nav-pane-expansion.png)

1. 在导航窗格中，选择 **Workgroups**（工作组）。

1. 选择要修改的工作组链接。

1. 在工作组的详细信息页面上，选择 **Edit**（编辑）。

1. 在**设置**部分中，选择或清除**将查询指标发布到 AWS CloudWatch**。

如果您使用 API 操作、命令行界面或带 JDBC 驱动程序的客户端应用程序来创建工作组，要启用查询指标发布，请在 [WorkGroupConfiguration](https://docs.aws.amazon.com/athena/latest/APIReference/API_WorkGroupConfiguration.html) 中将 `PublishCloudWatchMetricsEnabled` 设置为 `true`。以下示例仅显示指标配置，省略了其他配置：

```
"WorkGroupConfiguration": { 
      "PublishCloudWatchMetricsEnabled": "true"
     ....
     }
```

# 使用 CloudWatch 监控 Athena 查询指标
<a name="query-metrics-viewing"></a>

如果选择 [publish query metrics to CloudWatch](athena-cloudwatch-metrics-enable.md)（将查询指标发布到 CloudWatch）选项，Athena 会将与查询相关的指标发布到 Amazon CloudWatch。您可以创建自定义控制面板，对 CloudWatch 中的指标设置警报和触发器，或从 Athena 控制台直接使用预先填充的控制面板。

为工作组中的查询启用查询指标时，这些指标将显示在 **Workgroups**（工作组）面板中的 **Metrics**（指标）选项卡，用于 Athena 控制台中的每个工作组。

Athena 会将以下指标发布到 CloudWatch 控制台：
+ `DPUAllocated` – 在容量预留中预置的用于运行查询的 DPU（数据处理单元）总数。
+ `DPUConsumed` – 在预留的给定时间内，处于 `RUNNING` 状态的查询主动消耗的 DPU 数量。只有当工作组与容量预留关联并且包括与预留关联的所有工作组时，才会发出指标。
+ `DPUCount` – 查询消耗的最大 DPU 数量，仅在查询完成时发布一次。
+ `EngineExecutionTime` – 运行查询所耗费的毫秒数。
+ `ProcessedBytes` – Athena 为每个 DML 查询扫描的字节数。
+ `QueryPlanningTime` – Athena 计划查询处理流程所耗费的毫秒数。
+ `QueryQueueTime` – 查询在查询队列中等待资源所耗费的毫秒数。
+ `ServicePreProcessingTime` – 在将查询提交给查询引擎之前，Athena 用于预处理查询的毫秒数。
+ `ServiceProcessingTime` – 查询引擎执行完查询后，Athena 处理查询结果所耗费的毫秒数。
+ `TotalExecutionTime` – Athena 运行 DDL 或 DML 查询所耗费的毫秒数。

有关更完整的说明，请参阅本文档后面的 [Athena 的 CloudWatch 指标与维度列表](#athena-cloudwatch-metrics-table)。

这些指标具有以下维度：
+ `CapacityReservation` – 用于执行查询的容量预留的名称（如果适用）。
+ `QueryState`：`SUCCEEDED`、`FAILED` 或 `CANCELED`
+ `QueryType`：`DML`、`DDL` 或 `UTILITY`
+ `WorkGroup` – 工作组的名称

Athena 会将以下指标发布到 `AmazonAthenaForApacheSpark` 命名空间下的 CloudWatch 控制台：
+ `DPUCount` – 会话期间为执行计算而使用的 DPU 数量。

该指标具有以下维度：
+ `SessionId` – 提交计算的会话 ID。
+ `WorkGroup` – 工作组名称。

有关更多信息，请参阅本主题后面的 [Athena 的 CloudWatch 指标与维度列表](#athena-cloudwatch-metrics-table)。有关 Athena 使用情况指标的信息，请参阅 [使用 CloudWatch 监控 Athena 使用情况指标](monitoring-athena-usage-metrics.md)。

您可以在 Athena 控制台或 CloudWatch 控制台中查看查询指标。

## 在 Athena 控制台中查看查询指标
<a name="query-metrics-viewing-athena-console"></a>

**在 Athena 控制台中查看工作组的查询指标**

1. 从 [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home) 打开 Athena 控制台。

1. 如果控制台导航窗格不可见，请选择左侧的扩展菜单。  
![\[选择扩展菜单。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/nav-pane-expansion.png)

1. 在导航窗格中，选择 **Workgroups**（工作组）。

1. 从列表中选择所需的工作组，然后选择 **Metrics**（指标）选项卡。

   此时将显示指标控制面板。
**注意**  
如果您最近刚为工作组启用了指标和/或没有最近的查询活动，则控制面板上的图形可能为空。根据您在下一步中指定的间隔从 CloudWatch 检索查询活动。

1. 在 **Metrics**（指标）部分中，选择 Athena 应该用于从 CloudWatch 中提取查询指标的指标间隔，或指定自定义间隔。  
![\[在 Athena 控制台中为工作组指定指标检索间隔。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/wg-custom-interval.png)

1. 要刷新显示的指标，请选择刷新图标。  
![\[选择刷新图标。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/wg-refresh-metrics.png)

1. 单击刷新图标旁边的箭头，选择指标显示的更新频率。  
![\[为 Athena 控制台中的工作组指标显示选择刷新间隔。\]](http://docs.aws.amazon.com/zh_cn/athena/latest/ug/images/wg-choose-refresh-interval.png)

## 在 CloudWatch 控制台中查看查询指标
<a name="query-metrics-viewing-cw-console"></a>

**要使用 Amazon CloudWatch 控制台查看指标**

1. 通过 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 打开 CloudWatch 控制台。

1. 在导航窗格中，依次选择 **Metrics**（指标）、**All metrics**（所有指标）。

1. 选择 **AWS/Athena** 命名空间。

## 使用 AWS CLI 查看查询指标
<a name="query-metrics-viewing-cli"></a>

**使用 AWS CLI 查看指标**
+ 请执行以下操作之一：
  + 要列出 Athena 的指标，请打开命令提示符，然后使用以下命令：

    ```
    aws cloudwatch list-metrics --namespace "AWS/Athena"
    ```
  + 要列出所有可用的指标，请使用以下命令：

    ```
    aws cloudwatch list-metrics"
    ```

## Athena 的 CloudWatch 指标与维度列表
<a name="athena-cloudwatch-metrics-table"></a>

如果您在 Athena 中启用了 CloudWatch 指标，则它会按工作组将以下指标发送到 CloudWatch。以下指标使用 `AWS/Athena` 命名空间。


| 指标名称 | 说明 | 
| --- | --- | 
| DPUAllocated |  在容量预留中预置的用于运行查询的 DPU（数据处理单元）总数。  | 
| DPUConsumed | 在预留的给定时间内，处于 RUNNING 状态的查询主动消耗的 DPU 数量。只有当工作组与容量预留关联并且包括与预留关联的所有工作组时，才会发出此指标。如果将工作组从一个预留转移到另一个预留，则指标将包含从该工作组属于第一个预留起的数据。有关容量预留的更多信息，请参阅[管理查询处理容量](capacity-management.md)。 | 
| DPUCount | 查询消耗的最大 DPU 数量，仅在查询完成时发布一次。只有工作组附加到了容量预留，才会发出此指标。 | 
| EngineExecutionTime |  运行查询所花费的毫秒数。  | 
| ProcessedBytes |  Athena 为每个 DML 查询扫描的字节数。对于已取消的查询（由用户取消，或者因为达到限制而自动取消），此指标包含在取消时间之前扫描的数据量。对于 DDL 或 CTAS 查询，不会报告此指标。  | 
| QueryPlanningTime | Athena 计划查询处理流程所花费的毫秒数。这包括从数据来源检索表分区所花费的时间。请注意，由于查询引擎执行查询计划，因此查询计划时间是 EngineExecutionTime 的子集。 | 
| QueryQueueTime | 查询在查询队列中等待资源所花的毫秒数。请注意，如果发生临时错误，则可以自动将查询添加回队列。 | 
| ServicePreProcessingTime | 在将查询提交给查询引擎之前，Athena 用于预处理查询的毫秒数。 | 
| ServiceProcessingTime | 查询引擎执行完查询后，Athena 处理查询结果所耗费的毫秒数。 | 
| TotalExecutionTime | Athena 运行 DDL 或 DML 查询所花费的毫秒数。TotalExecutionTime 包括 QueryQueueTime、 QueryPlanningTime、EngineExecutionTime 和 ServiceProcessingTime。 | 

Athena 的指标具有以下维度。


| 维度 | 说明 | 
| --- | --- | 
| CapacityReservation |  用于执行查询的容量预留的名称（如适用）。如果不使用容量预留，此维度不会返回任何数据。  | 
| QueryState |  查询状态。 有效统计数据：SUCCEEDED（成功）、FAILED（失败）或 CANCELED（已取消）。  | 
| QueryType |  查询类型。 有效统计数据：`DDL`、`DML` 或 `UTILITY`。运行的查询语句的类型。`DDL` 表示 DDL（数据定义语言）查询语句。`DML` 表示 DML（数据操作语言）查询语句，例如 `CREATE TABLE AS SELECT`。`UTILITY` 表示 DDL 和 DML 以外的查询语句，例如 `SHOW CREATE TABLE` 或 `DESCRIBE TABLE`。  | 
| 工作组 |  工作组的名称。  | 

# 使用 CloudWatch 监控 Athena 使用情况指标
<a name="monitoring-athena-usage-metrics"></a>

您可以使用 CloudWatch 用量指标在 CloudWatch 图表和控制面板上显示当前服务使用情况，以展示您的账户对资源的使用情况。

对于 Athena，用量可用性指标对应于 Athena 的 AWS 服务 配额。您可以配置警报，以在用量接近服务配额时向您发出警报。有关 Athena 服务配额的更多信息，请参阅 [服务配额](service-limits.md)。有关 AWS 用量指标的更多信息，请参阅《*Amazon CloudWatch 用户指南*》中的 [AWS 用量指标](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Service-Quota-Integration.html)。

Athena 在 `AWS/Usage` 命名空间中发布以下指标。


|  指标名称  |  说明  | 
| --- | --- | 
|  `ResourceCount`  |  每个账户每个 AWS 区域 的所有已排队和正在执行的查询的总和，按查询类型（DML 或 DDL）分隔。最大值是此指标唯一有用的统计数据。 此指标每分钟定期发布。如果您没有运行任何查询，指标不会报告任何内容（甚至连 0 也不报告）。只有在获取指标时正在运行活动查询时才会发布该指标。  | 

以下维度用于优化由 Athena 发布的用量指标。


|  维度  |  说明  | 
| --- | --- | 
|  `Service`  |  包含该资源的 AWS 服务 的名称。对于 Athena，此维度的值为 `Athena`。  | 
|  `Resource`  |  正在运行的资源的类型。Athena 查询用量的资源值为 `ActiveQueryCount`。  | 
|  `Type`  |  正在报告的实体的类型。目前，Athena 用量指标的唯一有效值为 `Resource`。  | 
|  `Class`  |  所跟踪的资源的类。对于 Athena，`Class` 可以是 `DML` 或 `DDL`。  | 

## 在 CloudWatch 控制台中查看 Athena 资源使用情况指标
<a name="monitoring-athena-usage-metrics-cw-console"></a>

您可以使用 CloudWatch 控制台查看 Athena 用量指标图表，并配置告警以便在您的用量接近服务配额时提醒您。

**查看 Athena 资源用量指标**

1. 通过 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 打开 CloudWatch 控制台。

1. 在导航窗格中，依次选择 **Metrics**（指标）、**All metrics**（所有指标）。

1. 选择**使用情况**，然后选择**按 AWS 资源**。

   这将显示服务配额用量指标的列表。

1. 选中 **Athena** 和 **ActiveQueryCount** 旁边的复选框。

1. 选择**绘成图表的指标**选项卡。

   以上图表显示 AWS 资源的当前用量。

要了解如何向图表添加服务限额，以及设置警报以在接近服务限额时向您发送通知，请参阅《Amazon CloudWatch 用户指南》**中的 [可视化服务限额并设置警报](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Quotas-Visualize-Alarms.html)。有关设置每个工作组的用量限制的信息，请参阅 [配置每个查询和每个工作组的数据使用情况控制](workgroups-setting-control-limits-cloudwatch.md)。

# 使用 EventBridge 监控 Athena 查询事件
<a name="athena-events"></a>

您可以将 Amazon Athena 与 Amazon EventBridge 结合使用来接收有关查询状态的实时通知。当您提交的查询转换了状态时，Athena 将事件发布到 EventBridge，其中包含有关该查询状态转换的信息。您可以针对感兴趣的事件编写简单规则，并在事件匹配规则时执行自动化操作。例如，您可以创建在查询到达终端状态时调用 AWS Lambda 函数的规则。尽最大努力发出事件。

在为 Athena 创建事件规则之前，您应该先执行以下操作：
+ 熟悉 EventBridge 中的事件、规则和目标。有关更多信息，请参阅[什么是 Amazon EventBridge？](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) 有关如何设置规则的更多信息，请参阅 [Getting started with Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-get-started.html)。
+ 创建要在您的事件规则中使用的目标。

**注意**  
Athena 目前提供了一种事件类型，即 Athena 查询状态更改，但可能会添加其他事件类型和详细信息。如果您以编程方式对事件 JSON 数据反序列化，则在添加了其他属性时，请确保应用程序已准备好处理未知属性。

## Athena 事件格式
<a name="athena-events-pattern"></a>

以下是 Amazon Athena 事件的基本模式。

```
{
    "source":[
        "aws.athena"
    ],
    "detail-type":[
        "Athena Query State Change"
    ],
    "detail":{
        "currentState":[
            "SUCCEEDED"
        ]
    }
}
```

## Athena 查询状态更改事件
<a name="athena-events-athena-query-state-change"></a>

以下示例显示 `currentState` 值为 `SUCCEEDED` 的 Athena 查询状态更改事件。

```
{
    "version":"0",
    "id":"abcdef00-1234-5678-9abc-def012345678",
    "detail-type":"Athena Query State Change",
    "source":"aws.athena",
    "account":"123456789012",
    "time":"2019-10-06T09:30:10Z",
    "region":"us-east-1",
    "resources":[

    ],
    "detail":{
        "versionId":"0",
        "currentState":"SUCCEEDED",
        "previousState":"RUNNING",
        "statementType":"DDL",
        "queryExecutionId":"01234567-0123-0123-0123-012345678901",
        "workgroupName":"primary",
        "sequenceNumber":"3"
    }
}
```

以下示例显示 `currentState` 值为 `FAILED` 的 Athena 查询状态更改事件。`athenaError` 数据块仅当 `currentState` 为 `FAILED` 时才会出现。有关 `errorCategory` 和 `errorType` 的值的信息，请参阅 [Athena 错误目录](error-reference.md)。

```
{
    "version":"0",
    "id":"abcdef00-1234-5678-9abc-def012345678",
    "detail-type":"Athena Query State Change",
    "source":"aws.athena",
    "account":"123456789012",
    "time":"2019-10-06T09:30:10Z",
    "region":"us-east-1",
    "resources":[ 
    ],
    "detail":{
        "athenaError": {
            "errorCategory": 2.0, //Value depends on nature of exception
            "errorType": 1306.0, //Type depends on nature of exception
            "errorMessage": "Amazon S3 bucket not found", //Message depends on nature of exception
            "retryable":false //Retryable value depends on nature of exception
        },
        "versionId":"0",
        "currentState": "FAILED",
        "previousState": "RUNNING",
        "statementType":"DML",
        "queryExecutionId":"01234567-0123-0123-0123-012345678901",
        "workgroupName":"primary",
        "sequenceNumber":"3"
    }
}
```

### 输出属性
<a name="athena-events-query-state-change-output-properties"></a>

JSON 输出包括以下属性。


****  

| 属性 | 说明 | 
| --- | --- | 
| athenaError | 仅当 currentState 为 FAILED 时才会出现。包含有关所发生错误的信息，例如错误类别、错误类型、错误消息以及是否可以重试导致错误的操作。每个字段的值取决于错误性质。有关 errorCategory 和 errorType 的值的信息，请参阅 [Athena 错误目录](error-reference.md)。 | 
| versionId | 详细对象的架构的版本号。 | 
| currentState | 事件发生时查询转换到的状态。 | 
| previousState | 事件发生时查询转换前的状态。 | 
| statementType | 运行的查询语句的类型。 | 
| queryExecutionId | 所运行查询的唯一标识符。 | 
| workgroupName | 在其中运行查询的工作组的名称。 | 
| sequenceNumber | 一个单调递增的数字，可用于对涉及单个查询运行的传入事件进行重复数据删除和排序。当针对同一个状态转换发布了重复的事件时，sequenceNumber 值相同。当查询多次经历状态转换（例如查询遇到极少发生的重新入队）时，您可以使用 sequenceNumber 对具有相同 currentState 和 previousState 值的事件进行排序。 | 

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

以下示例将事件发布到您订阅的 Amazon SNS 主题。查询 Athena 时，您会收到一封电子邮件。该示例假定 Amazon SNS 主题存在，并且您已订阅该主题。

**将 Athena 事件发布到 Amazon SNS 主题**

1. 为 Amazon SNS 主题创建目标。向 EventBridge 事件的服务主体授予 `events.amazonaws.com` 权限以发布到您的 Amazon SNS 主题，如下例所示。

   ```
   {
       "Effect":"Allow",
       "Principal":{
           "Service":"events.amazonaws.com"
       },
       "Action":"sns:Publish",
       "Resource":"arn:aws:sns:us-east-1:111111111111:your-sns-topic"
   }
   ```

1. 使用 AWS CLI `events put-rule` 命令为 Athena 事件创建规则，如以下示例所示。

   ```
   aws events put-rule --name {ruleName} --event-pattern '{"source": ["aws.athena"]}'
   ```

1. 使用 AWS CLI `events put-targets` 命令将 Amazon SNS 主题目标附加到规则，如以下示例所示。

   ```
   aws events put-targets --rule {ruleName} --targets Id=1,Arn=arn:aws:sns:us-east-1:111111111111:your-sns-topic
   ```

1. 查询 Athena 并观察所调用的目标。您应该收到来自 Amazon SNS 主题的对应电子邮件。

## 将 AWS 用户通知服务 和 Amazon Athena 搭配使用
<a name="monitoring-user-notifications"></a>

您可以使用 [AWS 用户通知服务](https://docs.aws.amazon.com/notifications/latest/userguide/what-is.html) 来设置交付渠道，以获得有关 Amazon Athena 事件的通知。当事件与指定的规则匹配时，会收到通知。您可以通过多个渠道接收事件通知，包括电子邮件、[聊天应用程序中的 Amazon Q 开发者版](https://docs.aws.amazon.com/chatbot/latest/adminguide/what-is.html)聊天通知或 [AWS Console Mobile Application](https://docs.aws.amazon.com/consolemobileapp/latest/userguide/what-is-consolemobileapp.html) 推送通知。您还可以在[控制台通知中心](https://console.aws.amazon.com/notifications/)查看通知。用户通知服务 支持聚合，这可以减少在具体事件期间收到的通知数量。

有关更多信息，请参阅 [AWS 用户通知服务 用户指南](https://docs.aws.amazon.com/notifications/latest/userguide/what-is.html)。**

# 配置每个查询和每个工作组的数据使用情况控制
<a name="workgroups-setting-control-limits-cloudwatch"></a>

 Athena 允许您设置两种类型的成本控制：每个查询限制和每个工作组限制。对于每个工作组，您可以设置一个每个查询限制和多个每个工作组限制。
+ **每个查询控制限制**用于指定扫描的每个查询的数据总量。如果工作组中运行的任何查询超出限制值，则该查询将取消。在工作组中您只能创建一个每个查询控制限制，该限制适用于工作组中运行的每个查询。如果您需要进行更改，可编辑限制。有关详细步骤，请参阅[创建每个查询数据使用控制](#configure-control-limit-per-query)。
+ **工作组范围内数据使用控制限制**用于指定在指定时间段内，针对该工作组中运行的所有查询扫描的数据总量。您可以创建多个每个工作组限制。通过工作组范围内查询限制，您可以对工作组中运行的查询所扫描的数据设置每小时或每日聚合的多个阈值。

  如果扫描的数据聚合量超出阈值，那么您可以将通知推送到 Amazon SNS 主题。要如此做，您需要在 Athena 控制台中配置 Amazon SNS 警报和操作，以便当达到限制值时通知管理员。有关详细步骤，请参阅[创建每个工作组数据使用控制](#configure-control-limit-per-workgroup)。您还可以从 CloudWatch 控制台，对 Athena 发布的任何指标创建告警和操作。例如，您可以对失败的查询次数设置警报。如果数量超出特定阈值，此警报可以触发向管理员发送电子邮件。如果超出限制值，操作将向指定用户发送 Amazon SNS 警报通知。

  您可以采取的其他操作：
  + 调用 Lambda 函数。有关更多信息，请参阅《*Amazon Simple Notification Service 开发人员指南*》中的[使用 Amazon SNS 通知调用 Lambda 函数](https://docs.aws.amazon.com/sns/latest/dg/sns-lambda-as-subscriber.html)。
  + 禁用工作组，以停止运行任何后续查询。要查看步骤，请参阅[启用或禁用工作组](workgroups-enabled-disabled.md)。

每个查询限制和每个工作组限制是相互独立的。只要超出任一限制，就会执行指定操作。如果两个或多个用户在同一工作组中同时运行查询，那么有可能每个查询未超出任何指定的限制，但扫描的数据总量超出了每个工作组的数据使用限制。在这种情况下，会向用户发送 Amazon SNS 告警。

## 创建每个查询的数据使用情况控制
<a name="create-a-per-query-data-usage-control"></a><a name="configure-control-limit-per-query"></a>

**创建每个查询数据使用控制**

每个查询控制限制用于指定扫描的每个查询的数据总量。如果工作组中运行的任何查询超出限制值，则该查询将取消。取消的查询将按照 [Amazon Athena 定价](https://aws.amazon.com/athena/pricing/)进行计费。
**注意**  
当查询被取消或失败时，Athena 可能已将部分结果写入 Amazon S3。在这种情况下，Athena 不会从存储结果的 Amazon S3 前缀中删除部分结果。您必须删除带有部分结果的 Amazon S3 前缀。Athena 使用 Amazon S3 分段上传来写入数据 Amazon S3。我们建议您设置存储桶生命周期策略，以便当查询失败时终止分段上传。有关更多信息，请参阅《Amazon Simple Storage Service 用户指南**》中的 [使用存储桶生命周期策略中止未完成的分段上传](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html#mpu-abort-incomplete-mpu-lifecycle-config)。
在某些情况下，Athena 可能会自动重试查询执行。在大多数情况下，这些查询能够成功完成，并将查询 ID 标记为 `Completed`。这些查询可能在初始尝试时写入了部分结果，并且可能会生成不完整的分段上传。

在工作组中您只能创建一个每个查询控制限制，该限制适用于工作组中运行的每个查询。如果您需要进行更改，可编辑限制。

1. 从 [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home) 打开 Athena 控制台。

1. 在导航窗格中，选择 **Workgroups**（工作组）。

1. 从列表中选择工作组的名称。

1. 在**执行控制**选项卡上，选择**编辑控件**。

1. 编辑**扫描数据限制**的值。
   + 指定一个介于 10MB（最小值）与 7EB（最大值）之间的值。
   + 从下拉列表中选择单位值（例如，**千字节 KB** 或 **艾字节 EB**）。
**注意**  
如果超出限制，默认操作为取消查询。此设置不可更改。

1. 选择**保存**立即应用您的更改。

## 创建或编辑每个工作组的数据使用情况提示
<a name="create-a-per-workgroup-data-usage-alert"></a><a name="configure-control-limit-per-workgroup"></a>

**创建或编辑每个工作组的数据使用提示**

当工作组中运行的查询在特定时间段内扫描指定数量的数据时，可以设置多个提示阈值。提示使用 Amazon CloudWatch 发出告警，并适用于工作组中的所有查询。达到阈值后，您可以让 Amazon SNS 向指定的用户发送电子邮件。达到阈值时，查询不会自动取消。

1. 从 [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home) 打开 Athena 控制台。

1. 如果控制台导航窗格不可见，请选择左侧的扩展菜单。

1. 在导航窗格中，选择 **Workgroups**（工作组）。

1. 从列表中选择工作组的名称。

1. 选择 **Edit**（编辑）以编辑工作组设置。

1. 向下滚动到并展开 **Workgroup data usage alerts - optional**（工作组数据使用提示 - 可选）。

1. 选择 **Add alert**（添加提示）。

1. 对于 **Data usage threshold configuration**（数据使用阈值配置），指定以下值：
   + 对于 **Data threshold**（数据阈值），指定数字，然后从下拉列表中选择单位值。
   + 对于 **Time period**（时间段），从下拉列表中选择时间段。
   + 对于 **SNS topic selection**（SNS 主题选择），从下拉列表中选择 Amazon SNS 主题。或者，选择 **Create SNS topic**（创建 SNS 主题）直接转至 [Amazon SNS 控制台](https://console.aws.amazon.com/sns/v2/home)，创建 Amazon SNS 主题，并为 Athena 账户中的用户之一设置该主题的订阅。有关更多信息，请参阅 *Amazon Simple Notification Service 开发人员指南*中的 [Amazon SNS 入门](https://docs.aws.amazon.com/sns/latest/dg/sns-getting-started.html)。

1. 如果正在创建新提示，则选择 **Add alert**（添加提示）；如果要保存现有的提示，则选择 **Save**（保存）。