パラメータ化されたクエリを使用する - Amazon Athena

パラメータ化されたクエリを使用する

Athena のパラメータ化されたクエリを使用して、実行時に同じクエリを異なるパラメータ値で再実行し、SQL インジェクション攻撃を防ぐことができます。Athena では、パラメータ化されたクエリは、任意の DML クエリまたは SQL プリペアドステートメントの実行パラメータの形式をとることができます。

  • 実行パラメータを持つクエリは 1 つのステップで実行でき、ワークグループ固有ではありません。パラメータ化する値の DML クエリには、疑問符を付けます。クエリを実行するときは、実行パラメータ値を順番に宣言します。パラメータの宣言とパラメータへの値の割り当ては、同じクエリで、しかし分離された方法で行えます。プリペアドステートメントとは異なり、実行パラメータを含むクエリを送信するときにワークグループを選択できます。

  • プリペアドステートメントには、PREPAREEXECUTE の 2 つの別個の SQL ステートメントが必要です。まず、PREPARE ステートメントでパラメータを定義します。その後、定義したパラメータの値を指定する EXECUTE ステートメントを実行します。プリペアドステートメントはワークグループ固有です。それらが属するワークグループのコンテキスト外では実行できません。

考慮事項と制約事項

  • パラメータ化されたクエリは、Athena エンジンバージョン 2 以降でサポートされています。Athena エンジンバージョンの詳細については、「Athena エンジンのバージョニング」を参照してください。

  • 現在、パラメータ化されたクエリは、SELECTINSERT INTOCTASおよび UNLOAD ステートメントでのみサポートされています。

  • パラメータ化されたクエリでは、パラメータは位置パラメータであり、? で示されます。パラメータには、クエリ内の順序によって値が割り当てられます。名前が挙げられているパラメータはサポートされていません。

  • 現在、? パラメータは WHERE 句にのみ配置できます。SELECT ? FROM table のような構文はサポートされていません。

  • 疑問符パラメータを二重引用符または一重引用符で囲むことはできません (つまり、'?' および "?" は有効な構文ではありません)。

  • SQL 実行パラメータを文字列として扱うには、二重引用符ではなく一重引用符で囲む必要があります。

  • 必要に応じて、パラメータ化された条件に値を入力するときに CAST 関数を使用できます。たとえば、クエリでパラメータ化した date 型の列があり、データ 2014-07-05 をクエリする場合は、パラメータ値に CAST('2014-07-05' AS DATE) を入力すると結果が返されます。

  • 準備済みステートメントはワークグループ固有であり、準備済みステートメント名はワークグループ内で一意である必要があります。

  • 準備済みステートメントには IAM 許可が必要です。詳細については、「準備済みステートメントへのアクセスを構成する」を参照してください。

  • Athena コンソールの実行パラメータを持つクエリでは、疑問符の数が最大 25 個に制限されます。