Obter todos os itens do DynamoDB com a AWS CLI
A AWS CLI esconde a paginação. O aws dynamodb scan faz quantas chamadas de 1 MB o serviço exigir para a tabela e imprime um resultado combinado, então o comando que lê dez itens e o comando que lê dez milhões são o mesmo comando.
Essa é a conveniência e a armadilha. A contagem de chamadas, a memória e a conta escalam todas com a tabela, enquanto a linha continua sendo uma linha só.
Código
aws dynamodb scan --table-name 'Music'A saída combinada contém todos os itens da tabela:
{
"Items": [
{"Artist": {"S": "Arturo Sandoval"}, "SongTitle": {"S": "Cubano Chant"}, ...}
],
"Count": 1287,
"ScannedCount": 1287
}Explicação
--no-paginateé a chave de chamada única — ela impede que a CLI siga o cursor, então você recebe a primeira página e nada mais. Serve para dar uma olhada, mas está errada para uma leitura completa (como o cursor funciona).--page-sizemuda a contagem de chamadas, não a saída — a AWS diz sem rodeios: "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." Recorra a ela quando uma página grande der timeout, nunca para economizar dinheiro. O custo de leitura é idêntico de qualquer jeito.--max-itemsé onde a saída para e oNextTokencomeça — ela imprime essa quantidade de itens mais um token de retomada para o--starting-token. Defina-a e ao--page-sizeo mesmo número: a AWS avisa que valores diferentes "can get unexpected results with missing or duplicated items".--queryroda na sua máquina — é JMESPath sobre o resultado impresso, aplicado depois de cada item já ter sido lido e cobrado. O--projection-expression(mais--expression-attribute-namespara palavras reservadas) é o que o DynamoDB enxerga, e ele encolhe a resposta, não a conta. Uma--filter-expressiontambém descarta itens depois de eles serem cobrados (Scan com filtro).- Tudo é bufferizado e depois encontra um pager — a CLI acumula todas as páginas antes de imprimir, e a CLI v2 manda o resultado pelo
lessno macOS e no Linux, ou pelomoreno Windows, por padrão. Em uma tabela grande isso é um pico de memória e um terminal travado ao mesmo tempo. Adicione--no-cli-pager, ou definaAWS_PAGERcomo string vazia, e fatie com--max-items. - O scan paralelo também funciona a partir do shell — rode N cópias com
--segment i --total-segments N, cada uma paginando automaticamente a sua própria fatia. Mesmo custo total, tempo de relógio muito menor (quando vale a pena).
Faça isso visualmente
Um comando de uma linha pode ser um comando caro. A calculadora de preços do DynamoDB coloca um número em uma leitura completa da sua tabela antes de você rodá-la.
O DynoTable pagina a tabela em uma grade em vez de um buffer de terminal, e exporta o Scan por trás dessa grade de volta como um comando aws dynamodb. Baixe o DynoTable.
Exemplos relacionados
- Obter todos os itens em Node.js — a mesma leitura completa com um laço explícito.
- Obter todos os itens em Python — a mesma leitura completa com o paginador do boto3.
- Scan do DynamoDB com a AWS CLI — escaneando com uma
--filter-expression. - Scans paralelos — Segment/TotalSegments, número de workers e quando se dar ao trabalho.
- Por que meu Scan do DynamoDB é lento e caro? — o modelo de custo e como evitá-lo.
- DynamoDB ProvisionedThroughputExceededException — ler a tabela inteira é a forma clássica de cair nele.
- "The provided starting key is invalid" — uma chave de retomada corrompida no laço de paginação.
Referências
- 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 pela última vez em 2026-07-28 contra a documentação oficial da AWS vinculada acima.