本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
執行同盟傳遞查詢
在 Athena 中,您可以使用資料來源本身的查詢語言對聯合資料來源執行查詢,並將完整查詢向下推送至資料來源以執行。這些查詢稱為直通查詢。若要執行傳遞查詢,請在 Athena 查詢中使用資料表函數。您可以將要在資料來源上執行的傳遞查詢包含在資料表函數的其中一個引數中。透過查詢傳回您可以使用 Athena SQL 進行分析的資料表。
支援連接器
下列 Athena 資料來源連接器支援傳遞查詢。
考量與限制
在 Athena 中使用直通查詢時,請考慮以下幾點:
-
只有 Athena
SELECT
陳述式或讀取作業才支援查詢傳遞。 -
傳遞查詢必須在外部查詢 (也就是呼叫 table 函數的查詢) 的目錄內容中執行。
-
查詢效能可能會因資料來源的組態而有所不同。
-
檢視不支援傳遞查詢。
語法
一般的 Athena 查詢傳遞語法如下。
SELECT * FROM TABLE(system.
function_name
(arg1
=> 'arg1Value
'[,arg2
=> 'arg2Value
', ...]))
對於大多數資料來源,第一個也是唯一引數query
後面接著箭頭運算子=>
和查詢字串。
SELECT * FROM TABLE(system.query(query => 'query string'))
為了簡單起見,您可以省略可選的命名參數query
和箭頭運算符=>
。
SELECT * FROM TABLE(system.query('query string'))
如果資料來源所需的數量超過查詢字串,請按資料來源預期的順序使用具名引數。例如,運算式
包含第一個引數及其值。名稱 arg1
=>
'arg1Value
'arg1
專屬於資料來源,且可能因連接器到連接器不同而有所不同。
SELECT * FROM TABLE( system.query(
arg1
=> 'arg1Value
',arg2
=> 'arg2Value
',arg3
=> 'arg3Value
' ));
如需與特定連接器搭配使用的確切語法的相關資訊,請參閱個別連接器頁面。
引號用法
引數值 (包括您傳遞的查詢字串) 必須以單引號括住,如下列範例所示。
SELECT * FROM TABLE(system.query(query => 'SELECT * FROM testdb.persons LIMIT 10'))
當查詢字串被雙引號包圍時,查詢會失敗。以下查詢失敗,並出現錯誤消息列 _NOT_FOUND:行 1:43:列「從測試數據庫中選擇 *。人員限制 10」
無法解析。
SELECT * FROM TABLE(system.query(query => "SELECT * FROM testdb.persons LIMIT 10"))
若要逸出單引號,請在原始引號中加入單引號 (例如,terry's_group
toterry''s_group
)。
範例
下列範例查詢會將查詢向下推送至資料來源。查詢會選取資料customer
表中的所有資料行,將結果限制為 10。
SELECT * FROM TABLE( system.query( query => 'SELECT * FROM customer LIMIT 10;' ))
下列陳述式會執行相同的查詢,但會排除選用的具名引數query
和箭頭運算子=>
。
SELECT * FROM TABLE( system.query( 'SELECT * FROM customer LIMIT 10;' ))