使用參數化查詢 - Amazon Athena

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用參數化查詢

您可以使用 Athena 參數化查詢,在執行時使用不同的參數值重新執行相同的查詢,並協助防止SQL插入攻擊。在 Athena 中,參數化查詢可以採用任何DML查詢或SQL已準備好陳述式中的執行參數形式。

  • 具有執行參數的查詢可以在一個步驟中完成,而且並非針對特定工作群組。您可以在任何要參數化的值的DML查詢中放置問號。當您執行查詢時,依序宣告執行參數值。參數的宣告和參數值的指派可以在同一個查詢中完成,但是以解耦的方式進行。與預備陳述式不同,您可以在提交具有執行參數的查詢時選取工作群組。

  • 準備好的語句需要兩個單獨的SQL語句:PREPAREEXECUTE。首先,您在 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 個問號。