Amazon Redshift 何时使用 AQUA 来运行查询? - Amazon Redshift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

Amazon Redshift 何时使用 AQUA 来运行查询?

对于扫描表的每个查询,Amazon Redshift 将确定扫描操作是发送到 AQUA 还是在 Amazon Redshift 集群上本地运行。当扫描和聚合操作至少包含一个包含 AQUA 支持的 LIKE 或类似 TO 表达式的谓词时,它们将被发送到 AQUA。如果将扫描操作发送到 AQUA,则整个操作在 AQUA 上运行(不仅仅是 LIKE 或类似 TO 处理)。

例如,以下查询包含谓词str1 LIKE 'a%'num1 > 10将发送到 AQUA。

select num2 from tbl where str1 LIKE 'a%' and num1 > 10 GROUP BY num2;

在此示例中,AQUA 扫描表tbl,按谓词进行筛选,按num2,并将结果返回至 Amazon Redshift。

在以下示例中,Amazon Redshift 确定查询的哪些部分最好在 AQUA 中运行,哪些部分在 Amazon Redshift 集群上本地运行。在这种情况下,在customer_name列,该列用于筛选返回的行。扫描操作被发送到 AQUA 以运行查询的该部分。Amazon Redshift 仅接收扫描结果,然后 Amazon Redshift 将使用该结果在本地执行联接并完成查询。

select c.customer_name, p.prod_name, sum(revenue) from orders o join customers c ON c.id = o.customer_id join products p ON p.id = o.product_id where c.customer_name LIKE ‘%Amazon%Web%’ order by sum(revenue);

有关 LIKE 和 LIKE 的更多信息,请参阅LIKE类似于中的Amazon Redshift 数据库开发人员指南

Aqua 注意事项

AQUA 目前不支持以下类型的 SQL 查询。包含这些查询的查询会在您的 Amazon Redshift 集群上本地运行。

  • 执行写入操作的查询,如插入、更新、删除、创建表为、复制和卸载。有关更多信息,请参阅 。SQL 命令中的Amazon Redshift 数据库开发人员指南

  • SELECT 没有谓词的查询,例如以下内容。

    select * from tbl1
  • 扫描中的 Python 用户定义的函数 (UDF),包括对 Python UDF 定义的复杂视图进行扫描。

  • 在 LIKE 和类似 TO 谓语中使用以下元字符的查询:

    • LIKE 表达式中的非常量正则表达式文字。

    • 两种备选方案之一,例如以下内容。

      SIMILAR TO '%(cat|dog)%'
    • VARCHAR 列中单字符通配符的多个实例,例如以下内容。

      SIMILAR TO 'ab.cd.ef'
    • 匹配字符串中的 Unicode 转义序列、十六进制字符和八进制字符,例如以下内容。

      SIMILAR TO '%ab\uc382'
      SIMILAR TO '%ab\U0000c382'
      SIMILAR TO '%ab\x88'
      SIMILAR TO '%ab\127'
    • 重复元字符,如 “*”、“+”、“?” ,{m, n} 应用于 () 内的模式和多字节字符上,例如以下内容。

      SIMILAR TO 'abc(def)*'
      SIMILAR TO 'abcʥ+'
    • 括号表达式中的多字节字符 [...],例如以下内容。

      SIMILAR TO 'abc[ʥde]'.
  • 查询位置字符串函数(如 “下”、“上”、“左”、“右”)应用于 LIKE 或 “类似至” 扫描的输出。例如,以下摘录显示了 LOWER 函数。

    LOWER(a) LIKE "%cat%"

    相反,请尝试重写查询以使用不区分大小写的 ILIKE 而不带 LOWER。

    ILIKE "%cat%"

如何确定是否使用了 AQUA

下面的 SQL 显示了查询摘要在 AQUA 上运行。

select * from svl_query_summary where label ~ 'Aqua' limit 100;

如果您拥有超级用户访问权限,还可以加入STL_QUERYSTL_QUERYTEXT视图查看与 AQUA 运行的查询相对应的 SQL 语句。由 EXPLAIN 语句生成的解释计划不会显示查询是否使用 AQUA。