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çãoCountScannedCountConsumedCapacity
Query com Select: 'COUNT'404015
Query devolvendo os itens404015
Scan, Select: 'COUNT', filtro casando com metade204015

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

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.

Trabalhe com o DynamoDB sem o Console

Um cliente desktop rápido para DynamoDB que roda o SQL de verdade que o DynamoDB não consegue — JOINs, GROUP BY, agregações — com edição visual e um agente de IA com suas próprias chaves do Bedrock.

Teste grátis de 30 dias, sem cartão de crédito — depois o plano Grátis sem limite de tempo.