Предложение WHERE не соответствует значениям в Geode - PullRequest
0 голосов
/ 20 апреля 2019

Значения не считаются совпадением в запросе Geode. Интересно, если значения не используются правильно, так как я не могу сделать какой-либо тип ГДЕ успешно.

Я попытался ввести ключи и значения без кавычек, с одинарными кавычками (') и с двойными кавычками ("). Я не использую сложные классы, поэтому по умолчанию все является java.lang.String.

Например, у меня есть эта запись в моем регионе «сумма»:

put --key=(“p7”) --value=(356.08) --region=amount

Запрос

query --query="SELECT * FROM /amount"

показывает эту пару ключ / значение, в частности, в регионе. Тем не менее, когда я запрашиваю

query --query="SELECT * FROM /amount WHERE /amount.entries.value > 100"

Я получаю результат: true, без строк (поэтому я знаю, что запрос действителен)

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

1 Ответ

0 голосов
/ 23 апреля 2019

Команда put предполагает, что оба типа key и value относятся к типу java.lang.String, поэтому сравнение завершается с ошибкой и не возвращает никаких результатов. Вы должны использовать параметры --key-class и --value-class для настройки фактического типа (см. здесь для получения дополнительной информации).

В качестве примера, следующий набор команд достигает того, что вы хотите:

gfsh>create region --name=amount --type=REPLICATE
Member  | Status
------- | -------------------------------------
server1 | Region "/amount" created on "server1"


gfsh>query --query="<TRACE> SELECT * FROM /amount"
Result      : true
Limit       : 100
Rows        : 0
Query Trace : Query Executed in 0.395477 ms; indexesUsed(0)


gfsh>put --key="key1" --value="356" --region=/amount --value-class=java.lang.Long
Result      : true
Key Class   : java.lang.String
Key         : key1
Value Class : java.lang.Long
Old Value   : null


gfsh>query --query="<TRACE> SELECT * FROM /amount.values"
Result      : true
Limit       : 100
Rows        : 1
Query Trace : Query Executed in 0.468153 ms; indexesUsed(0)

Result
------
356


gfsh>query --query="<TRACE> SELECT * FROM /amount.values v WHERE v > 100"
Result      : true
Limit       : 100
Rows        : 1
Query Trace : Query Executed in 0.85026 ms; indexesUsed(0)

Result
------
356

Надеюсь, это поможет. Приветствия.

...