使用参数化查询 - Amazon Athena

使用参数化查询

您可以使用 Athena 参数化查询在执行时使用不同的参数值重新运行同一个查询,从而帮助防止 SQL 注入攻击。在 Athena 中,参数化查询可以在任何 DML 查询或 SQL 预准备语句中采用执行参数的形式。

  • 带有执行参数的查询可以在单个步骤中完成,而不是特定于工作组。您可以在任何 DML 查询中为要参数化的值放置问号。运行查询时,按顺序声明执行参数的值。参数的声明和参数的赋值可以在同一查询中完成,但单独进行。与预准备语句不同,您可以在提交带有执行参数的查询时选择工作组。

  • 预准备语句需要两个单独的 SQL 语句:PREPAREEXECUTE。首先,在 PREPARE 语句中定义参数。然后,运行为您定义的参数提供值的 EXECUTE 语句。预准备语句特定于工作组;您不能在预准备语句所属的工作组的上下文以外运行它们。

注意事项和限制

  • 参数化查询仅在 Athena 引擎版本 2 及更高版本中受支持。有关 Athena 引擎版本的更多信息,请参阅 Athena 引擎版本控制

  • 目前,参数化查询仅在 SELECTINSERT INTOCTASUNLOAD 语句中受支持。

  • 在参数化查询中,参数是位置参数,并用 ? 指示。参数按其在查询中的顺序赋值。命名参数不受支持。

  • 目前,? 参数只能放在 WHERE 子句中。不支持 SELECT ? FROM table 之类的语法。

  • 问号参数不能放在双引号或单引号以内(即 '?'"?" 不是有效的语法)。

  • 要将 SQL 执行参数视为字符串,它们必须用单引号而不是双引号括起来。

  • 如有必要,您可以在为参数化术语输入值时使用 CAST 函数。例如,如果您有一列 date 类型在查询中参数化,并且想要查询日期 2014-07-05,则为参数值输入 CAST('2014-07-05' AS DATE) 将返回结果。

  • 预准备语句特定于工作组,预准备语句名称在工作组中必须唯一。

  • 预准备语句的 IAM 权限是必需的。有关更多信息,请参阅 配置对于预编译语句的访问

  • 在 Athena 控制台中使用执行参数的查询最多只能有 25 个问号。