2016-12-24 2 views
1

SqlQueryはselect *で始まるSQLのみをサポートしていますか? select id, name from personのようないくつかの列だけを選択し、列を対応するPOJOにマップする他のSQLをサポートしていませんか?SqlQueryとSqlFieldsQuery

SQLを実行するためにSqlFieldQueryを使用すると、結果はListのQueryCursor(各リストに結果のレコードが1つあります)です。 SQLはselect *で始まる場合、このリストの内容は、のようなフィールドクエリと異なるだろう。しかし:最初elmentがある

  1. select *についてはselect id,name,age from person

    、各リストには3つの部分で構成されていますキャッシュ

  2. 第二の要素のキーは、データ

  3. テーリング要素が含まれているPOJOオブジェクトであります各列の値です。

なぜこのように設計されましたか? SqlFieldsQueryが実行しているSQLがわからない場合は、Listに含まれている内容を理解するためにさらに努力する必要があります。

+0

トム、IGNITE JIRAに同じチケットがあります。例:https://issues.apache.org/jira/browse/IGNITE-3466回避策として、列のリストを指定してスターシンボルを使用しないでください。ありがとう@ kuaw26。 – kuaw26

+0

'select *'が返る最初の2つの列がKとVの別の場合です – Tom

答えて

1

SqlQueryは、キーと値のオブジェクトを返しますが、SqlFieldsQueryでは特定のフィールドを選択できます。どちらを使用するかは、ユースケースによって異なります。

現在、_keyフィールドと_valフィールドがあらかじめ定義されており、今後改善される予定です。しかし、一般的には、SQLクエリを実行するときにフェッチしたいフィールドをリストすることをお勧めします(これはIgniteだけでなく、どのSQLデータベースでも当てはまります)。このようにして、スキーマが変更された場合など、予期しない動作からコードが保護されます。

関連する問題