Comment compter les éléments dans DynamoDB ?
Utilise Select: 'COUNT' sur un Query ou un Scan pour compter les éléments correspondants sans les renvoyer. Chaque réponse ne compte que jusqu'à 1 Mo scanné : tu dois donc paginer avec LastEvaluatedKey et additionner les valeurs de Count pour obtenir le total complet. Pour un total approximatif de la table, lis ItemCount depuis DescribeTable. Pour un compte groupé — ou un SUM/AVG sur une colonne — le SQL Workbench de DynoTable exécute COUNT et GROUP BY en une seule requête et gère la pagination à ta place.
Compter exactement les éléments correspondants
Mets Select à COUNT sur un Query (pour une clé de partition) ou un Scan (table entière). La réponse renvoie Count et ScannedCount mais aucune donnée d'élément. Si les données scannées dépassent 1 Mo, l'opération s'arrête et renvoie LastEvaluatedKey — continue d'appeler et d'additionner Count jusqu'à ce qu'il soit absent. Note que compter n'est pas moins cher que lire : COUNT consomme la même capacité de lecture que le renvoi des éléments.
Count vs ScannedCount
Count— les éléments correspondant à tes conditions de clé/filtre dans cette page.ScannedCount— les éléments examinés avant filtrage. Une expression de filtre restreint les résultats mais ne réduit pas ce qui a été scanné (ni son coût).
COUNT n'est pas une remise, mesures à l'appui
« Compter coûte autant que lire » est facile à affirmer et facile à mettre en doute : voici donc la mesure, sur une table contenant 40 éléments d'environ 3 Ko chacun (120 700 octets au total), chaque appel étant fait avec ReturnConsumedCapacity: 'TOTAL' :
| Requête | Count | ScannedCount | ConsumedCapacity |
|---|---|---|---|
Query avec Select: 'COUNT' | 40 | 40 | 15 |
Query renvoyant les éléments | 40 | 40 | 15 |
Scan, Select: 'COUNT', filtre sur la moitié | 20 | 40 | 15 |
C'est la troisième ligne qu'il faut regarder. Le filtre divise Count par deux, laisse ScannedCount intact, et ne bouge la facture d'aucun centime.
15, c'est le chiffre que tu aurais prédit : 120 700 octets s'arrondissent à 30 unités de lecture de quatre kilo-octets, divisées par deux parce qu'un Query est en cohérence à terme sauf demande contraire.
L'approximation bon marché
DescribeTable renvoie ItemCount, une estimation à l'échelle de la table mise à jour environ toutes les six heures. Elle est gratuite et instantanée, mais pas en temps réel — bonne pour des tableaux de bord, pas pour des totaux exacts.
Un avertissement si tu testes sur DynamoDB Local : il met ItemCount à jour immédiatement. Écrire 40 éléments puis appeler DescribeTable y renvoie 40 tout de suite. Le vrai service, non : une logique de fraîcheur qui passe en local peut se tromper de six heures en production.
Compter et agréger avec DynoTable
L'API brute te donne COUNT mais ni GROUP BY, ni SUM, ni AVG — le regroupement et les sommes se font normalement dans le code de ton application. Le SQL Workbench de DynoTable les ajoute : écris SELECT COUNT(*), SUM(total) ou un compte groupé, et il exécute la boucle de pagination pour toi, en affinant le chiffre à mesure que les pages arrivent. Il lit toujours à travers DynamoDB, donc le même coût en capacité de lecture s'applique — mais tu écris une requête au lieu d'une boucle, et tu obtiens des résultats groupés et sommés que l'API ne peut pas renvoyer directement.
Aller plus loin
Lis compter, sommer et agréger dans DynamoDB et construis tes requêtes de comptage avec l'Expression Builder. Télécharge DynoTable pour exécuter des comptes et des agrégats (COUNT, SUM, GROUP BY) sur tes tables.
Références
- Query — Amazon DynamoDB API Reference
- Scan — Amazon DynamoDB API Reference
- TableDescription — Amazon DynamoDB API Reference
Dernière vérification le 2026-07-13 par rapport à la documentation officielle AWS liée ci-dessus.
Les chiffres de capacité ont été reproduits le 2026-07-28 sur DynamoDB Local 3.3.0 (amazon/dynamodb-local:latest) via @aws-sdk/client-dynamodb 3.1095.0. DynamoDB Local n'est pas le service ; la divergence sur ItemCount notée ci-dessus en est un exemple.