

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

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

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

 Grafana 需要使用 IAM 授予的权限才能读取 Redshift 指标。您可以将这些权限附加到 IAM 角色，并利用 Grafana 的内置支持来担任这些角色。[AWS 托管策略： AmazonGrafanaRedshiftAccess](security-iam-awsmanpol.md#security-iam-awsmanpol-AmazonGrafanaRedshiftAccess) 这一节中定义了内置的 Amazon Grafana Redshift 访问策略。

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

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

宏


|  宏  |  说明  |  输出示例  | 
| --- | --- | --- | 
|  $\_\_timeEpoch(column)  |  $\_\_timeEpoch 将由表达式替换，以转换为 UNIX 时间戳并将列重命名为时间  |  UNIX\_TIMESTAMP(dateColumn) as "time"  | 
|  $\_\_timeFilter(column)  |  $\_\_timeFilter 创建根据面板的时间范围筛选数据（使用column）的条件  |  time BETWEEN '2017-07-18T11:15:52Z' AND '2017-07-18T11:15:52Z'  | 
|  $\_\_timeFrom()  |  $\_\_timeFrom 输出面板范围的当前开始时间，并加上引号  | '2017-07-18T11:15:52Z' | 
|  $\_\_timeTo()  |  $\_\_timeTo 输出面板范围的当前结束时间，并加上引号  | '2017-07-18T11:15:52Z' | 
|  $\_\_timeGroup(column, '1m')  |  $\_\_timeGroup 对时间戳进行分组，以便图表上的每个周期只有 1 个点  | floor(extract(epoch from time)/60)\*60 AS "time" | 
|  $\_\_schema  |  $\_\_schema  使用选定的架构  | public | 
|  $\_\_table  |   $\_\_table 从给定的 $\_\_schema 输出一个表（默认情况下它使用公共架构）  | sales | 
|  $\_\_column  |  $\_\_column 从当前 $\_\_table 输出列  | date  | 
|  $\_\_unixEpochFilter(column)  |  使用指定列名将 $\_\_unixEpochFilter 替换为时间范围筛选器，其中时间表示为 Unix 时间戳  |   column >= 1624406400 AND column <= 1624410000  | 
|  $\_\_unixEpochGroup(column)  |  $\_\_unixEpochGroup 与 $\_\_timeGroup 相同，但这仅针对存储为 Unix 时间戳的时间  | floor(time/60)\*60 AS "time" | 

**可视化**

Redshift 中的大多数查询最好用表可视化来表示。任何查询都将在表中显示数据。如果某个内容可以被查询到，那么就可以将其放入表中。

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

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

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

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

要绘制更合理的图表，请确保使用 `$__timeFilter` 和 `$__timeGroup` 宏。

**时间序列查询示例：**

```
SELECT
  avg(execution_time) AS average_execution_time,
  $__timeGroup(start_time, 'hour'),
  query_type
FROM
  account_usage.query_history
WHERE
  $__timeFilter(start_time)
group by
  query_type,start_time
order by
  start_time,query_type ASC;
```

**填充方式**

Grafana 还会使用一些默认值自动完成没有值的帧。要配置此值，请在查询编辑器中更改**填充值**。

**检查查询**

由于 Grafana 支持 Redshift 不支持的宏，因此可以在查询检查器中看到完全呈现的查询（可以直接复制并粘贴到 Redshift 中）。要查看完整的插值查询，请选择**查询检测器**菜单，**查询**选项卡上会显示完整的查询。

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

有关如何添加新的 Redshift 查询变量的详细信息，请参阅[添加查询变量](variables-types.md#add-a-query-variable)。使用您的 Redshift 数据来源作为可用查询的数据来源。

从 Amazon Redshift 表中查询的任何值都可以用作变量。请务必避免选择太多值，因为这可能会导致性能问题。

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

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

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

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

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

下表代表的是呈现注释时考虑的列的值：


|  Name  |  说明  | 
| --- | --- | 
|  Time  |  日期或时间字段的名称。可以是具有原生 SQL 日期或时间数据类型或纪元值的列。 | 
|  Timeend  |  结束日期或时间字段的可选名称。可以是具有原生 SQL 日期或时间数据类型或纪元值的列。 | 
|  Text  |  事件描述字段。 | 
|  Tags  |  用于事件标签的可选字段名称，显示为以逗号分隔的字符串。 | 