Value provided in ExpressionAttributeValues unused in expressions

TL;DR — 你在 ExpressionAttributeValues 中提供了一個沒有任何運算式引用的值預留位置(例如 :status)。DynamoDB 要求每個宣告的 :value 都在某個 KeyConditionExpressionFilterExpressionUpdateExpressionConditionExpression 中被使用。移除這個孤立的值——或者修復本應使用它的那個運算式。

這是什麼意思

ValidationException: 1 validation error detected: Value provided in ExpressionAttributeValues unused in
expressions: keys: {:status}

# what the engine actually returns, reproduced against DynamoDB Local:
ValidationException: 1 validation error detected: Value provided in ExpressionAttributeValues unused in expressions: keys: {:status}

ExpressionAttributeValues 是你的運算式所比較的字面值(:status:min……)的替換 map。DynamoDB 強制執行一個雙向契約:你在運算式中使用的每個 :placeholder 都必須被宣告,並且每個宣告的預留位置都必須被使用。一個沒有任何運算式引用的殘留值會觸發這個 HTTP 400 ValidationException——屬於用戶端錯誤,在 map 匹配之前不可重試。

為什麼會發生

  • 編輯運算式後殘留的陳舊值——你從運算式中去掉了 #s = :status,卻把 :status 留在了值 map 裡。
  • 複製貼上的偏移——重用了一個先前請求的值 map,而那個請求的條件比當前的多。
  • 一個過度宣告的生成請求——一個構建器為一個後來被移除的過濾子句新增了 :v
  • 名稱與值的混淆——你本想要 #status(一個名稱別名),卻宣告瞭 :status(一個值)。
  • 一個拼寫錯誤——運算式用了 :stat,而 map 宣告的是 :status

如何修正

  1. ExpressionAttributeValues 中刪除訊息指明的未使用值。
  2. 讓值與運算式步調一致——只有當某個運算式引用它時才宣告一個 :placeholder
  3. 確認名稱與值——: 預留位置進 ExpressionAttributeValues# 別名進 ExpressionAttributeNames
  4. 把運算式和它的 map 一起構建,這樣就沒有值會懸空。

在 DynoTable 中查詢

DynoTable 根據你配置的過濾器行生成 ExpressionAttributeValues — 輸出中的每個 :placeholder 都會在運算式字串中引用。使用 ⌘K 開啟表格,在查詢面板中新增過濾器,然後將發出的對映覆制到 SDK 呼叫中以消除孤立值。除錯失敗的請求時,將運算式貼上到 Expression Builder 並將其值對映與你的值對映進行比較。Settings → Profiles上的 Profile 切換 (⌘P) 和 Test Connection 確認你正在針對同一個表進行測試。參見連線 AWS安裝

來源

相關錯誤

參考資料

最後核實於 2026-07-13,依據上方連結的 AWS 官方文件。

不必透過主控台就能操作 DynamoDB

一款快速的 DynamoDB 桌面用戶端,可執行 DynamoDB 無法執行的真正 SQL — JOINs、GROUP BY、聚合 — 並支援視覺化編輯與使用你自己的 Bedrock 金鑰的 AI 代理。

30 天免費試用,無需信用卡 — 之後為無時間限制的免費方案。