

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息，请参阅[博客文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

# 使用 Amazon Redshift 编写查询
<a name="query-editor-v2-query-run"></a>

您可以在编辑器中输入查询，也可以从**查询**中列出并选择**运行**以选择已保存的查询。

默认情况下，设置**限制 100**，将结果限制为 100 行。您可以禁用此选项来返回较大的结果集。禁用此选项时，如要避免非常大型结果集，则可以在 SQL 语句中包含 LIMIT 选项。有关更多信息，请参阅《Amazon Redshift 数据库开发人员指南》**中的 [ORDER BY 子句](https://docs.aws.amazon.com/redshift/latest/dg/r_ORDER_BY_clause.html)。

要在结果区域中显示查询计划，请打开**解释**。对结果开启**解释图**，也可显示解释计划的图形表示。

选择**保存**，将查询保存到**查询**文件夹。

查询成功，将显示成功消息。如果查询返回信息，则结果将显示在**结果**部分。如果结果数超过显示区域，则数字将显示在结果区域的顶部。您可以选择数字来显示连续的结果页面。

您可以筛选和排序每一列的**结果**。如要在结果列标题中输入筛选条件，请将鼠标悬停在该列上便可查看筛选条件菜单（![\[Filter menu\]](http://docs.aws.amazon.com/zh_cn/redshift/latest/mgmt/images/menu.png)），您可以在此处输入筛选列的条件。

如果查询包含错误，则查询编辑器 v2 将在结果区域中显示错误消息。此消息提供有关如何更正查询的信息。

您可以使用结果区域中的上下文（右键单击）菜单导出或复制查询结果，如下所示：
+ 选择**复制到**，然后选择 **JSON** 或 **CSV**，以便将选定的行下载到文件中。
+ 选择**复制行**以便将选定的行复制到剪贴板。
+ 如选择**复制带标题的行**，以便将带有列标题的选定行复制到剪贴板。

还可以在结果区域中选择**导出**，然后选择 **JSON** 或 **CSV**，以便将整组行结果下载到文件中。结果集中的行数可能受到查询中**限制**选项或 SQL `limit` 子句限制。下载结果集的最大大小为 5 MB。

也可以使用快捷方式（Windows 上的 Ctrl\$1C 或 macOS 上的 Cmd\$1C）将数据从当前结果页面复制到剪贴板。如果未选择任何行，则具有焦点的单元格将复制到剪贴板。如果选择了行，则选定的行将复制到剪贴板。

要添加新的查询选项卡，请选择 ![\[New query tab\]](http://docs.aws.amazon.com/zh_cn/redshift/latest/mgmt/images/add-plus.png) 图标，然后选择**编辑器**，此编辑器将显示在查询选项卡所在行中。查询选项卡可以使用，也可以不使用 `Isolated session`。对于隔离会话，SQL 命令的结果（例如，在一个编辑器选项卡中创建临时表）在另一个编辑器选项卡中不可见。在查询编辑器 v2 中打开编辑器选项卡时，默认为隔离会话。

**运行查询**

1. 在查询区域中，执行以下任一操作：
   + 输入查询。
   + 粘贴您复制的查询。
   + 选择**查询**文件夹中，打开上下文菜单（右键单击）中的保存查询，然后选择**打开查询**。

1. 确认您为计划运行的 SQL 选择了正确的**集群**或**工作组**以及**数据库**值。

   最初，您可以在树视图中选择您的**集群**或**工作组**。还可以在树视图中选择您的**数据库**。

   您可以使用位于每个编辑器选项卡的**隔离会话**标题附近的下拉控件，更改每个编辑器选项卡中的**集群**或**工作组**以及**数据库**。

   对于每个编辑器选项卡，您可以选择是否以**隔离会话**运行 SQL。隔离会话与数据库有自己的连接。使用它来运行与其他查询编辑器会话隔离的 SQL。有关 连接的更多信息，请参阅 [打开查询编辑器 v2](query-editor-v2-open.md)。

1. 选择**运行**。

   将打开**结果**区域并显示查询结果。

**显示查询的解释计划**

1. 选择查询。

1. 启用**解释**。

   默认情况下，**解释图**也将启动。

1. 选择**运行**。

   运行查询，并在查询的**结果**区域中显示解释计划。

查询编辑器 v2 支持以下功能。
+ 您可以在一个查询选项卡中使用多个 SQL 语句创作查询。这些查询将连续运行，并为每个查询打开多个结果选项卡。
+ 您可以使用会话变量和临时表创作查询。
+ 您可以使用由 `${parameter}` 指定的可替换参数创作查询。您可以使用多个可替换参数创作 SQL 查询，并在 SQL 语句的多个位置使用相同的参数。

  当查询运行时，会显示一个用来输入参数值的窗口。每次运行查询时，都会显示窗口以输入参数值。

  有关示例，请参阅[示例：销售额大于特定参数](#query-editor-v2-example-sales-qtysold-greater-than-parameter)。
+ 自动对查询进行版本控制。您可以选择要运行的查询的早期版本。
+ 在继续工作流程之前，您无需等待查询完成。即使关闭查询编辑器，查询仍会继续运行。
+ 创作查询时，支持自动完成架构、表和列名称。

SQL 编辑器支持以下功能：
+ SQL 中使用的左方括号和右方括号具有匹配的颜色。编辑器中显示垂直线以帮助您匹配方括号。
+ 您可以折叠和展开 SQL 的各个部分。
+ 您可以在 SQL 中搜索和替换文本。
+ 您可以使用快捷键执行多个常见编辑任务。
+ SQL 错误会在编辑器中突出显示，以便于找到问题领域。

有关编辑器功能的演示，请观看以下视频。

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


## 查询示例
<a name="query-editor-v2-examples"></a>

在下方您可以找到可以运行的各种查询类型的描述。

许多此类查询中使用的数据来自 `tickit` 示例架构。有关加载示例 `tickit` 数据的更多信息，请参阅[将数据加载到数据库](query-editor-v2-loading.md)。有关 `tickit` 示例数据的更多信息，请参阅《Amazon Redshift 数据库开发人员指南》**中的[示例数据库](https://docs.aws.amazon.com/redshift/latest/dg/c_sampledb.html)。

运行这些示例查询时，请确认在编辑器中选择了正确的数据库，例如 `sample_data_dev`。

**Topics**
+ [示例：设置会话变量](#query-editor-v2-example-set-session-variable)
+ [示例：按总销售额排列的顶事件](#query-editor-v2-example-top-event-sales)
+ [示例：销售额大于特定参数](#query-editor-v2-example-sales-qtysold-greater-than-parameter)
+ [示例：创建一个临时表](#query-editor-v2-example-create-temporary-table)
+ [示例：从临时表中选择](#query-editor-v2-example-select-from-temporary-table)

### 示例：设置会话变量
<a name="query-editor-v2-example-set-session-variable"></a>

以下命令将 `search_path` 服务器配置参数设置为会话的*公有*参数。有关更多信息，请参阅《Amazon Redshift 数据库开发人员指南》**中的 [SET](https://docs.aws.amazon.com/redshift/latest/dg/r_SET.html) 和 [search\$1path](https://docs.aws.amazon.com/redshift/latest/dg/r_search_path.html)。

```
set search_path to public;
```

### 示例：按总销售额排列的顶事件
<a name="query-editor-v2-example-top-event-sales"></a>

以下查询查找销售额最多的事件。

```
select eventname, count(salesid) totalorders, sum(pricepaid) totalsales
from sales, event
where sales.eventid=event.eventid
group by eventname
order by 3;
```

以下是结果的部分清单。

```
eventname           totalorders       totalsales
White Christmas         20              9352
Joshua Radin            38             23469
Beach Boys              58             30383
Linda Ronstadt          56             35043
Rascal Flatts           76             38214
Billy Idol              67             40101
Stephenie Meyer         72             41509
Indigo Girls            57             45399
...
```

### 示例：销售额大于特定参数
<a name="query-editor-v2-example-sales-qtysold-greater-than-parameter"></a>

以下查询查找销售数量大于 `${numberoforders}` 指定参数的销售额。当参数值为 `7` 时，结果是 60 行。运行查询时，查询编辑器 v2 会显示**运行查询表**窗口来收集 SQL 语句中参数值。

```
select salesid, qtysold
from sales 
where qtysold > ${numberoforders}
order by 2;
```

以下是结果的部分清单。

```
salesid	qtysold
20005	8
21279	8
130232	8
42737	8
74681	8
67103	8
105533	8
91620	8
121552	8
...
```

### 示例：创建一个临时表
<a name="query-editor-v2-example-create-temporary-table"></a>

通过*销售*和*事件*表，以下语句创建临时表 *eventsalestemp*。

```
create temporary table eventsalestemp as
select eventname, count(salesid) totalorders, sum(pricepaid) totalsales
from sales, event
where sales.eventid=event.eventid
group by eventname;
```

### 示例：从临时表中选择
<a name="query-editor-v2-example-select-from-temporary-table"></a>

按总订单排序，以下语句从临时表 *eventsalestemp* 中选择事件、订单总数和总销售额。

```
select eventname,  totalorders,  totalsales
from eventsalestemp
order by 2;
```

以下是部分结果列表。

```
eventname          totalorders   totalsales
White Christmas        20          9352
Joshua Radin           38         23469
Martina McBride        50         52932
Linda Ronstadt         56         35043
Indigo Girls           57         45399
Beach Boys             58         30383
...
```