Где условие в геоде

Я новичок в Geode.
Я добавляю, как показано ниже:

gfsh>put --key=('id':'11') --value=('firstname':'Amaresh','lastname':'Dhal') --region=region
Result      : true
Key Class   : java.lang.String
Key         : ('id':'11')
Value Class : java.lang.String
Old Value   : <NULL>   

когда я спрашиваю вот так:

gfsh>query --query="select * from /region"

Result     : true
startCount : 0
endCount   : 20
Rows       : 9

Result
-----------------------------------------
('firstname':'A2','lastname':'D2')
HI
Amaresh
Amaresh
('firstname':'A1','lastname':'D1')
World
World
('firstname':'Amaresh','lastname':'Dhal')
Hello

NEXT_STEP_NAME : END

Когда я пытаюсь выполнить запрос, как показано ниже, я не получаю значение:

gfsh>query --query="select * from /region r where r.id='11'"

Result     : true
startCount : 0
endCount   : 20
Rows       : 0


NEXT_STEP_NAME : END

Конечно, я могу использовать команду get ... Но я хочу использовать условие where ... Где я делаю не так ... Это не дает результата

Спасибо


person Aman    schedule 30.11.2015    source источник


Ответы (3)


В Geode ключ - это не «просто еще один столбец». Фактически, основной синтаксис запроса неявно запрашивает только поля значения. Однако вы можете включить ключ в свой запрос, используя этот синтаксис:

выберите value.lastname, value.firstname из /region.entries, где key.id = 11

Кроме того, довольно распространенной практикой является включение поля id в ваш класс значений, даже если это не является строго обязательным.

person Randy May    schedule 30.11.2015
comment
@ Randy .. Это не дает мне результата - person Aman; 01.12.2015
comment
Я вижу, что происходит. Синтаксис запроса правильный, но есть проблема с put, и на самом деле документация gemfire по gfsh допускает ту же ошибку. Когда я попробовал то же самое, я заметил, что результат операции put говорит о том, что ключевым классом является java.lang.String. Таким образом, он буквально сохраняет строку ('id': '11'). Командная строка gfsh - не лучший способ работать со сложными типами данных. Я думаю, что если вы сделаете ставку через API или даже интерфейс REST, запрос будет работать. - person Randy May; 02.12.2015

То, что сказал Рэнди, совершенно верно, «ключ» - это не другой столбец. Точный формат запроса должен быть

gfsh>query --query="select * from /Address.entries where key=2"

Здесь вы ищете получение всех «записей» в области «Адрес» и последующий запрос ключа.

Чтобы проверить, какой из них вы хотите запросить, вы можете запустить этот запрос

   gfsh>query --query="select * from /Address.entries"
person Pulkit Chandra    schedule 01.12.2015
comment
Это не ответ на вопрос .. Как мне запросить, если у меня Id: 1 - person Aman; 01.12.2015

Вы всегда можете использовать команду get для получения данных, относящихся к определенному ключу.

get --key=<KEY_NAME> --region=<REGION_NAME>

Пример:

get --key=1 --region=Address

Ссылка: https://gemfire.docs.pivotal.io/910/geode/tools_modules/gfsh/command-pages/get.html

person AmitkAgrawal    schedule 04.08.2020