使用JavaSDK2查询100多个与分区键匹配的DynamoDB项?

使用JavaSDK2查询100多个与分区键匹配的DynamoDB项?,java,amazon-web-services,aws-java-sdk-2.x,aws-java-sdk-dynamodb,Java,Amazon Web Services,Aws Java Sdk 2.x,Aws Java Sdk Dynamodb,如何使用aws java sdk 2查询dynamodb表中与特定分区键匹配的100多个项? 如果需要使用与哈希键匹配的行数。此方法接受需要的 当我用一个哈希键(而不是排序键)构造一个KeysandAttribute时,我得到以下异常 DynamodBeException:提供的键元素与架构不匹配 但是,如果我在KeysandAttribute中提供了排序键,那么batchGetItemPaginator方法就可以正常工作 那么,BatchGetItemRequest如何仅使用主键(无排序键)构

如何使用aws java sdk 2查询dynamodb表中与特定分区键匹配的100多个项?

如果需要使用与哈希键匹配的行数。此方法接受需要的

当我用一个哈希键(而不是排序键)构造一个KeysandAttribute时,我得到以下异常

DynamodBeException:提供的键元素与架构不匹配

但是,如果我在KeysandAttribute中提供了排序键,那么batchGetItemPaginator方法就可以正常工作

那么,BatchGetItemRequest如何仅使用主键(无排序键)构建呢

注意:我的问题不是重复的。如果行数超过100,则另一个问题不涉及所需的分页


提前感谢您的考虑和回复。

主键>>分区+哈希键

用于通过主键获取一项

用于使用多个主键从多个表中获取多个项。所以,我们需要传递分区列表和HashKey

我们永远不能使用部分键(即分区键)执行getItem或batchGetItem

要仅通过分区键获取项,我们必须使用api,它最多返回1MB的数据。要获取具有特定分区键的所有记录,我们可以使用exclusiveStartKey多次调用查询api进行分页

.exclusiveStartKey(exclusiveStartKey)
帮助我们在特定记录之后开始

.limit(10)
通常设置为一个合理的数字,其总大小不超过1MB。如果不考虑任何项目,我们可以将其排除在外

response.lastEvaluatedKey()
从要用于下一次查询的响应中捕获此项

public static Map<String, AttributeValue> queryTable(DynamoDbClient ddb, String tableName, String partitionKeyName,
        String partitionKeyVal, Map<String, AttributeValue> exclusiveStartKey) {

    Map<String, AttributeValue> lastEvaluatedKey = null;

    HashMap<String, AttributeValue> attrValues = new HashMap<String, AttributeValue>();
    attrValues.put(":" + partitionKeyName, AttributeValue.builder().s(partitionKeyVal).build());
    QueryRequest queryReq = QueryRequest.builder().tableName(tableName).exclusiveStartKey(exclusiveStartKey)
            .keyConditionExpression(partitionKeyName + " = :" + partitionKeyName)
            .expressionAttributeValues(attrValues).limit(10).build();

    try {
        QueryResponse response = ddb.query(queryReq);
        lastEvaluatedKey = response.lastEvaluatedKey();
    } catch (DynamoDbException e) {
        System.err.println(e.getMessage());
        System.exit(1);
    }
    return lastEvaluatedKey;
}

谢谢你的回复!
query
BatchGetItem
之间的澄清非常有用。但是,查询文档声明响应最多为1MB。您能将示例更新为包含分页吗?@RamónJRomeroyVigil用分页查询示例更新了答案
public static void main(String[] args) {

    Region region = Region.US_EAST_1;
    DynamoDbClient ddb = DynamoDbClient.builder().region(region).build();

    Map<String, AttributeValue> lastEvaluatedKey = null;
    // Loop until we don't get lastEvaluatedKey 
    do {
        System.out.println("---------DynamoDb Query with Exclusive Start Key------------" + lastEvaluatedKey);
        lastEvaluatedKey = queryTable(ddb, "test", "pk", "1", lastEvaluatedKey);
    } while (lastEvaluatedKey != null && !lastEvaluatedKey.isEmpty());

    ddb.close();
}