使用 CloudWatch 事件监控 Athena 查询 - Amazon Athena
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

使用 CloudWatch 事件监控 Athena 查询

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

在为 Athena 创建事件规则之前,您应该先执行以下操作:

注意

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

Athena 事件格式

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

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

Athena 查询状态更改事件

以下是 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" } }

输出属性

JSON 输出包括以下属性。

Property Description
versionId 详细对象的架构的版本号。
currentState 事件发生时查询转换到的状态。
previousState 事件发生时查询转换前的状态。
statementType 运行的查询语句的类型。
queryExecutionId 运行的查询的唯一标识符。
workgroupName 在其中运行查询的工作组的名称。
sequenceNumber 单调增加数字,允许重复数据消除和订购涉及RAN的单个查询的传入事件。当针对同一个状态转换发布了重复的事件时,sequenceNumber 值相同。当查询多次经历状态转换(例如查询遇到极少发生的重新入队)时,您可以使用 sequenceNumber 对具有相同 currentStatepreviousState 值的事件进行排序。

Example

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

将 Athena 事件发布到 Amazon SNS 主题

  1. 为您的 Amazon SNS 主题创建目标。向 CloudWatch Events 服务委托人授予 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" }
  2. 使用 AWS CLI events put-rule 命令为 Athena 事件创建规则,如以下示例所示。

    aws events put-rule --name {ruleName} --event-pattern '{"source": ["aws.athena"]}'
  3. 使用 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
  4. 查询 Athena 并观察所调用的目标。您应该收到来自 Amazon SNS 主题的对应电子邮件。