如何在导入数据时向amazon dynamodb表添加新字段?

时间:2014-06-15 20:12:27

标签: amazon-web-services amazon-dynamodb

我正在尝试使用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?

我怎样才能实现这个目标?

提前致谢。

1 个答案:

答案 0 :(得分:2)

如果要查询范围键上的条件,可以设置查询请求的“KeyConditions”属性。

http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Query.html#DDB-Query-request-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

对你的用例来说足够了吗?