DynamoDB Query in Java (AWS SDK v2)

Query liest jedes Item, das denselben Partitionsschlüssel teilt, und grenzt optional über den Sortierschlüssel ein. Im AWS SDK for Java 2.x baust du einen QueryRequest mit einer keyConditionExpression, und der eingebaute queryPaginator folgt LastEvaluatedKey über jede Ergebnisseite für dich.

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

Erklärung

  • keyConditionExpression — muss eine Gleichheit auf dem Partitionsschlüssel enthalten (#hashKey = :hashKeyValue) plus höchstens eine Sortierschlüssel-Bedingung (=, <, <=, >, >=, BETWEEN oder begins_with). Die Aliase #hashKey/#rangeKey lösen per expressionAttributeNames zu Artist/SongTitle auf (reservierte-Wort-sicher).
  • expressionAttributeValues — die :placeholder → typisierter-AttributeValue-Map.
  • Pagination — ein Query gibt höchstens 1 MB zurück. ddb.queryPaginator(request) gibt ein QueryIterable zurück, das beim Iterieren der Seiten träge Folgeanfragen absetzt; jede QueryResponse-Seite trägt eine items()-Liste. (Von Hand? Gib lastEvaluatedKey() als .exclusiveStartKey(...) zurück, bis es leer ist.)
  • Füge .scanIndexForward(false) hinzu, um die Sortierschlüssel-Reihenfolge umzukehren (aufsteigend ist der Standard).
  • Frage einen Sekundärindex ab, indem du .indexName("...") hinzufügst.
  • Lieber schlichte Java-Objekte? Der DynamoDB Enhanced Client (software.amazon.awssdk.enhanced.dynamodb) stellt dieselbe Abfrage mit annotierten Bean-Klassen bereit.

Visuell erledigen

Der DynamoDB Expression Builder stellt die Schlüsselbedingung zusammen und kopiert lauffähigen Code, sodass du keine Platzhalter- und Wert-Maps von Hand schreiben musst.

Um Abfragen gegen echte Tabellen in einer GUI auszuführen — Schlüsselbedingungs-Formular, paginiertes Raster, Copy-as-Code — lade DynoTable herunter.

Verwandte Beispiele

References

Zuletzt verifiziert am 2026-07-13 gegen die oben verlinkte offizielle AWS-Dokumentation.

Diesen Request visuell bauen

Stelle diese Operation im kostenlosen DynamoDB Query Builder zusammen — Key-Bedingung, Filter, Index, Limit, Sortierreihenfolge und eine Paginierungsschleife — und kopiere sie als lauffähiges SDK-v3-, CLI- oder boto3-Programm zurück.

DynamoDB Query Builder öffnen

Mit DynamoDB ohne die Console arbeiten

DynoTable ist ein schneller Desktop-Client für DynamoDB — durchsuche Tabellen, führe SQL-artige Queries aus und bearbeite Items lokal.