我有一个 DynamoDB 表,其中一个字母数字字符串作为哈希键(例如“d4ed6962-3ec2-4312-a480-96ecbb48c9da”)。我需要根据表中的另一个字段查询表,因此我需要查询来选择所有键,例如我的字段 x 位于 dat x 和日期 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);
预先感谢大家的帮助。
在 DynamoDB 中,您可以使用 3 个 api 获取项目:
. Scan http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Scan.html(灵活但昂贵),
. Query http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Query.html(不太灵活:你必须指定一个哈希值,但成本较低)
. GetItem http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetItem.html(按哈希,如果您的表有的话,按范围)
实现您想要的唯一方法是:
使用扫描,但速度慢或昂贵。
-
使用另一个表 (B) 作为前一个表 (A) 的索引,如下所示:
B.HASH = '值'
B.RANGE = 用户 ID
B.lastAccesTime = lastAccesTime(带有二级索引)
现在您必须在写入时维护该索引,但您可以将其与查询操作一起使用,
获取您的用户 ID。查询B:hash='VALUES',x和y之间的lastaccessTime,选择userid。
希望这可以帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)