2016-12-24 5 views
1

похоже, что SqlQuery поддерживает только sql, который начинается с select *? Разве он не поддерживает другой sql, который выбирает только некоторые столбцы, такие как select id, name from person и сопоставляет столбцы с соответствующим POJO?SqlQuery и SqlFieldsQuery

Если я использую SqlFieldQuery для запуска sql, результатом является QueryCursor List (каждый список содержит одну запись результата). Но если SQL начинается с select *, содержимое этот список был бы отличаться от поля запроса, как: select id,name,age from person

Для select *, каждый Список строится с 3-х частей:

  1. первый elment является ключ кэша

  2. второй элемент является объектом POJO, который содержит данные

  3. хвостохранилище элементом - значения для каждого столбца.

Почему это было спроектировано? Если я не знаю, что sql, что SqlFieldsQuery работает, то мне нужно дополнительное усилие, чтобы выяснить, что содержит список.

+0

Том, там же билеты в IGNITE JIRA. Например: https://issues.apache.org/jira/browse/IGNITE-3466 В качестве обходного пути вы можете указать список столбцов и не использовать символ звезды. – kuaw26

+0

Спасибо @ kuaw26. Другое дело, что первые два столбца, которые 'select *' return являются K и V – Tom

ответ

1

SqlQuery возвращает объекты ключа и значения, а SqlFieldsQuery позволяет выбрать определенные поля. Какой из них зависит от вашего варианта использования.

В настоящее время select * действительно содержит предопределенные поля _key и _val, и это будет улучшено в будущем. Однако, как правило, рекомендуется перечислить поля, которые вы хотите получить при выполнении SQL-запросов (это верно для любой базы данных SQL, а не только для Ignite). Таким образом, ваш код будет защищен от непредвиденного поведения в случае, если схема была изменена, например.