如果dynamodb中没有密钥,DynamoDb BatchGetItem
API的行为是什么?
它是返回空列表还是抛出异常?
阅读完他们的文档后我对此不确定:link 但我可能会遗漏一些东西。
答案 0 :(得分:0)
BatchGetItem
不会抛出异常。这些项目的结果将不会出现在响应中的Responses
地图中。这也在BatchGetItem
documentation:
如果请求的项目不存在,则不会在结果中返回。 对不存在的项目的请求消耗最小读取容量单位 根据阅读的类型。有关更多信息,请参阅容量 Amazon DynamoDB开发人员指南中的单位计算。
此行为也很容易验证。这是针对具有名为customer_id
的哈希键属性的表(我使用的完整示例是here):
dynamoDB.batchGetItem(new BatchGetItemSpec()
.withTableKeyAndAttributes(new TableKeysAndAttributes(EXAMPLE_TABLE_NAME)
.withHashOnlyKeys("customer_id", "ABCD", "EFGH")
.withConsistentRead(true)))
.getTableItems()
.entrySet()
.stream()
.forEach(System.out::println);
dynamoDB.batchGetItem(new BatchGetItemSpec()
.withTableKeyAndAttributes(new TableKeysAndAttributes(EXAMPLE_TABLE_NAME)
.withHashOnlyKeys("customer_id", "TTTT", "XYZ")
.withConsistentRead(true)))
.getTableItems()
.entrySet()
.stream()
.forEach(System.out::println);
输出:
example_table=[{ Item: {customer_email=jim@gmail.com, customer_name=Jim, customer_id=ABCD} }, { Item: {customer_email=garret@gmail.com, customer_name=Garret, customer_id=EFGH} }]
example_table=[]