与查询编辑器 v2 生成式 SQL 交互(预览版) - Amazon Redshift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

与查询编辑器 v2 生成式 SQL 交互(预览版)

以下是针对预览版查询编辑器 v2 生成式 SQL 的预发行文档。文档和特征都可能会更改。我们建议您仅在测试环境中使用此功能,不要在生产环境中使用。有关预览条款和条件,请参阅 Amazon 服务条款中的测试版服务参与
注意

目前,只有以下 Amazon Web Services 区域中支持生成式 SQL:

  • 美国东部(弗吉尼亚州北部)区域 (us-east-1)

  • 美国西部(俄勒冈州)区域 (us-west-2)

您可以在 Amazon Redshift 查询编辑器 v2 中,与 Amazon Q 生成式 SQL 功能进行交互。这是一个编码助手,可以根据您的提示和数据库架构生成 SQL 语句。当您在查询编辑器 v2 中撰写笔记本时,可以使用这个编码助手。

在与生成式 SQL 交互时,请提出具体的问题,如果请求比较复杂,请进行迭代,并验证答案的准确性。

在以自然语言提供分析请求时,请尽可能具体,以便编码助手准确了解您的需求。正确的做法不是询问“查找门票销量最高的前几个场馆”,而是要提供更多详细信息,例如“查找 2008 年门票销量最高的前三个场馆的名称/ID”。使用与数据库一致的对象名称,例如在数据库中定义的架构、表和列名,而不是以不同的方式引用同一个对象,这可能会让助手不明所以。

将复杂的请求拆分为多个简单的语句,便于助手解释。反复提出跟进问题,让助手提供更详细的分析。例如,首先问“哪个州的场馆最多?” 然后根据回答,问“这个州最受欢迎的场馆是哪个?”。

在运行生成的 SQL 之前,请对其进行检查,以确保准确性。如果生成的 SQL 查询存在错误或与您的意图不符,请向助手提供如何更正查询的说明,而不是以不同的措辞来重述整个请求。例如,如果查询中缺少关于年份的谓词从句,请询问“提供 2008 年的场馆”。

与生成式 SQL 交互时的注意事项

使用聊天面板时,请注意以下几点。

  • 账户的查询编辑器 v2 管理员必须已在生成式 SQL 设置页面中开启聊天功能。

  • 要使用查询编辑器 v2 生成式 SQL,除了在查询编辑器 v2 的 Amazon 托管策略中指定的其他权限外,还需要在 IAM 策略中指定 sqlworkbench:GetQSqlRecommendations 权限。有关 Amazon 托管策略的更多信息,请参阅访问查询编辑器 v2

  • 您必须使用英语撰写问题。

  • 问题必须与集群或工作组中连接的数据库有关。为避免空状态错误,数据库中应至少有一个表和一些数据。

  • 您的问题必须与所连接数据库中存储的数据有关。它不能引用外部架构。有关所支持架构的更多信息,请参阅《Amazon Redshift 数据库开发人员指南》中的创建架构

  • 如果在任何问题中会导致 SQL 更改所连接数据库,就可能产生警告。

  • 生成式人工智能技术是一项全新的技术,其回复中可能会出现错误,有时将这种错误称为幻觉。在您的环境或工作负载中使用代码之前,请对所有代码进行测试并检查是否存在错误和漏洞。

  • 您可以通过分享账户中其他用户运行的 SQL 查询来改进建议。账户管理员可以运行以下 SQL 命令来允许访问账户的查询历史记录。

    GRANT ROLE SYS:MONITOR to "IAMR:role-name"; GRANT ROLE SYS:MONITOR to "IAM:user-name"; GRANT ROLE SYS:MONITOR to "database-username";

    有关 SYS:MONITOR 的更多信息,请参阅《Amazon Redshift 数据库开发人员指南》中的 Amazon Redshift 系统定义的角色

  • 您的数据是安全和私密的。数据不会跨账户共享。您的查询、数据和数据库架构不会用于训练生成式人工智能基础模型 (FM)。您的输入将用作 FM 的上下文提示,仅用于回答您的查询。

使用生成式 SQL

配置了正确的权限后,在查询编辑器 v2 中处理笔记本时,您可以选择一个图标开始对话。

与查询编辑器 v2 生成式 SQL 聊天进行交互以生成 SQL
  1. 在查询编辑器 v2 的编辑器选项卡中,打开笔记本。

  2. 选择 
                Generative SQL panel
            生成式 SQL 图标,然后在聊天面板中,按照说明向 Amazon Redshift 查询编辑器 v2 生成式 SQL 提问。

    您在提示字段中提出问题,查询编辑器 v2 提供建议的 SQL 作为回复。所出现的任何错误都会在聊天面板中返回给您。

  3. 选择添加到笔记本,在笔记本中添加一个带有您的提示的 Markdown 单元格,以及一个包含建议 SQL 的 SQL 单元格。

  4. (可选)选择重新生成 SQL,对相同的提示生成另一个回复。您可以选择为当前提示重新生成 SQL一次。

  5. (可选)在生成式 SQL 聊天面板中,选择 
                More 更多图标,然后选择刷新数据库以刷新描述所连接数据库的元数据。此元数据包括数据库中架构、表和列的定义。

以管理员身份更新生成式 SQL 设置

拥有正确 IAM 权限的用户可以查看和更改相同 Amazon Web Services 账户中其他用户的生成式 SQL 设置。在查询编辑器 v2 的 Amazon 托管策略中指定的其他权限之外,此管理员在其 IAM 策略中还必须拥有 sqlworkbench:UpdateAccountQSqlSettings 权限。有关托管策略的更多信息,请参阅使用查询编辑器 v2 所需的权限

管理员为账户中的所有用户开启生成式 SQL 聊天
  1. 选择 
                Settings 设置图标以显示不同设置屏幕的菜单。

  2. 然后选择 
                    Generative SQL settings
                生成式 SQL 设置图标以显示生成式 SQL 设置页面。

  3. 选择生成式 SQL 来为账户中的用户开启生成式 SQL 功能。

对 TICKIT 数据使用 Amazon Q 生成式 SQL 功能的示例

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

注意

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

使用查询编辑器 v2 生成式 SQL 的示例对话
  1. 编辑器中,连接到包含 TICKIT 样本数据的集群或工作组。

  2. 创建一个空笔记本,然后选择 
                            Generative SQL
                        生成式 SQL 图标以打开聊天面板。

  3. 输入以下提示,生成 SQL 来验证 VENUE 表中的记录数:

    How many venues are there?
    SELECT
      COUNT(*) AS num_venues
    FROM
      tickit.venue

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

    在 SQL 单元格中,选择运行以接收结果:

    count ------ 202
  4. 要请求另一个版本的 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 ...
  5. 生成式 SQL 助手可以对您的要求做出推测。尽管数据库中没有小组件,但您仍然可以询问。在这种情况下,它会给出消息,说明无法生成 SQL。

    How many widgets are there?
    I was not able to generate any SQL
  6. 随着对数据库的了解越来越多,您可以提出更具体的问题来生成 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

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

  7. 您注意到谓词 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
  8. 如果您提出的问题试图更改连接的数据库,则会返回一条警告消息以及所推荐的任何 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]

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