DynamoDB Query en Java (AWS SDK v2)

Query lee todos los items que comparten una clave de partición, acotando opcionalmente por la clave de ordenación. En AWS SDK para Java 2.x construyes un QueryRequest con un keyConditionExpression, y el queryPaginator integrado sigue LastEvaluatedKey por ti a través de cada página de resultados.

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());
        }
    }
}

Explicación

  • keyConditionExpression — debe incluir una igualdad sobre la clave de partición (#hashKey = :hashKeyValue) más como máximo una condición de clave de ordenación (=, <, <=, >, >=, BETWEEN o begins_with). Los alias #hashKey/#rangeKey se resuelven a Artist/SongTitle mediante expressionAttributeNames (a salvo de palabras reservadas).
  • expressionAttributeValues — el mapa :placeholderAttributeValue tipado.
  • Paginación — un Query devuelve como máximo 1 MB. ddb.queryPaginator(request) devuelve un QueryIterable que emite solicitudes de seguimiento de forma perezosa a medida que iteras las páginas; cada página QueryResponse lleva una lista items(). (¿Hacerlo a mano? Vuelve a alimentar lastEvaluatedKey() como .exclusiveStartKey(...) hasta que esté vacío.)
  • Añade .scanIndexForward(false) para invertir el orden de la clave de ordenación (el ascendente es el valor por defecto).
  • Consulta un índice secundario añadiendo .indexName("...").
  • ¿Prefieres objetos Java simples? El DynamoDB Enhanced Client (software.amazon.awssdk.enhanced.dynamodb) expone la misma consulta con clases de bean anotadas.

Hazlo visualmente

El DynamoDB Expression Builder monta la condición de clave y copia código ejecutable, así no escribes a mano los mapas de marcadores y valores.

Para ejecutar consultas contra tablas reales en una interfaz gráfica — formulario de condición de clave, cuadrícula paginada, copiar como código — descarga DynoTable.

Ejemplos relacionados

References

Verificado por última vez el 2026-07-13 contra la documentación oficial de AWS enlazada arriba.

Construye esta solicitud visualmente

Compón esta operación en el Generador de consultas de DynamoDB gratuito —condición de clave, filtro, índice, Limit, orden de clasificación y un bucle de paginación— y cópiala de vuelta como un programa ejecutable para SDK v3, CLI o boto3.

Abrir el Generador de consultas de DynamoDB

Trabaja con DynamoDB sin la Consola

DynoTable es un cliente de escritorio rápido para DynamoDB: explora tablas, ejecuta consultas estilo SQL y edita Items localmente.