Как получить идентификатор объекта Datastore от com.google.datastore.v1.Entity - PullRequest
0 голосов
/ 07 мая 2019

Я написал код для извлечения данных из Google Datastore в моей программе Google Cloud Dataflow.Я могу выбрать все поля объекта, кроме поля Id, которое является автоматически сгенерированным полем.Я пытался использовать entity.getKey (), но получаю значение null.

Ниже приведен фрагмент кода,

Datastore datastore = DataflowDatastoreService.getDatastoreObject(null, null, null);
Query.Builder queryBuilder = Query.newBuilder();
Filter filter1 = Filter.newBuilder()
.setPropertyFilter(PropertyFilter.newBuilder()  .setProperty(PropertyReference.newBuilder().setName("cId"))
.setOp(PropertyFilter.Operator.EQUAL)
.setValue(Value.newBuilder().setIntegerValue(1059438885900008L).build()).build()).build();

Filter filter2 = Filter.newBuilder()
.setPropertyFilter(PropertyFilter.newBuilder()
.setProperty(PropertyReference.newBuilder().setName("active"))
.setOp(PropertyFilter.Operator.EQUAL)
.setValue(Value.newBuilder().setBooleanValue(Boolean.TRUE).build()).build()).build();

Filter composeFilter = Filter.newBuilder().setCompositeFilter(CompositeFilter.newBuilder()
                    .addFilters(filter1).setOp(Operator.AND).addFilters(filter2).build()).build();
            queryBuilder.addKind(KindExpression.newBuilder().setName("MyMaster").build());
            queryBuilder.setFilter(composeFilter).build();

RunQueryRequest request = DataflowDatastoreService.makeRequest(queryBuilder.build(), null);
RunQueryResponse response = datastore.runQuery(request);
QueryResultBatch batch = response.getBatch();
List<EntityResult> entityResutls =  batch.getEntityResultsList();
List<Entity> myEntities = new ArrayList<>();

Map<String, Value> entityMap = myEntities(0).getPropertiesMap();

В моем коде я могу получить все поля в ключе entityMapно я не получаю ключ, есть ли другой способ, с помощью которого я могу получить все поля с Id.

1 Ответ

0 голосов
/ 07 мая 2019

Примечание: я не пользователь java, ответ основан на опыте работы с Python

Действительно, сущности, возвращаемые в результате обычного запроса, не содержат ключ / идентификатор сущности.Попытка получить это от объекта довольно неэффективна - вам нужно обратиться к хранилищу данных для каждого отдельного объекта (даже не смотря на то, почему это не работает для вас).

Если мне нужноключи / идентификаторы сущностей Я бы вместо этого использовал запросы только для ключей - для получения ключей, из которых я могу легко получить:

  • идентификаторы ключей локально, без создания фактического хранилища данныхвызовы (в Python через key.id(), я не знаю Java-эквивалент)
  • сущностей с помощью прямого поиска ключа, который может быть пакетным для эффективности.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...