Segment must be less than TotalSegments
TL;DR — Dans un Scan parallèle, chaque worker définit Segment (son index de tranche) et TotalSegments (combien de tranches). DynamoDB exige 0 ≤ Segment < TotalSegments, et les deux doivent être fournis ensemble. Un Segment égal ou supérieur à TotalSegments est rejeté. Attribue à chaque worker un Segment distinct de 0 à TotalSegments − 1.
Ce que ça signifie
ValidationException: The Segment parameter is zero-based and must be less than parameter TotalSegments: Segment: 5 is not less than TotalSegments: 2
# on DynamoDB Local the same call reports the constraint generically instead:
ValidationException: 1 validation error detected: Value '5' at 'segment' failed to satisfy constraint: Member must have value less than or equal to 1Un scan parallèle divise la table en TotalSegments tranches ; chaque worker scanne une tranche identifiée par Segment. Les valeurs valides de Segment vont de 0 à TotalSegments − 1. TotalSegments lui-même doit être compris entre 1 et 1 000 000. Si tu fournis l'un sans l'autre, ou un Segment en dehors de la plage, DynamoDB rejette l'appel. C'est une ValidationException HTTP 400, côté client, et non réessayable tant que les paramètres ne sont pas valides.
Pourquoi ça arrive
- Attribution de segment décalée d'un — avec
TotalSegments = 4, utiliser les valeurs deSegment1..4au lieu de0..3. - Segment ≥ TotalSegments — un index de worker qui atteint ou dépasse le nombre de tranches.
- Un seul membre de la paire fourni — passer
SegmentsansTotalSegments(ou inversement) ; les deux sont requis pour un scan parallèle. - Un décalage de pool de workers dynamique —
TotalSegmentsdéfini à une valeur différente du nombre de workers réellement lancés, si bien que certains workers reçoivent des index hors plage.
Comment le corriger
- Attribue les segments
0àTotalSegments − 1— unSegmentdistinct par worker. - Passe toujours les deux paramètres ensemble sur chaque requête de scan parallèle.
- Garde
TotalSegmentségal au nombre de workers et dans1..1 000 000(unTotalSegmentsde1est simplement un scan séquentiel). - Utilise une indexation à base zéro lors du mappage de l'ordinal d'un worker vers son
Segment. - Journalise les deux paramètres sur chaque worker. Quand une flotte échoue, le message d'erreur nomme le
Segmentet leTotalSegmentsfautifs — compare-les à ce que chaque processus a réellement envoyé.
Exemple
const totalSegments = workers.length;
await Promise.all(
workers.map((_, segment) =>
doc.send(
new ScanCommand({
TableName: 'Orders',
Segment: segment, // 0 .. totalSegments - 1
TotalSegments: totalSegments
})
)
)
);Dans DynoTable
Avant de paralléliser un Scan en production, lance un Scan single-segment dans DynoTable pour confirmer que la table et le filtre se comportent comme attendu. Ouvre la table avec ⌘K, lance un Scan depuis le panneau de requête, et inspecte les items renvoyés — tu vois les données que chaque segment toucherait sans lancer une flotte de workers.
Quand tu déplaces le Scan dans le code, prototype la requête dans le
Query Builder — il émet Segment et TotalSegments à
côté des paramètres Scan complets. Le basculement de profil (⌘P) et Test
Connection dans Settings → Profiles gardent les workers pointés sur le bon compte. Voir
Connect to AWS et Install. Souviens-toi que les
segments sont à base zéro : avec quatre workers, les valeurs valides sont 0, 1, 2 et 3 —
pas 1 à 4. L'attribution de segment décalée d'un est la cause la plus fréquente quand le
nombre de workers et TotalSegments matchent mais qu'un worker échoue quand même.
Sources
- Scan — Amazon DynamoDB API Reference (verified 2026-07-13)
- Scanning tables in DynamoDB (verified 2026-07-13)
Erreurs liées
- Query key condition not supported — une erreur de validation d'expression Query/Scan liée.
- Filter Expression can only contain non-primary key attributes — un attribut de clé utilisé à tort dans un filtre Scan/Query.
- ValidationException (vue d'ensemble)
- En savoir plus : Scans parallèles
Références
- Scan — Amazon DynamoDB API Reference
- Scanning tables in DynamoDB (Parallel scan) — Amazon DynamoDB Developer Guide
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
Dernière vérification le 2026-07-13 par rapport à la documentation officielle AWS liée ci-dessus.