Segment must be less than TotalSegments
TL;DR — 在一次並行 Scan中,每個 worker 設定 Segment(它的切片索引)和 TotalSegments(有多少個切片)。DynamoDB 要求 0 ≤ Segment < TotalSegments,且兩者必須一起提供。一個等於或高於 TotalSegments 的 Segment 會被拒絕。為每個 worker 分配一個從 0 到 TotalSegments − 1 的不同 Segment。
這是什麼意思
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一次並行掃描把表分成 TotalSegments 個切片;每個 worker 掃描由 Segment 標識的一個切片。有效的 Segment 值是 0 到 TotalSegments − 1。TotalSegments 本身必須在 1 到 1,000,000 之間。如果你提供了其中一個而沒有另一個,或者一個越界的 Segment,DynamoDB 會拒絕該呼叫。它是一個 HTTP 400 ValidationException,屬於用戶端錯誤,在引數有效之前不可重試。
為什麼會發生
- 差一的段分配——當
TotalSegments = 4時,使用Segment值1..4而不是0..3。 - Segment ≥ TotalSegments——一個達到或超過切片數量的 worker 索引。
- 只提供了這對中的一個——傳入
Segment而沒有TotalSegments(或反之);並行掃描兩者都需要。 - 一個動態 worker 池的不匹配——
TotalSegments設為一個與實際啟動的 worker 數量不同的值,因此一些 worker 得到越界的索引。
如何修正
- 分配段
0到TotalSegments − 1——每個 worker 一個不同的Segment。 - 在每個並行掃描請求上總是一起傳入兩個引數。
- 讓
TotalSegments等於 worker 數量且在1..1,000,000內(TotalSegments為1就只是一次順序掃描)。 - 使用從零開始的索引,在把一個 worker 的序號對映到它的
Segment時。
範例
const totalSegments = workers.length;
await Promise.all(
workers.map((_, segment) =>
doc.send(
new ScanCommand({
TableName: 'Orders',
Segment: segment, // 0 .. totalSegments - 1
TotalSegments: totalSegments
})
)
)
);在 DynoTable 中
在生產中並行化 Scan 之前,請在 DynoTable 中執行單段 Scan 以確認表和過濾器的行為符合預期。使用 ⌘K 開啟表,從查詢面板執行 Scan,然後檢查返回的項目 - 你會看到每個段將接觸的資料,而無需啟動工作佇列。當你將 Scan 移至程式碼中時,在 Query Builder 中對請求進行原型設計 — 它會發出 Segment 和 TotalSegments 以及完整的 Scan 引數。設定→設定檔案中的Profile切換(⌘P)和Test Connection使工作人員能夠指向正確的帳戶。參見連線 AWS和安裝。請記住,段是從零開始的:對於四個工作人員,有效值為 0、1、2 和 3,而不是 1 到 4。當工作人員計數和 TotalSegments 匹配但一名工作人員仍然失敗時,偏離一的段分配是最常見的原因。
來源
- Scan — Amazon DynamoDB API Reference(2026-07-13 驗證)
- Scanning tables in DynamoDB(2026-07-13 驗證)
相關錯誤
- Query key condition not supported——一個相關的 Query/Scan 運算式驗證錯誤。
- Filter Expression can only contain non-primary key attributes——一個鍵屬性被錯誤地用在 Scan/Query 過濾器中。
- ValidationException (overview)
- 學習:Parallel scans
參考資料
- Scan — Amazon DynamoDB API Reference
- Scanning tables in DynamoDB (Parallel scan) — Amazon DynamoDB Developer Guide
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
最後核實於 2026-07-13,依據上方連結的 AWS 官方文件。