WHERE子句与Geode中的值不匹配

时间:2019-04-19 22:49:20

标签: apache geode

在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"

我得到一个结果:是,没有行(所以我知道查询是有效的)

我已经为此花了两天时间,但我不明白应该是什么简单查询的问题所在。

1 个答案:

答案 0 :(得分:0)

put命令假定keyvalue的类型均为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

希望这会有所帮助。干杯。