【问题标题】:DynamoDBMapper v2 exceptionDynamoDBMapper v2 异常
【发布时间】:2014-02-15 09:56:55
【问题描述】:

我下载了 AWS Java SDK 1.4.5 版,但在迁移 DynamoDB 表上的查询时遇到问题。这是一个简单的哈希 + 范围查询。

V1 工作正常:

Condition c = new Condition().withComparisonOperator(ComparisonOperator.LT)
                         .withAttributeValueList(new AttributeValue(new Date().toString()));
DynamoDBQueryExpression q = new DynamoDBQueryExpression(new  AttributeValue("john")).withRangeKeyCondition(c);

API 的 V2 似乎有点不同。方法签名更改需要将代码重写为:

Condition c = new Condition().withComparisonOperator(ComparisonOperator.LT)
                                 .withAttributeValueList(new AttributeValue(new Date().toString()));
DynamoDBQueryExpression q = new DynamoDBQueryExpression()
                                    .withIndexName("user")
                                    .withHashKeyValues("john")
                                    .withRangeKeyCondition("timestamp", c);

AWS SDK 抛出异常:

The range key(timestamp) in the query is the primary key of the table, not the range key of index(user)                                        

是否有代码示例说明如何使用 DynamoDB 的新 v2 api 执行查询?

【问题讨论】:

  • 哈希和范围属性名称是什么?
  • Chen,表名是Users,有一个hash和range key。 has 是“用户”,范围是“时间戳”。注意:自从我在 StackOverflow 上发布此内容后,我已经能够使用 AWS 低级 Java API 来实现此功能。我仍然无法使用更高级别的 API 解决这个问题。

标签: amazon-dynamodb


【解决方案1】:

抱歉,如果这晚了,但如果它对您或其他任何人有帮助,您的代码的问题是当您调用 .withIndexName("john") 时。

您使用withIndexName() 使用本地或全局二级索引进行查询;不适用于使用表的哈希键或哈希键和范围键的查询。 DynamoDB 正在寻找名为 "john" 的本地或全局二级索引,而您想要搜索哈希键为 "john" 的项目。

【讨论】:

    猜你喜欢
    • 2021-08-15
    • 2014-04-05
    • 1970-01-01
    • 2020-10-25
    • 2013-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-16
    相关资源
    最近更新 更多