DynamoDB Scan dengan AWS CLI

aws dynamodb scan melakukan paginasi otomatis, yang praktis sekaligus berarti satu-satunya angka yang akan Anda pakai untuk menilai kerusakannya salah secara default. Lihat Query vs. Scan untuk tahu kapan operasi ini sebaiknya dihindari sama sekali.

Kode

aws dynamodb scan \
  --table-name 'Music' \
  --filter-expression '#filter0 >= :filterValue0' \
  --expression-attribute-names '{"#filter0":"Year"}' \
  --expression-attribute-values '{":filterValue0":{"N":"2010"}}'

--return-consumed-capacity melaporkan satu halaman, bukan keseluruhan scan

Fixture-nya berisi 600 lagu berukuran kira-kira 3,9 KB masing-masing, dan 8 di antaranya cocok. Tambahkan --return-consumed-capacity TOTAL pada perintah itu dan CLI mencetak:

{ "Count": 8, "ScannedCount": 600, "CU": 128.5 }

Scan itu sebenarnya berbiaya 284,5 unit baca di sepanjang tiga halaman. Count dan ScannedCount dijumlahkan dari ketiganya; ConsumedCapacity diambil dari yang pertama dan sisanya dibuang. Itu bukan bug melainkan aturan yang memang dideklarasikan — konfigurasi paginator DynamoDB milik botocore mendaftar Count dan ScannedCount sebagai result key dan ConsumedCapacity sebagai non-aggregate key.

Petunjuknya: angkanya bergerak padahal pekerjaannya tidak. Tabel yang sama, 600 item yang sama dibaca, satu flag tambahan:

--page-size 50  ->  { "Count": 8, "ScannedCount": 600, "CU": 24.0 }

Kalau Anda menakar sebuah tabel dari scan lewat CLI, jumlahkan sendiri halaman-halamannya dengan --page-size plus --starting-token, atau baca kapasitasnya dari CloudWatch.

--max-items tidak menghentikan scan-nya

--max-items 3 terbaca seperti sampel murah. Ia bukan:

--max-items 3  ->  { "Count": 8, "ScannedCount": 600 }

CLI terus meminta halaman sampai ia punya cukup kecocokan, yang dengan filter selektif berarti seluruh tabel, lalu memangkas daftar yang dicetak. Token lanjutannya sendiri mengatakannya terang-terangan:

{"ExclusiveStartKey": {"Artist": {"S": "Arturo Sandoval"},
 "SongTitle": {"S": "Cubano Chant 0541"}}, "boto_truncate_amount": 3}

boto_truncate_amount adalah penghitung di sisi klien. Untuk membatasi apa yang dibaca DynamoDB, pakai --page-size, yang menyetel Limit milik API pada setiap request di baliknya, lalu lanjutkan dengan --starting-token:

aws dynamodb scan \
  --table-name 'Music' \
  --page-size 500 \
  --max-items 100 \
  --starting-token "$NEXT_TOKEN"

Diukur 2026-07-28 terhadap DynamoDB Local (amazon/dynamodb-local) dengan aws-cli/2.36.9. JSON di atas adalah keluaran CLI itu sendiri, dibentuk ulang dengan --query agar muat lebarnya.

Penjelasan

  • --filter-expression berjalan setelah pembacaan, jadi ia mengecilkan keluarannya, bukan tagihannya. #filter0 menjadi alias Year lewat --expression-attribute-names karena Year adalah reserved word.
  • --expression-attribute-values menuntut angkanya di-quote dua kali: quote shell mengelilingi JSON-nya, dan nilainya berupa string JSON. Menghilangkan quote bagian dalam tak pernah sampai ke DynamoDB — CLI menolaknya secara lokal dengan Invalid type for parameter ExpressionAttributeValues.:v.N, value: 2010, type: <class 'int'>, valid types: <class 'str'>.
  • --page-size adalah flag yang mengubah panggilan API-nya. Ia menjadi Limit pada setiap request di baliknya, membatasi jumlah item yang dievaluasi per halaman. Sisa keluarga paginasinya (--max-items, --starting-token) hanyalah CLI mengelola keluarannya sendiri.
  • Parallel scan butuh --segment N --total-segments M per worker, dan setiap worker memegang --starting-token miliknya sendiri. Ia membeli waktu jam dinding, bukan kapasitas.

Lakukan secara visual

DynamoDB Expression Builder memancarkan filter dan kedua map JSON-nya sudah ter-escape untuk shell, yang menghapus lapisan quoting yang membuat expression CLI gagal sebelum DynamoDB sempat melihatnya.

Untuk menjelajahi tabel dalam GUI, dengan grid yang terfilter dan berpaginasi, unduh DynoTable alih-alih melakukan scan buta dari terminal.

Panduan terkait

Referensi

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

Klien desktop DynamoDB yang cepat dan menjalankan SQL sungguhan yang tidak bisa dijalankan DynamoDB — JOINs, GROUP BY, agregasi — dengan editing visual dan agen AI pada kunci Bedrock milik Anda sendiri.

Uji coba gratis 30 hari, tanpa kartu kredit — lalu paket Free tanpa batas waktu.