2015-10-15 3 views
0

У меня есть объект Objectify, называемый UserEntity, который содержит объект с именем user. Я хочу сбросить все последние времена синхронизации и некоторые другие данные из моих пользовательских объектов, чтобы немного проанализировать. Я пытаюсь сделать это в Консоли разработчиков с помощью GSQL, но не могу понять, как получить результаты, которые я хочу.Выбор объективизации данных из хранилища данных Google с помощью GSQL в консоли разработчика

Запрос ниже работает, чтобы получить все

SELECT * FROM UserEntity 

Используя все ключи, этот запрос получите в

SELECT __key__ FROM UserEntity 

Это ничего не возвращает, говоря No data was found.

SELECT user FROM UserEntity 

Но я не могу (как я могу) выбрать индивидуальные свойства объектов. Возможно ли достичь этого в консоли разработчика, или я просто напишу код для этого?

В идеале я хотел бы быть в состоянии сделать что-то вроде

SELECT user.synctime, user.currentLevel FROM UserEntity 

Stripped UserEntity класса ниже

@Entity 
@Cache 
public class UserEntity extends WordBuzzEntity { 
    @Id 
    private String facebookId; 
    public User user = new User(null); 
    private HashMap<String, Date> accessTokens = new HashMap<String, Date>(); 
} 
+0

Является ли 'пользователь' встроенным объектом? Если вы просто «ВЫБЕРИТЕ *», как отображается свойство 'user' на консоли? И используете ли вы старую (appengine.google.com) или новую консоль (console.developer.google.com)? – tx802

+0

@ tx802 Я добавил структуру класса 'UserEntity' к вопросу. Я использую новую консоль. Когда я делаю 'SELECT *', я получаю 3 столбца, отображаемых в консоли с именем 'Name/ID',' accessTokens' и 'user' –

ответ

1

Это не так, как принципиально работает хранилище. Хранилище данных - это хранилище ключей/значений с некоторой дополнительной индексацией. Значения представляют собой сериализованные протобуфы. Вообще говоря, вы загружаете объекты целиком и не можете выбирать/выбирать нужные части.

Существует некоторая дополнительная уловка, которую может выполнять хранилище данных, выбор данных непосредственно из индекса, а не загрузка значения protobuf. Наиболее очевидным является запрос только на ключ (ключ всегда является частью каждого индекса). Более сложный - это «проекционный» запрос, который выглядит, как SQL select на первый взгляд, но на самом деле это совсем другое животное, и вам нужно поддерживать специальные индексы. Тем не менее, это расширенная оптимизация производительности, которую вы не должны преследовать, если вы действительно не знаете, что делаете. действительно. Начните с простой модели загрузки целых объектов.

 Смежные вопросы

  • Нет связанных вопросов^_^