

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 Athena 数据来源
<a name="Athena-using-the-data-source"></a>

## IAM 策略
<a name="Athena-policies"></a>

 Grafana 需要通过 IAM 授予权限才能读取 Athena 指标。您可以将这些权限附加到 IAM 角色，并利用 Grafana 的内置支持来担任这些角色。请注意，在将数据来源添加到 Grafana 之前，您需要为角色[配置所需的策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)。添加数据来源需要管理员或编辑者角色。[AWS 托管策略： AmazonGrafanaAthenaAccess](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonGrafanaAthenaAccess) 一节中定义了内置的 Amazon Grafana Athena 访问策略。

## 查询 Athena 数据
<a name="Athena-query"></a>

Athena 数据来源提供了标准的 SQL 查询编辑器。Amazon Managed Grafana 包含一些宏来帮助编写更复杂的时间序列查询。

宏


|  宏  |  说明  |  示例  |  输出示例  | 
| --- | --- | --- | --- | 
|  \$1\$1\$1dateFilter(column)  |  \$1\$1\$1dateFilter 创建了一个条件筛选器，根据面板的日期范围选择数据（使用 column）。 |  \$1\$1\$1date(my\$1date)  | my\$1date BETWEEN date '2017-07-18' AND date '2017-07-18' | 
|  \$1\$1\$1parseTime(column,format)  |  \$1\$1\$1parseTime 按给定的格式将 varchar 转换为时间戳。 |  \$1\$1\$1parseTime(eventtime, 'yyyy-MM-dd''T''HH:mm:ss''Z')  | parse\$1datetime(time,'yyyy-MM-dd''T''HH:mm:ss''Z') | 
|  \$1\$1\$1timeFilter(column,format)  |  \$1\$1\$1timeFilter 创建了一个条件，根据面板的时间范围筛选数据（使用 column）。第二个参数用于选择性地将列从 varchar 解析为具有特定格式的时间戳。 | \$1\$1\$1timeFilter(time, 'yyyy-MM-dd HH:mm:ss') | TIMESTAMP time BETWEEN TIMESTAMP '2017-07-18T11:15:52Z' AND TIMESTAMP '2017-07-18T11:15:52Z' | 
|  \$1\$1\$1timeFrom()  |  \$1\$1\$1timeFrom 输出面板时间范围的当前开始时间，并加上引号。 | \$1\$1\$1timeFrom() | TIMESTAMP '2017-07-18 11:15:52' | 
|  \$1\$1\$1timeTo()  |  \$1\$1\$1timeTo  输出面板时间范围的当前结束时间，并加上引号。 | \$1\$1\$1timeTo() | TIMESTAMP '2017-07-18 11:15:52' | 
|  \$1\$1\$1timeGroup(column, '1m', format)  |  \$1\$1\$1timeGroup  对时间戳进行分组，使得图表上的每个周期只有 1 个点。第三个参数用于选择性地将列从 varchar 解析为具有特定格式的时间戳。 | \$1\$1\$1timeGroup(time,'5m','yyyy-MM-dd''T''HH:mm:ss.SSSSSS''Z') | FROM\$1UNIXTIME(FLOOR(TO\$1UNIXTIME(parse\$1datetime(time,'yyyy-MM-dd''T''HH:mm:ss.SSSSSS''Z'))/300)\$1300) | 
|  \$1\$1\$1table  |   \$1\$1\$1table 返回在表选择器中选择的表。 | \$1\$1\$1table | my\$1table | 
|  \$1\$1\$1column  |  \$1\$1\$1column 返回在列选择器中选择的列（它需要一个表）。 | \$1\$1\$1column  | col1  | 

**可视化**

Athena 中的大多数查询都可以通过表可视化得到最好地展示。查询以表的形式显示返回数据。如果可以查询，则可以将结果显示为表。

此示例返回表可视化的结果：

```
SELECT {column_1}, {column_2} FROM {table};
```

**时间序列/图表可视化**

对于时间序列和图表可视化，您必须：
+ 选择 `date` 或 `datetime` 类型的列。`date` 列必须按升序排列（使用 `ORDER BY column ASC`）。
+ 还必须选择数字列。

**检查查询**

Amazon Managed Grafana 支持 Athena 不支持的宏，这意味着将查询直接复制并粘贴到 Athena 中可能无法运行。要查看可直接在 Athena 中运行的完整插值查询，请单击**查询检查器**按钮。完整的查询显示在**查询**选项卡下。

## 模板和变量
<a name="using-Athena-templates-variables"></a>

有关添加 Athena 查询变量的更多信息，请参阅 [添加查询变量](variables-types.md#add-a-query-variable)。使用 Athena 数据来源作为可用查询的数据来源。

从 Athena 表中查询的任何值都可用作变量。避免选择过多的值，因为这会导致性能问题。

创建变量后，您可以在 Athena 查询中通过使用 [变量语法](templates-and-variables.md#variable-syntax) 来使用它。有关变量的更多信息，请参阅 [模板和变量](templates-and-variables.md)。

## Annotations
<a name="using-Athena-annotations"></a>

使用 [Annotations](dashboard-annotations.md) 可以在图表上叠加丰富的事件信息。您可以通过选择面板添加注释，也可以使用**控制面板**菜单的**注释**视图，通过添加注释查询来添加注释。

自动添加注释的示例查询：

```
SELECT
  time as time,
  environment as tags,
  humidity as text
FROM
  tableName
WHERE
  $__dateFilter(time) and humidity > 95
```

下表为可用于呈现注释的列提供了说明：


|  Name  |  说明  | 
| --- | --- | 
|  Time  |  date/time 字段的名称。可以是具有本机 SQL date/time 数据类型或纪元值的列。 | 
|  Timeend  |  结束 date/time 字段的可选名称。可以是具有本机 SQL date/time 数据类型或纪元值的列。（Grafana v6.6\$1）  | 
|  Text  |  事件描述字段。 | 
|  Tags  |  用于事件标签的可选字段名称，显示为以逗号分隔的字符串。 | 

## 异步查询数据支持
<a name="athena-async-query"></a>

Amazon Managed Grafana 中的 Athena 查询以异步方式处理，以避免超时。异步查询使用单独的请求启动查询，然后检查查询进度，最后获取结果。这样可以避免长时间运行的查询发生超时。

## 查询结果重用
<a name="athena-query-reuse"></a>

可以重复使用之前查询的结果来提高查询性能。要启用查询重用，请在查询编辑器的**查询结果重用**部分启用它。必须为每个要重用查询的查询执行此操作。

**注意**  
此功能要求您的 Athena 实例使用引擎版本 3。有关详细信息，请参阅《Amazon Athena 用户指南》**中的[更改 Athena 引擎版本](https://docs.aws.amazon.com/athena/latest/ug/engine-versions-changing.html)。