WHERE子句与Geode中的值不匹配

问题描述 投票:0回答:1

在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天了,我不明白什么应该是一个简单的查询是错的。

apache geode
1个回答
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

希望这可以帮助。干杯。

© www.soinside.com 2019 - 2024. All rights reserved.