AWS CLI ile DynamoDB'den Tüm Öğeleri Alma
AWS CLI sayfalamayı gizler. aws dynamodb scan, tablonun gerektirdiği kadar 1 MB'lık hizmet çağrısı yapar ve tek bir birleşik sonuç yazdırır; dolayısıyla on öğe okuyan komut ile on milyon öğe okuyan komut aynı komuttur.
Kolaylık da tuzak da budur. Satır tek satır kalırken çağrı sayısı, bellek ve fatura tabloyla birlikte ölçeklenir.
Kod
aws dynamodb scan --table-name 'Music'Birleşik çıktı tablodaki her öğeyi barındırır:
{
"Items": [
{"Artist": {"S": "Arturo Sandoval"}, "SongTitle": {"S": "Cubano Chant"}, ...}
],
"Count": 1287,
"ScannedCount": 1287
}Açıklama
--no-paginatetek çağrı anahtarıdır — CLI'nin imleci izlemesini durdurur, böylece ilk sayfayı alırsınız, başka bir şey almazsınız. Bir göz atmak için uygun, tam bir okuma için yanlış (imleç nasıl çalışır).--page-sizeçıktıyı değil çağrı sayısını değiştirir — AWS bunu açıkça söyler: "Changing the page size doesn't affect the output; it affects only the number of API calls that need to be made to generate the output." Büyük bir sayfa zaman aşımına uğradığında ona başvurun, para tasarrufu için asla. Okuma maliyeti her iki durumda da aynıdır.--max-itemsçıktının durduğu veNextToken'ın başladığı yerdir — o kadar öğeyi artı--starting-tokeniçin bir devam belirteci yazdırır. Onu ve--page-size'ı aynı sayıya ayarlayın: AWS, farklı değerlerin "can get unexpected results with missing or duplicated items" konusunda uyarır.--querysizin makinenizde çalışır — yazdırılan sonuç üzerinde JMESPath'tir ve her öğe okunup faturalandırıldıktan sonra uygulanır. DynamoDB'nin gördüğü olan--projection-expression'dır (ayrılmış sözcükler için artı--expression-attribute-names) ve o da faturayı değil yanıtı küçültür. Bir--filter-expressionde öğeleri ücretlendirildikten sonra düşürür (filtreli Scan).- Her şey tamponlanır, sonra bir sayfalayıcıyla karşılaşır — CLI yazdırmadan önce her sayfayı biriktirir ve CLI v2 sonucu varsayılan olarak macOS ve Linux'ta
less, Windows'tamoreüzerinden gönderir. Büyük bir tabloda bu, aynı anda hem bir bellek sıçraması hem de takılmış bir terminaldir.--no-cli-pagerekleyin ya daAWS_PAGER'ı boş bir dizeye ayarlayın ve--max-itemsile dilimleyin. - Paralel tarama kabuktan da çalışır — her biri kendi dilimini otomatik sayfalayan N kopyayı
--segment i --total-segments Nile çalıştırın. Aynı toplam maliyet, çok daha düşük duvar saati (ne zaman değer).
Görsel olarak yapın
Tek satırlık bir komut pahalı bir komut olabilir. DynamoDB fiyatlandırma hesaplayıcısı, tablonuzun tam bir okumasına siz çalıştırmadan önce bir sayı koyar.
DynoTable tabloda bir terminal tamponunda değil bir ızgarada sayfalar ve o ızgaranın arkasındaki Scan'i bir aws dynamodb komutu olarak geri dışa aktarır. DynoTable'ı indirin.
İlgili örnekler
- Node.js'te tüm öğeleri alma — açık bir döngüyle aynı tam okuma.
- Python'da tüm öğeleri alma — boto3'ün sayfalayıcısıyla aynı tam okuma.
- AWS CLI ile DynamoDB Scan —
--filter-expressionile tarama. - Paralel taramalar — Segment/TotalSegments, işçi sayıları ve ne zaman uğraşmaya değer.
- DynamoDB Scan'im neden yavaş ve pahalı? — maliyet modeli ve ondan nasıl kaçınılır.
- DynamoDB ProvisionedThroughputExceededException — tüm tabloyu okumak buna çarpmanın klasik yoludur.
- "The provided starting key is invalid" — sayfalama döngüsünde bozulmuş bir devam anahtarı.
Kaynaklar
- Scan — Amazon DynamoDB API Reference
- scan — AWS CLI Command Reference
- Using AWS CLI pagination options — AWS CLI User Guide
- DynamoDB read and write operations (capacity unit consumption) — Amazon DynamoDB Developer Guide
En son 2026-07-28 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.