DynamoDB Query em Java (AWS SDK v2)

Query lê todos os itens que compartilham uma chave de partição, opcionalmente restringindo pela chave de classificação. No AWS SDK for Java 2.x você constrói um QueryRequest com uma keyConditionExpression, e o queryPaginator embutido segue o LastEvaluatedKey por todas as páginas de resultados por você.

Code

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
import software.amazon.awssdk.services.dynamodb.model.AttributeValue;
import software.amazon.awssdk.services.dynamodb.model.DynamoDbException;
import software.amazon.awssdk.services.dynamodb.model.QueryRequest;
import software.amazon.awssdk.services.dynamodb.model.QueryResponse;

public class QueryExample {
    public static void main(String[] args) {
        try (DynamoDbClient ddb = DynamoDbClient.builder()
                .region(Region.US_EAST_1)
                .build()) {

            Map<String, String> names = new HashMap<>();
            names.put("#hashKey", "Artist");
            names.put("#rangeKey", "SongTitle");

            Map<String, AttributeValue> values = new HashMap<>();
            values.put(":hashKeyValue", AttributeValue.builder().s("Arturo Sandoval").build());
            values.put(":rangeKeyValue", AttributeValue.builder().s("C").build());

            QueryRequest request = QueryRequest.builder()
                    .tableName("Music")
                    .keyConditionExpression(
                            "#hashKey = :hashKeyValue AND begins_with(#rangeKey, :rangeKeyValue)")
                    .expressionAttributeNames(names)
                    .expressionAttributeValues(values)
                    .build();

            List<Map<String, AttributeValue>> items = new ArrayList<>();
            for (QueryResponse page : ddb.queryPaginator(request)) {
                items.addAll(page.items());
            }
            System.out.println("Found " + items.size() + " items");
        } catch (DynamoDbException e) {
            System.err.println(e.getMessage());
        }
    }
}

Explicação

  • keyConditionExpression — deve incluir uma igualdade na chave de partição (#hashKey = :hashKeyValue) mais no máximo uma condição de chave de classificação (=, <, <=, >, >=, BETWEEN ou begins_with). Os aliases #hashKey/#rangeKey resolvem para Artist/SongTitle via expressionAttributeNames (seguro contra palavras reservadas).
  • expressionAttributeValues — o mapa :placeholderAttributeValue tipado.
  • Paginação — um Query retorna no máximo 1 MB. ddb.queryPaginator(request) retorna um QueryIterable que emite requisições subsequentes de forma preguiçosa enquanto você itera as páginas; cada página QueryResponse carrega uma lista items(). (Fazendo na mão? Alimente lastEvaluatedKey() de volta como .exclusiveStartKey(...) até ele ficar vazio.)
  • Adicione .scanIndexForward(false) para inverter a ordem da chave de classificação (crescente é o padrão).
  • Consulte um índice secundário adicionando .indexName("...").
  • Prefere objetos Java simples? O DynamoDB Enhanced Client (software.amazon.awssdk.enhanced.dynamodb) expõe a mesma query com classes bean anotadas.

Faça visualmente

O DynamoDB Expression Builder monta a key condition e copia código executável, para que você não escreva à mão os mapas de placeholder e valor.

Para executar queries contra tabelas reais numa GUI — formulário de key-condition, grade paginada, copiar como código — baixe o DynoTable.

Exemplos relacionados

References

Última verificação em 2026-07-13 contra a documentação oficial da AWS vinculada acima.

Monte esta solicitação visualmente

Componha esta operação no Construtor de Consultas do DynamoDB gratuito — key condition, filtro, índice, Limit, ordem de classificação e um laço de paginação — e copie de volta como um programa executável para SDK v3, CLI ou boto3.

Abrir o Construtor de Consultas do DynamoDB

Trabalhe com o DynamoDB sem o Console

O DynoTable é um cliente desktop rápido para o DynamoDB — navegue pelas tabelas, execute consultas no estilo SQL e edite itens localmente.