在Geode查询中,值不被视为匹配。想知道这些值是否没有被正确使用,因为我无法成功地做任何类型的WHERE。
我尝试输入没有引号的键和值,单引号(')和双引号(“)。我没有使用复杂的类,所以默认情况下一切都是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天了,我不明白什么应该是一个简单的查询是错的。
put
命令假设key
和value
都是java.lang.String
类型,这就是为什么比较是静默失败并且没有返回任何结果。您应该使用--key-class
和--value-class
参数来自定义实际类型(有关详细信息,请参阅here)。
例如,以下命令集可实现您的目标:
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
希望这可以帮助。干杯。