DynamoDB Scan di Java (AWS SDK v2)

Scan membaca setiap item dalam sebuah tabel atau index, halaman demi halaman, lalu secara opsional membuang baris dengan FilterExpression. Di AWS SDK for Java 2.x Anda membangun ScanRequest dan membiarkan scanPaginator bawaan mengikuti LastEvaluatedKey hingga seluruh tabel terbaca.

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

Penjelasan

  • filterExpression — diterapkan setelah pembacaan, di server. Ia mengecilkan response tetapi bukan biayanya: Anda membayar untuk membaca setiap item yang di-scan, terfilter atau tidak.
  • expressionAttributeNames — atribut yang difilter diberi alias (#filter0Year), yang menjaga reserved word seperti Year tetap aman.
  • Paginasi — setiap halaman Scan membaca paling banyak 1 MB sebelum pemfilteran, jadi halaman yang difilter bisa kembali kosong sementara tabel masih memiliki kecocokan. ddb.scanPaginator(request) mengembalikan ScanIterable yang terus meminta halaman hingga LastEvaluatedKey habis — jangan pernah berhenti di halaman pertama.
  • Tambahkan .limit(...) untuk membatasi item yang di-scan per halaman (pra-filter) — ia tidak membatasi item yang dikembalikan.
  • Untuk scan seluruh tabel yang besar, bagi pekerjaan antar worker dengan .segment(...) / .totalSegments(...) (sebuah parallel scan).
  • Lebih baik gunakan Query. Scan membaca seluruh tabel; pada apa pun selain tabel yang sangat kecil, ia lambat dan mahal.

Lakukan secara visual

Menyusun filter dengan tangan? DynamoDB Expression Builder membangun FilterExpression + map name/value dan menyalin kode yang bisa dijalankan.

Untuk menjelajahi tabel di GUI — dengan grid hasil yang terfilter dan berpaginasi serta copy-as-code — unduh DynoTable, alih-alih scan membabi buta dari sebuah script.

Contoh terkait

References

Terakhir diverifikasi 2026-07-13 terhadap dokumentasi resmi AWS yang ditautkan di atas.

Bangun request ini secara visual

Susun operasi ini di DynamoDB Query Builder gratis — key condition, filter, index, Limit, urutan sortir, dan loop paginasi — lalu salin kembali sebagai program SDK v3, CLI, atau boto3 yang bisa dijalankan.

Buka DynamoDB Query Builder

Bekerja dengan DynamoDB tanpa Console

DynoTable adalah klien desktop yang cepat untuk DynamoDB — jelajahi tabel, jalankan query gaya SQL, dan edit Item secara lokal.