使用预编译语句进行查询 - Amazon Athena
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

使用预编译语句进行查询

您可以使用Athena参数化查询功能来准备语句,以便使用不同的查询参数重复执行同一查询。预编译语句包含参数占位符,其值是在执行时提供的。预编译语句使Athena查询能够直接获取参数并帮助防止 SQL 注入攻击。

注意事项和限制

  • 预编译语句是工作组特定的,并且预编译语句名称在工作组中必须是唯一的。

  • 只有Athena引擎版本 2 中支持参数化查询。有关Athena引擎版本的信息,请参阅Athena 引擎版本控制

  • 目前,仅 SELECTINSERT INTOCTAS 语句支持参数化查询。

  • IAM 预编译语句的 权限是必需的。有关更多信息,请参阅允许访问预编译语句

SQL 语句

您可以使用 PREPAREEXECUTEDEALLOCATE PREPARE SQL 语句在Athena控制台查询编辑器中运行参数化查询。

  • 要指定通常使用文本值的参数,请在PREPARE语句中使用问号。

  • 要在运行查询时将参数替换为值,请在 USING 语句中使用 EXECUTE 子句。

  • 要从工作组中预编译语句列表中删除预编译语句,请使用 DEALLOCATE PREPARE 语句。

以下各节提供了有关这些语句的更多详细信息。

PREPARE

准备稍后运行的语句。预编译语句以您指定的名称保存在当前工作组中。语句可以包含在运行查询时要替换的参数,而不是文本。要替换为值的参数由问号表示。

Syntax

PREPARE statement_name FROM statement

下表介绍了这些参数。

参数 描述
statement_name 要准备的语句的名称。该名称在工作组中必须是唯一的。
statement SELECTCTASINSERT INTO 查询。

Examples

以下示例显示 PREPARE 语句的使用。

PREPARE my_select1 FROM SELECT * FROM nation
PREPARE my_select2 FROM SELECT * FROM "my_database"."my_table" WHERE year = ?
PREPARE my_insert FROM INSERT INTO cities_usa (city, state) SELECT city, state FROM cities_world WHERE country = ?

EXECUTE

运行预编译语句。参数的 值在 USING 子句中指定。

Syntax

EXECUTE statement_name [USING value1 [ ,value2, ... ] ]

statement_name 是预编译语句的名称。value1value2 是要为语句中的参数指定的值。

Examples

以下示例运行my_select1预编译语句,该语句不包含任何参数。

EXECUTE my_select1

以下示例准备并执行具有两个参数的查询。

PREPARE my_select2 FROM SELECT order FROM orders WHERE productid = ? and quantity < ?
EXECUTE my_select2 USING 346078, 12

以下示例在预编译语句 中为参数 提供一个字符串值my_insert

EXECUTE my_insert USING 'usa'

取消分配准备

从当前工作组中的预编译语句列表中删除具有指定名称的预编译语句。

Syntax

DEALLOCATE PREPARE statement_name

statement_name 是要删除的预编译语句的名称。

Example

以下示例从当前工作组中删除my_select1预编译语句。

DEALLOCATE PREPARE my_select1