Como você conta itens no DynamoDB?
Use Select: 'COUNT' em um Query ou Scan para contar os itens correspondentes sem devolvê-los. Cada resposta conta apenas até 1 MB escaneado, então você precisa paginar com o LastEvaluatedKey e somar os valores de Count para obter o total completo. Para um total aproximado da tabela, leia o ItemCount do DescribeTable. Para uma contagem agrupada — ou um SUM/AVG sobre uma coluna — o SQL Workbench do DynoTable roda COUNT e GROUP BY como uma única consulta e cuida da paginação para você.
Contando itens correspondentes com exatidão
Defina Select como COUNT em um Query (para uma chave de partição) ou Scan (tabela inteira). A resposta devolve Count e ScannedCount, mas nenhum dado de item. Se os dados escaneados passarem de 1 MB, a operação para e devolve o LastEvaluatedKey — continue chamando e somando o Count até ele desaparecer. Note que contar não é mais barato que ler: o COUNT consome a mesma capacidade de leitura que devolver os itens consumiria.
Count vs ScannedCount
Count— itens que correspondem às suas condições de chave/filtro nesta página.ScannedCount— itens examinados antes da filtragem. Uma expressão de filtro estreita os resultados, mas não reduz o que foi escaneado (nem o custo disso).
COUNT não é desconto, medido
"Contar custa o mesmo que ler" é fácil de afirmar e fácil de duvidar, então aqui está isso em uma tabela com 40 itens de aproximadamente 3 KB cada (120.700 bytes no total), com cada chamada feita com ReturnConsumedCapacity: 'TOTAL':
| Requisição | Count | ScannedCount | ConsumedCapacity |
|---|---|---|---|
Query com Select: 'COUNT' | 40 | 40 | 15 |
Query devolvendo os itens | 40 | 40 | 15 |
Scan, Select: 'COUNT', filtro casando com metade | 20 | 40 | 15 |
A terceira linha é a que se deve olhar. O filtro corta o Count pela metade, deixa o ScannedCount intacto e move a conta em nada.
15 é o número que você preveria: 120.700 bytes arredondam para cima como 30 unidades de leitura de quatro kilobytes, divididas pela metade porque um Query tem consistência eventual a menos que você peça outra coisa.
A aproximação barata
O DescribeTable devolve o ItemCount, uma estimativa de toda a tabela atualizada aproximadamente a cada seis horas. Ela é gratuita e instantânea, mas não é em tempo real — boa para dashboards, não para totais exatos.
Um aviso se você testar contra o DynamoDB Local: ele atualiza o ItemCount imediatamente. Escrever 40 itens e chamar o DescribeTable ali devolve 40 na hora. O serviço de verdade não vai fazer isso, então uma lógica de atualidade que passa localmente pode estar seis horas errada em produção.
Contando e agregando com o DynoTable
A API bruta te dá COUNT, mas nenhum GROUP BY, SUM ou AVG — agrupar e somar normalmente acontecem no código da sua aplicação. O SQL Workbench do DynoTable acrescenta isso: escreva SELECT COUNT(*), SUM(total) ou uma contagem agrupada, e ele roda o loop de paginação para você, refinando o número conforme as páginas chegam. Ele continua lendo pelo DynamoDB, então o mesmo custo de capacidade de leitura se aplica — mas você escreve uma consulta em vez de um loop, e recebe resultados agrupados e somados que a API não consegue devolver diretamente.
Aprofunde-se
Leia count, sum e agregação no DynamoDB e construa consultas de contagem com o Expression Builder. Baixe o DynoTable para rodar contagens e agregados (COUNT, SUM, GROUP BY) contra suas tabelas.
Referências
- Query — Amazon DynamoDB API Reference
- Scan — Amazon DynamoDB API Reference
- TableDescription — Amazon DynamoDB API Reference
Verificado pela última vez em 2026-07-13 contra a documentação oficial da AWS vinculada acima.
Os números de capacidade foram reproduzidos em 2026-07-28 contra o DynamoDB Local 3.3.0 (amazon/dynamodb-local:latest) via @aws-sdk/client-dynamodb 3.1095.0. O DynamoDB Local não é o serviço; a divergência de ItemCount observada acima é um dos pontos em que eles diferem.