"Segment must be less than TotalSegments": il segmento deve essere inferiore a TotalSegments
TL;DR — In una scansione parallela, ogni lavoratore imposta "Segment" (il suo indice di sezione) e "TotalSegments" (quante sezioni). DynamoDB richiede 0 ≤ Segmento < TotalSegmenti ed entrambi devono essere forniti insieme. Un "Segmento" uguale o superiore a "TotalSegments" viene rifiutato. Assegna a ciascun lavoratore un "Segmento" distinto da "0" a "TotalSegments − 1".
Cosa significa
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 1Una scansione parallela divide la tabella in sezioni "TotalSegments"; ciascun lavoratore esegue la scansione di una sezione identificata da "Segmento". I valori "Segmento" validi vanno da "0" a "TotalSegments − 1". "TotalSegments" stesso deve essere compreso tra "1" e "1.000.000". Se ne fornisci uno senza l'altro, o un Segmento fuori dall'intervallo, DynamoDB rifiuta la chiamata. Si tratta di una "ValidationException" HTTP 400, lato client, e non è possibile riprovarla finché i parametri non sono validi.
Perché succede
- Assegnazione di segmenti separati da uno — con "TotalSegments = 4", utilizzando i valori di "Segmento" "1..4" invece di "0..3".
- Segmento ≥ TotalSegments: un indice lavoratore che soddisfa o supera il conteggio delle sezioni.
- Solo uno della coppia fornita — passaggio di
SegmentsenzaTotalSegments(o viceversa); entrambi sono necessari per una scansione parallela. - Una mancata corrispondenza del pool di lavoratori dinamici: "TotalSegments" impostato su un valore diverso rispetto al numero di lavoratori effettivamente avviati, quindi alcuni lavoratori ottengono indici fuori intervallo.
Come risolverlo
- Assegna i segmenti "0" a "TotalSegments - 1" — un "Segmento" distinto per lavoratore.
- Trasmetti sempre entrambi i parametri insieme ad ogni richiesta di scansione parallela.
- Mantieni
TotalSegmentsuguale al conteggio dei lavoratori e compreso tra "1..1.000.000" (unTotalSegmentspari a "1" è solo una scansione sequenziale). - Utilizzare l'indicizzazione in base zero quando si associa l'ordinale di un lavoratore al suo "Segmento".
- Registra entrambi i parametri su ogni lavoratore. Quando una flotta fallisce, il messaggio di errore nomina il "Segmento" e i "Segmenti Totali" incriminati: confrontali con ciò che ciascun processo ha effettivamente inviato.
Esempio
const totalSegments = workers.length;
await Promise.all(
workers.map((_, segment) =>
doc.send(
new ScanCommand({
TableName: 'Orders',
Segment: segment, // 0 .. totalSegments - 1
TotalSegments: totalSegments
})
)
)
);In DynoTable
Prima di parallelizzare una scansione in produzione, eseguire una scansione a segmento singolo in DynoTable per confermare che la tabella e il filtro si comportino come previsto. Apri la tabella con ⌘K, esegui una scansione dal pannello delle query e ispeziona gli articoli restituiti: vedi i dati che ciascun segmento toccherebbe senza avviare una flotta di lavoratori.
Quando sposti la scansione nel codice, prototipa la richiesta nel Builder di query: emette Segment e TotalSegments insieme ai parametri di scansione completi. Il cambio di profilo (⌘P) e Verifica connessione in Impostazioni → I profili mantengono i lavoratori indirizzati all'account giusto. Consulta Connetti a AWS e Installa. Ricorda che i segmenti sono a base zero: con quattro lavoratori, i valori validi sono 0, 1, 2 e 3, non da 1 a 4. L'assegnazione di segmenti sfalsati è la causa più comune quando il conteggio dei lavoratori e "TotalSegments" corrispondono ma un lavoratore continua a fallire.
Fonti
- Scansione: riferimento Amazon DynamoDB API (verificato il 13-07-2026)
- Tabelle di scansione in DynamoDB (verificato il 13-07-2026)
Errori correlati
- Condizione della chiave di query non supportata: un errore correlato di convalida dell'espressione di query/scansione.
- L'espressione del filtro può contenere solo attributi chiave non primari: un attributo chiave utilizzato erroneamente in un filtro Scansione/Query.
- ValidationException (panoramica)
- Impara: Scansioni parallele
Riferimenti
- Scansione: riferimento Amazon DynamoDB API
- Scansione di tabelle in DynamoDB (scansione parallela) — Guida per sviluppatori di Amazon DynamoDB
- Gestione degli errori con DynamoDB - Guida per sviluppatori di Amazon DynamoDB
Ultima verifica il 13-07-2026 rispetto alla documentazione ufficiale del AWS collegata sopra.