"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 1

Una 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 Segment senza TotalSegments (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

  1. Assegna i segmenti "0" a "TotalSegments - 1" — un "Segmento" distinto per lavoratore.
  2. Trasmetti sempre entrambi i parametri insieme ad ogni richiesta di scansione parallela.
  3. Mantieni TotalSegments uguale al conteggio dei lavoratori e compreso tra "1..1.000.000" (un TotalSegments pari a "1" è solo una scansione sequenziale).
  4. Utilizzare l'indicizzazione in base zero quando si associa l'ordinale di un lavoratore al suo "Segmento".
  5. 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

Errori correlati

Riferimenti

Ultima verifica il 13-07-2026 rispetto alla documentazione ufficiale del AWS collegata sopra.

Lavora con DynamoDB senza la Console

Un client desktop veloce per DynamoDB che esegue il vero SQL che DynamoDB non può — JOINs, GROUP BY, aggregazioni — con modifica visuale e un agente AI sulle tue chiavi Bedrock.

Prova gratuita di 30 giorni, senza carta di credito — poi il piano Free senza limiti di tempo.