Ambil Semua Item dari DynamoDB di Python (boto3)
Tidak ada "select all" di DynamoDB — membaca seluruh tabel berarti sebuah scan yang Anda paginasi sampai habis. Setiap response membawa paling banyak 1 MB; scan paginator bawaan boto3 mengikuti LastEvaluatedKey di setiap halaman untuk Anda.
Code
import boto3
client = boto3.client("dynamodb")
paginator = client.get_paginator("scan")
items = []
for page in paginator.paginate(TableName="Music"):
items.extend(page["Items"])
print(f"Table holds {len(items)} items")Penjelasan
- Paginator-nya adalah intinya — satu panggilan
scanTIDAK mengembalikan tabel; ia mengembalikan hingga 1 MB.client.get_paginator("scan")mengeluarkan request lanjutan (memasukkan kembaliLastEvaluatedKeysebagaiExclusiveStartKey) sampai tabel habis — loop yang orang lupa ketika mereka bertanya-tanya mengapa item "hilang". (Melakukannya dengan tangan? Terus panggil selama response berisiLastEvaluatedKey.) - Memori —
itemsmenampung seluruh tabel. Untuk tabel besar, proses setiappagedi dalam loop (tulis ke file, stream, agregasi) alih-alih menumpuknya. - Lebih cepat pada tabel besar: parallel scan — lewatkan
Segment=i, TotalSegments=Ndan jalankan N worker (thread/proses), masing-masing melakukan pagination pada segmennya sendiri. Total biaya sama, waktu jam dinding jauh lebih rendah. - Biaya — scan penuh membaca (dan menagih) setiap byte dari setiap item, setiap kali Anda menjalankannya.
ProjectionExpressionmengecilkan response, bukan tagihan; jangan taruh scan pada hot path — itulah gunanya query dan desain access-pattern. - Item kembali dalam DynamoDB JSON (
{"S": ...}). Lebih suka tipe Python native? Gunakan resource API (table.scan+ loopLastEvaluatedKeymanual — resource API tidak punya paginator).
Lakukan secara visual
Melihat sekilas sebuah tabel tidak perlu skrip: unduh DynoTable untuk menjelajah tabel apa pun dalam grid berpaginasi — ia melakukan paging melalui scan untuk Anda, tanpa loop yang bisa salah. Dan sebelum Anda scan-dan-bayar, kalkulator harga DynamoDB menunjukkan berapa biaya sebenarnya dari pembacaan penuh tabel Anda.
Contoh terkait
- Ambil semua item di Node.js — pembacaan penuh yang sama dengan loop eksplisit.
- Ambil semua item dengan AWS CLI — CLI melakukan paging untuk Anda.
- DynamoDB Scan di Python — melakukan scan dengan
FilterExpression. - Parallel scan — Segment/TotalSegments, jumlah worker, dan kapan repot-repot.
- Mengapa Scan DynamoDB saya lambat dan mahal? — model biaya dan cara menghindarinya.
- DynamoDB ProvisionedThroughputExceededException — membaca seluruh tabel adalah cara klasik untuk menabraknya.
- "The provided starting key is invalid" — key resume yang rusak dalam loop pagination.
References
- Scan — Amazon DynamoDB API Reference
- DynamoDB.Paginator.Scan — Boto3 documentation
- Scanning tables in DynamoDB — Amazon DynamoDB Developer Guide
- DynamoDB read and write operations (capacity unit consumption) — Amazon DynamoDB Developer Guide
Terakhir diverifikasi 2026-07-13 terhadap dokumentasi resmi AWS yang ditautkan di atas.