

 从补丁 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/)。

# 教程：对 TICKIT 数据使用 Amazon Q 生成式 SQL 功能
<a name="query-editor-v2-generative-ai-example"></a>

要编写有效的提示来生成 SQL，您必须了解自己的数据库架构和数据。TICKIT 数据包含七个表：两个事实表和五个维度表。样本数据包含 2008 年举办的娱乐活动的观众售票记录。有关 TICKIT 数据的更多信息，请参阅《Amazon Redshift 数据库开发人员指南》**中的[示例数据库](https://docs.aws.amazon.com/redshift/latest/dg/c_sampledb.html)。您可以通过各种方法将 TICKIT 数据加载到数据库中既可以使用 Amazon Redshift 控制台，也可以使用查询编辑器 v2。查询编辑器 v2 提供了将 TICKIT 数据加载到数据库 `sample_data_dev` 的方法。有关信息，请参阅[将数据加载到数据库](query-editor-v2-loading.md)。查询编辑器 v2 还提供了适用于 TICKIT 数据的示例提示。以下场景描述了与生成式 SQL 进行的对话，用以生成有关 TICKIT 样本数据的 SQL。在这个场景中，TICKIT 样本数据已在 Amazon Redshift 集群的 `dev` 数据库中创建。

**注意**  
这个例子用于说明对话过程。虽然您使用了相同的提示，但生成式 SQL 的响应并不一致。

**使用 Amazon Q 生成式 SQL 的示例对话**

1. 在**编辑器**中，连接到包含 TICKIT 样本数据的集群或工作组。

1. 创建一个空笔记本，然后选择 ![\[Generative SQL\]](http://docs.aws.amazon.com/zh_cn/redshift/latest/mgmt/images/qev2-amazon-q.png) 生成式 SQL 图标以打开聊天面板。

1. 输入以下提示，生成 SQL 来验证 `VENUE` 表中的记录数：

   ```
   How many venues are there?
   ```

   ```
   SELECT
     COUNT(*) AS num_venues
   FROM
     tickit.venue
   ```

   选择**添加到笔记本**，将两个单元格添加到打开的笔记本中。一个 Markdown 单元格中为“有多少个场馆？” 另一个单元格包含生成的 SQL。

   在 SQL 单元格中，选择**运行**以接收结果：

   ```
   count
   ------
   202
   ```

1. 要请求另一个版本的 SQL，请选择**重新生成 SQL**并会收到以下答案：

   ```
   SELECT
     venuestate,
     COUNT(*) AS num_venues
   FROM
     tickit.venue
   GROUP BY
     venuestate
   ```

   选择**添加到笔记本**，再添加两个单元格到打开的笔记本中。一个 Markdown 单元格中为“有多少个场馆？” 另一个单元格包含生成的 SQL。

   在 SQL 单元格中，选择**运行** 以接收结果，其中列出了各州的场馆数量：

   ```
   venuestate num_venues
   ----------------------
   MA         4	
   OH         8	
   MI         5	
   ...
   ```

1. 生成式 SQL 助手可以对您的要求做出推测。尽管数据库中没有小组件，但您仍然可以询问。在这种情况下，它会给出消息，说明无法生成 SQL。

   ```
   How many widgets are there?
   ```

   ```
   I was not able to generate any SQL
   ```

1. 随着对数据库的了解越来越多，您可以提出更具体的问题来生成 SQL。例如，您知道数据库中包含 2008 年几个月的销售数据。输入以下提示以生成 SQL，用于查找 2008 年 11 月的销量：

   ```
   How many sales were there in November 2008?
   ```

   ```
   SELECT
     COUNT(*) AS num_sales
   FROM
     tickit.sales s
     JOIN tickit.date d ON s.dateid = d.dateid
   WHERE
     d.month = 'November'
     AND d.year = 2008
   ```

   选择**添加到笔记本**，将两个单元格添加到打开的笔记本中。一个 Markdown 单元格中为“2008 年 11 月的销量是多少？” 另一个单元格包含生成的 SQL。

   在 SQL 单元格中，选择**运行**以接收结果：

   ```
   num_sales
   -----
   0
   ```

   您发现这不是所期望的结果。

1. 您注意到谓词 `date.month='November'` 要求在 DATE 表中使用月份名称的缩写来表示月份。将谓词更改为 `d.month='NOV'`，然后重新运行 SQL。

   ```
   SELECT
     COUNT(*)
   FROM
     sales
     JOIN date ON sales.dateid = date.dateid
   WHERE
     date.month = 'NOV'
     AND date.year = 2008
   ```

   在 SQL 单元格中，选择**运行**以获取新结果。

   ```
   count
   -----
   14261
   ```

1. 如果您提出的问题试图更改连接的数据库，则会返回一条警告消息以及所推荐的任何 SQL。输入以下提示以生成将数据插入表中的 SQL：

   ```
   Insert 1 into the venue table.
   ```

   ```
   INSERT
   ,
   UPDATE
     OR delete data
   FROM
     the database AS that could potentially change the data.Please provide a query that ONLY selects data
   ```

   ```
   I was not able to generate the correct SQL code. I generated SQL, but you'll have to edit it to work with your database.
   ```

   如果您选择**添加到笔记本**，将两个单元格添加到打开的笔记本中并运行 SQL，SQL 会失败。

   ```
   ERROR: syntax error at or near "," Position: 132 [ErrorId: 1-6546764a-011df2691778846219ce6ec2]
   ```

此场景仅用于说明与 Amazon Q 生成式 SQL 交互的一些基本方法。您可以使用此生成式 AI 技术进行更多实验，以帮助您开始编写 SQL 来查询数据库。