Dif*_*din 4 java amazon-web-services conditional-statements amazon-dynamodb
我有一个带有字母数字字符串作为哈希键的DynamoDB表(例如"d4ed6962-3ec2-4312-a480-96ecbb48c9da").我需要根据表中的另一个字段查询表,因此我需要我的查询来选择所有键,例如我的字段x在dat x和date y之间.
我知道我需要哈希键上的条件和范围键上的另一个条件,但是我很难编写一个不将我的查询绑定到特定ID的哈希键条件.
我以为我可以根据ID为NOT_NULL来解决冗余条件,但是当我使用它时,我得到错误:
查询密钥条件不受支持
以下是我正在使用的条件,任何想法如何实现这一目标?
Condition hashKeyCondition = new Condition()
.withComparisonOperator(ComparisonOperator.NOT_NULL.toString());
Condition rangeCondition = new Condition()
.withComparisonOperator(ComparisonOperator.BETWEEN.toString())
.withAttributeValueList(new AttributeValue().withS(dateFormatter.print(lastScanTime())),
new AttributeValue().withS(dateFormatter.print(currentScanTime)));
Map<String, Condition> keyConditions = new HashMap<String, Condition>();
keyConditions.put("userId", hashKeyCondition);
keyConditions.put("lastAccesTime", rangeCondition);
Run Code Online (Sandbox Code Playgroud)
在此先感谢大家的帮助.
在DynamoDB中,您可以获得3个api的项目:
.扫描(灵活但昂贵),
.查询(不太灵活:你必须指定一个哈希,但更便宜)
.GetItem(由哈希和,如果你的表有一个,按范围)
实现目标的唯一方法是:
使用扫描,速度慢或昂贵.
使用另一个表(B)作为前一个表(A)的索引,如:
B.HASH ='VALUES'B.RANGE = userid
B.lastAccesTime = lastAccesTime(带有二级索引)
现在,您必须在写入时维护该索引,但您可以将其与Query操作一起使用,以获取您的userIds.查询B:hash ='VALUES',x和y之间的lastaccessTime,选择userid.
希望这可以帮助.
| 归档时间: |
|
| 查看次数: |
12235 次 |
| 最近记录: |