我正在尝试使用dynamodb的新查询过滤器功能。但问题是我需要查询范围键属性的过滤器.net sdk抱怨"查询过滤器仅适用于非键属性"。
所以我决定为每一行添加一个新字段,其中包含范围键属性的值。
This:
Hash Key | Range Key
User Id ContentId
Will become this:
Hash Key | Range Key | NewField
User Id ContentId ContentIdForQueryFilter
1 1 1
1 2 2
1 3 3
现在我可以用Hash和Range Key查询表,我可以在ContentIdFilter上使用queryfilter,因为ContentIdFilter不是关键属性。
我的问题是我如何在每行上添加 ContentIdForQueryFilter 字段的值为ContentId字段?我应该使用Hive还是Elastic Map Reduce?
我怎样才能实现这个目标?
提前致谢。
答案 0 :(得分:2)
如果要查询范围键上的条件,可以设置查询请求的“KeyConditions”属性。
这是一个java示例,它对散列键等于“id_1”且范围键大于或等于3的项进行查询
QueryRequest queryRequest = new QueryRequest();
queryRequest.setTableName("Query");
queryRequest.addKeyConditionsEntry("Hash", new Condition().withAttributeValueList(new AttributeValue("id_1")).withComparisonOperator(ComparisonOperator.EQ));
queryRequest.addKeyConditionsEntry("Range", new Condition().withAttributeValueList(new AttributeValue("3")).withComparisonOperator(ComparisonOperator.GE));
QueryResult result = dynamo.query(queryRequest);
for(Map<String, AttributeValue> item : result.getItems()) {
System.out.println(item);
}
从doc看起来关键条件支持范围键上的以下比较器:
情商| LE | LT | GE | GT | BEGINS_WITH | BETWEEN
对你的用例来说足够了吗?