Ottenere tutti gli Item da DynamoDB con la AWS CLI
La AWS CLI nasconde la paginazione. aws dynamodb scan fa tutte le chiamate da 1 MB al servizio di cui la tabella ha bisogno e stampa un unico risultato combinato, quindi il comando che legge dieci Item e quello che ne legge dieci milioni sono lo stesso comando.
Questa è la comodità ed è la trappola. Il numero di chiamate, la memoria e la bolletta scalano tutti con la tabella mentre la riga resta una riga.
Codice
aws dynamodb scan --table-name 'Music'L'output combinato contiene ogni Item della tabella:
{
"Items": [
{"Artist": {"S": "Arturo Sandoval"}, "SongTitle": {"S": "Cubano Chant"}, ...}
],
"Count": 1287,
"ScannedCount": 1287
}Spiegazione
--no-paginateè l'interruttore a chiamata singola — impedisce alla CLI di seguire il cursore, quindi ottieni la prima pagina e nient'altro. Va bene per un'occhiata, è sbagliato per una lettura completa (come funziona il cursore).--page-sizecambia il numero di chiamate, non l'output — AWS lo dice chiaramente: "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." Usalo quando una pagina grande va in timeout, mai per risparmiare denaro. Il costo di lettura è identico in entrambi i casi.--max-itemsè dove si ferma l'output e iniziaNextToken— stampa quel numero di Item più un token di ripresa per--starting-token. Impostalo allo stesso valore di--page-size: AWS avverte che valori diversi "can get unexpected results with missing or duplicated items".--querygira sulla tua macchina — è JMESPath sul risultato stampato, applicato dopo che ogni Item è già stato letto e fatturato.--projection-expression(più--expression-attribute-namesper le parole riservate) è quello che DynamoDB vede davvero, e riduce la risposta, non la bolletta. Anche un--filter-expressionscarta gli Item dopo che sono stati addebitati (Scan con un filtro).- Tutto viene bufferizzato, poi incontra un pager — la CLI accumula ogni pagina prima di stampare, e la CLI v2 manda il risultato attraverso
lesssu macOS e Linux omoresu Windows per impostazione predefinita. Su una tabella grande è un picco di memoria e un terminale bloccato allo stesso tempo. Aggiungi--no-cli-pager, oppure impostaAWS_PAGERa stringa vuota, e taglia con--max-items. - Anche lo scan parallelo funziona dalla shell — esegui N copie con
--segment i --total-segments N, ciascuna che pagina automaticamente la propria fetta. Stesso costo totale, tempo reale molto più basso (quando ne vale la pena).
Fallo visivamente
Un comando su una riga può essere un comando costoso. Il calcolatore dei prezzi DynamoDB mette un numero su una lettura completa della tua tabella prima che tu la esegua.
DynoTable pagina la tabella in una griglia invece che in un buffer di terminale, ed esporta lo Scan dietro quella griglia come comando aws dynamodb. Scarica DynoTable.
Esempi correlati
- Ottenere tutti gli Item in Node.js — la stessa lettura completa con un loop esplicito.
- Ottenere tutti gli Item in Python — la stessa lettura completa con il paginator di boto3.
- DynamoDB Scan con la AWS CLI — scansionare con una
--filter-expression. - Scan paralleli — Segment/TotalSegments, numero di worker e quando vale la pena.
- Perché il mio Scan DynamoDB è lento e costoso? — il modello di costo e come evitarlo.
- DynamoDB ProvisionedThroughputExceededException — leggere l'intera tabella è il modo classico per incapparci.
- "The provided starting key is invalid" — una chiave di ripresa storpiata nel loop di paginazione.
Riferimenti
- 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
Ultima verifica 2026-07-28 rispetto alla documentazione ufficiale AWS collegata sopra.