DynamoDB Query di Java (AWS SDK v2)
Query membaca setiap item yang berbagi satu partition key, secara opsional dipersempit dengan sort key. Di AWS SDK for Java 2.x Anda membangun QueryRequest dengan keyConditionExpression, dan queryPaginator bawaan mengikuti LastEvaluatedKey di setiap halaman hasil untuk Anda.
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());
}
}
}Penjelasan
keyConditionExpression— harus menyertakan kesetaraan pada partition key (#hashKey = :hashKeyValue) ditambah paling banyak satu kondisi sort-key (=,<,<=,>,>=,BETWEEN, ataubegins_with). Alias#hashKey/#rangeKeydi-resolve keArtist/SongTitleviaexpressionAttributeNames(aman terhadap reserved word).expressionAttributeValues— map:placeholder→ typed-AttributeValue.- Paginasi — satu
Querymengembalikan paling banyak 1 MB.ddb.queryPaginator(request)mengembalikanQueryIterableyang secara malas mengeluarkan request lanjutan saat Anda mengiterasi halaman; setiap halamanQueryResponsemembawa daftaritems(). (Melakukannya dengan tangan? UmpankanlastEvaluatedKey()kembali sebagai.exclusiveStartKey(...)hingga kosong.) - Tambahkan
.scanIndexForward(false)untuk membalik urutan sort-key (menaik adalah default). - Kueri sebuah secondary index dengan menambahkan
.indexName("..."). - Lebih suka objek Java biasa? DynamoDB Enhanced Client (
software.amazon.awssdk.enhanced.dynamodb) mengekspos kueri yang sama dengan kelas bean beranotasi.
Lakukan secara visual
DynamoDB Expression Builder menyusun key condition dan menyalin kode yang bisa dijalankan, jadi Anda tidak perlu menulis map placeholder dan value dengan tangan.
Untuk menjalankan kueri terhadap tabel nyata di GUI — form key-condition, grid berpaginasi, copy-as-code — unduh DynoTable.
Contoh terkait
- DynamoDB Query di Go — kueri yang sama dengan AWS SDK for Go v2.
- DynamoDB Scan di Java — ketika Anda tidak bisa masuk ke sebuah partisi lewat key.
- Query vs. Scan — mengapa
Queryadalah default yang tepat. - Key condition expressions — setiap operator partition/sort-key yang legal.
- "Query condition missed key schema element" — key condition menyebut atribut yang salah atau melewati partition key.
- "Query key condition not supported" — operator yang tidak bisa digunakan key condition, seperti contains atau kondisi sort-key kedua.
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
Terakhir diverifikasi 2026-07-13 terhadap dokumentasi resmi AWS yang ditautkan di atas.