本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用參數化查詢
您可以使用 Athena 參數化查詢,在執行時使用不同的參數值重新執行相同的查詢,並協助防止SQL插入攻擊。在 Athena 中,參數化查詢可以採用任何DML查詢或SQL已準備好陳述式中的執行參數形式。
-
具有執行參數的查詢可以在一個步驟中完成,而且並非針對特定工作群組。您可以在任何要參數化的值的DML查詢中放置問號。當您執行查詢時,依序宣告執行參數值。參數的宣告和參數值的指派可以在同一個查詢中完成,但是以解耦的方式進行。與預備陳述式不同,您可以在提交具有執行參數的查詢時選取工作群組。
-
準備好的語句需要兩個單獨的SQL語句:
PREPARE
和EXECUTE
。首先,您在PREPARE
陳述式中定義參數。接下來,執行一個為您定義的參數提供值的EXECUTE
陳述式。預備陳述式針對特定工作群組;您無法在其所屬的工作群組情境之外執行這些陳述式。
考量與限制
-
Athena 引擎版本 2 和更新版本才支援參數化查詢。如需有關 Athena 引擎版本的資訊,請參閱Athena 引擎版本控制。
-
目前,參數化查詢僅支援
SELECT
、INSERT INTO
、CTAS
以及UNLOAD
陳述式。 -
在參數化查詢中,參數具有位置性,以
?
表示。依參數在查詢中的順序指派參數值。不支援具名參數。 -
目前,
?
參數只能放置在WHERE
子句。不支援類似SELECT ? FROM table
的語法。 -
問號參數不能放在雙引號或單引號中 (也就是說,
'?'
和"?"
不是有效的語法)。 -
若要將SQL執行參數視為字串,它們必須以單引號而非雙引號括住。
-
如有必要,您可以在輸入參數化術語的值時使用
CAST
函數。例如,如果您有一個已在查詢中參數化的date
類型資料欄,並且想要查詢日期2014-07-05
,則輸入CAST('2014-07-05' AS DATE)
參數值將會傳回結果。 -
預備陳述式針對特定工作群組,預備陳述式的名稱在工作群組中必須是唯一的。
-
IAM需要準備好陳述式的權限。如需詳細資訊,請參閱允許存取預備陳述式。
-
在 Athena 主控台中具有執行參數的查詢限制為最多 25 個問號。