Это невозможно. С Справочная документация по GQL :
Каждый запрос GQL всегда начинается с SELECT *
или SELECT __key__
.
А из раздела Различия с SQL обзора хранилища данных:
При запросе хранилища данных, в настоящее время невозможно вернуть
только подмножество добрых свойств. Хранилище данных App Engine может либо
вернуть из запроса целые сущности или только ключи сущностей.
Относительно того, почему существуют подобные ограничения, статья о Как хранятся сущности и индексы дала хорошее представление о техническом аспекте Bigtable Google, распределенной системы баз данных, обеспечивающей хранилище данных App Engine. (И другие продукты Google)
Из этой статьи сущности хранилища данных хранятся в нескольких разных таблицах. Entity Bigtable
хранит все свойства объекта, а несколько Index Bigtables
хранят ключ объекта, отсортированный в соответствии с индексами объекта.
Когда мы выполняем запрос, в основном происходит два шага. Первым шагом является выполнение нашего запроса к Index Bigtables
, что дает набор ключей сущностей, соответствующих нашему запросу. Второй шаг заключается в том, что набор ключей затем используется для извлечения всего объекта из Entity Bigtable
.
Поэтому, когда вы выполняете свой запрос, начиная с SELECT __key__
, хранилищу данных нужно сделать только первый шаг и немедленно вернуться с набором ключей. Когда вы выполняете запрос, начиная с SELECT *
, хранилище данных выполнило оба действия и вернулось с набором сущностей.
Теперь, что касается того, почему запросы типа SELECT f1, f3, f5, f6
не поддерживаются хранилищем данных, нам нужно изучить более подробно, что произошло во время второго шага, описанного выше. В статье говорится, что на Entity Bigtable
:
Вместо сохранения каждого свойства объекта в виде отдельного столбца в соответствующей строке Bigtable используется один столбец, который содержит двоично-закодированный буфер протокола, содержащий имена и значения для каждого свойства данного объекта.
Поскольку в низкоуровневом буфере протокола хранятся все свойства объекта как единые сериализованные данные, это означает, что запрос только поднабора свойства объекта фактически потребует дополнительного этапа последующей обработки фильтрации набора результатов. и принимая только запрашиваемые свойства. Это повлечет за собой снижение производительности хранилища данных, и, вероятно, по этой причине в настоящее время он не поддерживается Google.