在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"
我得到一个结果:是,没有行(所以我知道查询是有效的)
我已经为此花了两天时间,但我不明白应该是什么简单查询的问题所在。
答案 0 :(得分:0)
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
希望这会有所帮助。干杯。