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 agent。

30 天免费试用,无需信用卡 — 之后为无时间限制的免费版。