2016-12-24 33 views
1

它看起來像SqlQuery只支持以select *開頭的sql?它不支持其他的SQL,只選擇一些列如 select id, name from person,並將列映射到相應的POJO?SqlQuery和SqlFieldsQuery

如果我使用SqlFieldQuery來運行sql,結果是List的QueryCursor(每個List包含結果的一個記錄)。但是,如果SQL與select *啓動時,該列表中的內容將與現場查詢關鍵詞,比如不同: select id,name,age from person

對於select *,每個列表被構造有3個部分:

  1. 第一elment是緩存

  2. 第二元件的關鍵是包含數據

  3. 拖尾元件的POJO對象是每列的值。

它爲什麼這麼設計?如果我不知道SqlFieldsQuery運行的sql是什麼,那麼我需要額外努力來確定List包含的內容。

+0

湯姆,在IGNITE JIRA有同樣的門票。例如:https://issues.apache.org/jira/browse/IGNITE-3466作爲一種解決方法,您可以指定列的列表並且不使用星號。 – kuaw26

+0

謝謝@ kuaw26。另一種情況是'select *'返回的前兩列是K和V. – Tom

回答

1

SqlQuery返回鍵和值對象,而SqlFieldsQuery允許選擇特定的字段。使用哪一個取決於你的用例。

當前select *確實包含預定義的_key_val字段,這將在未來得到改進。但是,通常最好在運行SQL查詢時列出要獲取的字段(這對任何SQL數據庫都是如此,而不僅僅是Ignite)。這樣,例如,在模式更改的情況下,您的代碼將免受意外行爲的影響。