- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在查询的实体有一个 HashKey
和一个 RangeKey
(数字)。当我在其上使用 batchGetItem
时,出现以下错误:
AWS Error Code: ValidationException, AWS Error Message: One or more parameter values were invalid: Mismatching attribute types between location and schema
架构:
Table: Daily
Hash Key: CustId (String)
Range Key: Dated (Number)
数据:
CustId : VisioNerdy
Dated : 1329071400000
代码:
List<Key> fkeys = new ArrayList<Key>(); //tableName="Daily", keys=["VisioNerdy"], ranges=[1329071400000]
Map<String, KeysAndAttributes> requestItems = new HashMap<String, KeysAndAttributes>();
for(int i = 0; i < keys.size(); i++)
{
String key = keys.get(i);
if(ranges == null)
fkeys.add(new Key().withHashKeyElement(new AttributeValue().withS(key)));
else
fkeys.add(new Key().withHashKeyElement(new AttributeValue().withS(key))
.withRangeKeyElement(new AttributeValue().withS(ranges.get(i).toString())));
}
requestItems.put(tableName, new KeysAndAttributes().withKeys(fkeys));
BatchGetItemRequest batchGetItemRequest = new BatchGetItemRequest().withRequestItems(requestItems);
BatchGetItemResult result = client.batchGetItem(batchGetItemRequest);
有什么线索吗?
最佳答案
您已经定义了 Hash and Range Type Primary Key 的范围属性作为Number 类型,但通过withS()
为您的请求准备其属性值作为String 类型:
fkeys.add(new Key().withHashKeyElement(new AttributeValue().withS(key))
.withRangeKeyElement(new AttributeValue().withS(ranges.get(i).toString())));
改变 withS(String s)至 withN(String s)应该相应地解决您的问题(令人困惑的是,这两种方法都需要 String 类型的参数):
fkeys.add(new Key().withHashKeyElement(new AttributeValue().withS(key))
.withRangeKeyElement(new AttributeValue().withN(ranges.get(i).toString())));
诚然,DynamoDB data types 的隐式弱类型仅基于 String 参数提交并不能完全简化开发 ;)
关于java - java中的batchGetItem API错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9254838/
我尝试使用 batchGetItem从表中返回多个项目的属性,但似乎它只适用于分区键和范围键的组合,但是如果我只想通过主键识别请求的项目怎么办?唯一的方法是创建没有范围键的表吗? // Add
是否可以使用batchgetitem api从dynamodb全局二级索引中检索行?如果我的目标是也基于某些非键属性从主表中检索数据,但应在 100 个项目的批次中检索数据 - GSI 索引是否不适合
我有一个名为 User 的表。它有一个用户 ID 的哈希键和一个组织 ID 的范围键。 如何返回所有组织 ID 为“3”的用户 (顺便说一下,这是一个 Lambda 函数) 这段代码给了我一个错误:
我正在尝试从Swift应用程序中的DynamoDB获取一些行。在下面代码的最后一行,我得到一个NSInvalidArgumentException。我认为一定是因为我的请求格式不正确,但是我不知道出了
方法 BatchGetItemRequest(Map requestItems) 不允许添加任何键或范围条件。如果没有范围键,BatchGetItemRequest 将失败。如何使用比较运算符指定范围
我有一个在 AWS DynamoDB 中执行 batchGetItem 的 Swift 函数。输出以 JSON 格式返回,但我无法解析它。下面是我试图用来解析数据的代码,以及 JSON 输出的样子。任
这里的想法是在查询通过 GSI 运行时并行运行多个 DynamoDB 查询。截至目前 BatchGetItems doesn't support querying over Indexes推荐的方法是
具体来说,什么时候使用一个或另一个更好?我现在正在使用 BatchGetItem,它看起来非常慢。 最佳答案 就检索单个项目的效率而言,您知道分区键(如果在表中使用了排序键,则为排序键),GetIte
我正在使用 GO SDK 并使用 DynamnoDB BatchGetItem API。 我看到了这个代码示例 - https://github.com/aws/aws-sdk-go/blob/mas
我们在过去几周开始在我们的项目中使用 DynamoDB,既作为缓存又作为系统中发生的事件的列表(请不要讨论为什么有更好的替代方案来实现这个,我已经争论过我自己在选择 DynamoDB 之前没有结果)。
哈希和范围都指定了,它还认为一个是空的?还是在谈论其他一些属性? 返回的 task.result() 为 nil,task.error() 表示: "Error Domain=com.amazonaw
使用 BatchGetItem 与并行发出多个 GetItem 有很大差异(在时间性能上)吗? 如果我可以使用 GetItem 并自己处理并行化,我的代码会更简洁。 但是,如果 BatchGetIte
我正在为我当前的应用程序构建一个无服务器后端,使用 dynamoDb 作为我的数据库。我使用 aws sam 将我的 lambda 函数上传到 aws。此外,我将所有表名作为全局变量传递给 lambd
我想调用 BatchGetItem 以使用集成请求中的 API Gateway json 映射模板从 DynamoDB 的简单表中获取多个文档。 使用 时,以下模板对我有用查询 获取单个项目的操作:
我想检索 500 个项目并且我知道它们的主键。 调用 BatchGetItem 是否比在 dynamodb 的循环中调用 GetItem 更有效? 最佳答案 是的。对于 GetItem,您将为每个项目
如果您请求超过 100 个项目,BatchGetItem 将返回一个 ValidationException 并显示消息“为 BatchGetItem 调用请求的项目太多。”有什么办法可以通过 bat
我一直在浏览 AWS DynamoDB 文档,但在我的一生中,我无法弄清楚 batchGetItem() 和 Query() 之间的核心区别是什么。两者都基于表和索引中的主键检索项目。唯一的区别在于检
我正在尝试使用 Node JS AWS-SDK 从 DynamoDB 表中获取项目。 getItem 函数工作正常,但 BatchGetItem 更难使用。 我使用官方文档: http://docs.
我在使用 Boto3/DynamoDB 时遇到困难 BatchGetItem 手术。我将不胜感激任何帮助或指导!如果这是一个新手问题,我对 python/aws 还很陌生,所以很抱歉。 当我执行操作时
我是一名优秀的程序员,十分优秀!