Obtener todos los Items de DynamoDB con la AWS CLI
La AWS CLI te esconde la paginación. aws dynamodb scan hace tantas llamadas de 1 MB al servicio como necesite la tabla e imprime un único resultado combinado, así que el comando que lee diez Items y el que lee diez millones son el mismo comando.
Esa es la comodidad y la trampa. El número de llamadas, la memoria y la factura escalan con la tabla mientras la línea sigue siendo una línea.
Código
aws dynamodb scan --table-name 'Music'La salida combinada contiene todos los Items de la tabla:
{
"Items": [
{"Artist": {"S": "Arturo Sandoval"}, "SongTitle": {"S": "Cubano Chant"}, ...}
],
"Count": 1287,
"ScannedCount": 1287
}Explicación
--no-paginatees el interruptor de una sola llamada — impide que la CLI siga el cursor, así que obtienes la primera página y nada más. Vale para echar un vistazo, no para una lectura completa (cómo funciona el cursor).--page-sizecambia el número de llamadas, no la salida — AWS lo dice sin rodeos: "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." Recurre a él cuando una página grande dé timeout, nunca para ahorrar dinero. El coste de lectura es idéntico en ambos casos.--max-itemses donde acaba la salida y empiezaNextToken— imprime esa cantidad de Items más un token de reanudación para--starting-token. Ponlo igual que--page-size: AWS avisa de que con valores distintos "can get unexpected results with missing or duplicated items".--queryse ejecuta en tu máquina — es JMESPath sobre el resultado impreso, aplicado después de que cada Item se haya leído y facturado.--projection-expression(más--expression-attribute-namespara las palabras reservadas) es la que ve DynamoDB, y encoge la respuesta, no la factura. Una--filter-expressiontambién descarta Items después de cobrarlos (Scan con un filtro).- Todo se acumula en memoria y luego pasa por un paginador — la CLI junta todas las páginas antes de imprimir, y la CLI v2 envía por defecto el resultado a
lessen macOS y Linux o amoreen Windows. En una tabla grande eso es a la vez un pico de memoria y un terminal atascado. Añade--no-cli-pager, o ponAWS_PAGERa una cadena vacía, y trocea con--max-items. - El scan paralelo también funciona desde la shell — lanza N copias con
--segment i --total-segments N, cada una paginando automáticamente su propia porción. El mismo coste total, mucho menos tiempo de reloj (cuándo merece la pena).
Hazlo visualmente
Un comando de una línea puede ser un comando caro. La calculadora de precios de DynamoDB le pone cifra a una lectura completa de tu tabla antes de que la ejecutes.
DynoTable pagina la tabla en una cuadrícula en vez de en el búfer de un terminal, y exporta el Scan que hay detrás de esa cuadrícula como un comando aws dynamodb. Descarga DynoTable.
Ejemplos relacionados
- Obtener todos los Items en Node.js — la misma lectura completa con un bucle explícito.
- Obtener todos los Items en Python — la misma lectura completa con el paginador de boto3.
- DynamoDB Scan con la AWS CLI — hacer un scan con una
--filter-expression. - Scans paralelos — Segment/TotalSegments, número de workers y cuándo molestarse.
- ¿Por qué mi Scan de DynamoDB es lento y caro? — el modelo de coste y cómo evitarlo.
- DynamoDB ProvisionedThroughputExceededException — leer la tabla entera es la forma clásica de provocarlo.
- "The provided starting key is invalid" — una clave de reanudación estropeada en el bucle de paginación.
Referencias
- 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
Verificado por última vez el 2026-07-28 contra la documentación oficial de AWS enlazada arriba.