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 (=,<,<=,>,>=,BETWEENobegins_with). Los alias#hashKey/#rangeKeyse resuelven aArtist/SongTitlemedianteexpressionAttributeNames(a salvo de palabras reservadas).expressionAttributeValues— el mapa:placeholder→AttributeValuetipado.- Paginación — un
Querydevuelve como máximo 1 MB.ddb.queryPaginator(request)devuelve unQueryIterableque emite solicitudes de seguimiento de forma perezosa a medida que iteras las páginas; cada páginaQueryResponselleva una listaitems(). (¿Hacerlo a mano? Vuelve a alimentarlastEvaluatedKey()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
- DynamoDB Query en Go — la misma consulta con AWS SDK para Go v2.
- DynamoDB Scan en Java — cuando no puedes entrar por clave en una partición.
- Query vs. Scan — por qué
Queryes el valor por defecto correcto. - Expresiones de condición de clave — cada operador legal de clave de partición/ordenación.
- "Query condition missed key schema element" — la condición de clave nombra el atributo incorrecto u omite la clave de partición.
- "Query key condition not supported" — un operador que la condición de clave no puede usar, como contains o una segunda condición de clave de ordenación.
References
- Query — Amazon DynamoDB API Reference
- Use Query with an AWS SDK or CLI — Amazon DynamoDB Developer Guide
- DynamoDbClient — AWS SDK for Java 2.x API Reference
- QueryRequest — AWS SDK for Java 2.x API Reference
- Querying tables — Amazon DynamoDB Developer Guide
Verificado por última vez el 2026-07-13 contra la documentación oficial de AWS enlazada arriba.