Java'da DynamoDB Query (AWS SDK v2)

Query, bir bölüm anahtarını paylaşan her öğeyi okur ve isteğe bağlı olarak sıralama anahtarına göre daraltır. Java 2.x için AWS SDK'da bir keyConditionExpression ile bir QueryRequest oluşturursunuz ve yerleşik queryPaginator, sizin için her sonuç sayfasında LastEvaluatedKey'i takip eder.

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

Açıklama

  • keyConditionExpression — bölüm anahtarı üzerinde bir eşitlik (#hashKey = :hashKeyValue), artı en fazla bir sıralama anahtarı koşulu (=, <, <=, >, >=, BETWEEN veya begins_with) içermelidir. #hashKey/#rangeKey takma adları expressionAttributeNames aracılığıyla Artist/SongTitle'a çözümlenir (ayrılmış sözcük güvenli).
  • expressionAttributeValues:placeholder → türlü-AttributeValue eşlemesi.
  • Sayfalama — bir Query en fazla 1 MB döndürür. ddb.queryPaginator(request), sayfalarda ilerledikçe tembel biçimde takip istekleri yayan bir QueryIterable döndürür; her QueryResponse sayfası bir items() listesi taşır. (Elle mi yapıyorsunuz? Boş olana kadar lastEvaluatedKey()'i .exclusiveStartKey(...) olarak geri besleyin.)
  • Sıralama anahtarı sırasını ters çevirmek için .scanIndexForward(false) ekleyin (artan varsayılandır).
  • .indexName("...") ekleyerek bir ikincil indeksi sorgulayın.
  • Düz Java nesnelerini mi tercih edersiniz? DynamoDB Enhanced Client (software.amazon.awssdk.enhanced.dynamodb), aynı sorguyu açıklamalı bean sınıflarıyla sunar.

Görsel olarak yapın

DynamoDB Expression Builder, anahtar koşulunu bir araya getirir ve çalıştırılabilir kodu kopyalar; böylece yer tutucu ve değer eşlemelerini elle yazmazsınız.

Gerçek tablolara karşı bir grafik arayüzde (GUI) sorgu çalıştırmak için — anahtar-koşul formu, sayfalanmış ızgara, kod olarak kopyalama — DynoTable'ı indirin.

İlgili örnekler

References

En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.

Bu isteği görsel olarak oluşturun

Bu operasyonu ücretsiz DynamoDB Sorgu Oluşturucuda kurun — anahtar koşulu, filtre, index, Limit, sıralama yönü ve bir sayfalama döngüsü — ve çalıştırılabilir bir SDK v3, CLI veya boto3 programı olarak geri kopyalayın.

DynamoDB Sorgu Oluşturucuyu aç

Console olmadan DynamoDB ile çalışın

DynoTable, DynamoDB için hızlı bir masaüstü istemcisidir — tablolara göz atın, SQL tarzı sorgular çalıştırın ve item'ları yerel olarak düzenleyin.