Java'da DynamoDB Scan (AWS SDK v2)

Scan, bir tablo veya indekteki her öğeyi sayfa sayfa okur, ardından isteğe bağlı olarak bir FilterExpression ile satırları eler. Java 2.x için AWS SDK'da bir ScanRequest oluşturur ve yerleşik scanPaginator'ın tablonun tamamı okunana kadar LastEvaluatedKey'i takip etmesini sağlarsınız.

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.ScanRequest;
import software.amazon.awssdk.services.dynamodb.model.ScanResponse;

public class ScanExample {
    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("#filter0", "Year");

            Map<String, AttributeValue> values = new HashMap<>();
            values.put(":filterValue0", AttributeValue.builder().n("2010").build());

            ScanRequest request = ScanRequest.builder()
                    .tableName("Music")
                    .filterExpression("#filter0 >= :filterValue0")
                    .expressionAttributeNames(names)
                    .expressionAttributeValues(values)
                    .build();

            List<Map<String, AttributeValue>> items = new ArrayList<>();
            for (ScanResponse page : ddb.scanPaginator(request)) {
                items.addAll(page.items());
            }
            System.out.println("Matched " + items.size() + " items");
        } catch (DynamoDbException e) {
            System.err.println(e.getMessage());
        }
    }
}

Açıklama

  • filterExpression — okumadan sonra, sunucuda uygulanır. Yanıtı küçültür ama maliyeti değil: filtrelenmiş olsun ya da olmasın, taranan her öğeyi okumak için ödeme yaparsınız.
  • expressionAttributeNames — filtrelenen öznitelik bir takma ad alır (#filter0Year); bu da Year gibi ayrılmış sözcükleri güvende tutar.
  • Sayfalama — her Scan sayfası filtrelemeden önce en fazla 1 MB okur; bu nedenle tabloda hâlâ eşleşmeler varken filtrelenmiş bir sayfa boş dönebilir. ddb.scanPaginator(request), LastEvaluatedKey tükenene kadar sayfa istemeye devam eden bir ScanIterable döndürür — asla ilk sayfada durmayın.
  • Sayfa başına (filtreleme öncesi) taranan öğeleri sınırlamak için .limit(...) ekleyin — döndürülen öğeleri sınırlamaz.
  • Büyük bir tam tablo taraması için .segment(...) / .totalSegments(...) (bir paralel tarama) ile işi çalışanlara bölün.
  • Query'yi tercih edin. Scan tablonun tamamını okur; çok küçük bir tablo dışında her şeyde yavaş ve pahalıdır.

Görsel olarak yapın

Bir filtreyi elle mi oluşturuyorsunuz? DynamoDB Expression Builder, FilterExpression + ad/değer eşlemelerini oluşturur ve çalıştırılabilir kodu kopyalar.

Bir betikten körlemesine taramak yerine tabloları bir grafik arayüzde (GUI) keşfetmek için — filtrelenmiş, sayfalanmış sonuç ızgaraları ve 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.