Value provided in ExpressionAttributeValues unused in expressions
TL;DR — ExpressionAttributeValues に、どの式も参照しない 値プレースホルダー(例: :status)を渡しました。DynamoDB は、宣言したすべての :value を KeyConditionExpression、FilterExpression、UpdateExpression、または ConditionExpression で使用することを要求します。孤立した値を削除するか、それを使うはずだった式を修正してください。
意味
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 など)の置換マップです。DynamoDB は双方向の契約を強制します: 式で使うすべての :placeholder は宣言される必要があり、かつ 宣言するすべてのプレースホルダーは使用される必要があります。どの式も参照しない残りの値は、この HTTP 400 の ValidationException を引き起こします。クライアント側の問題で、マップが一致するまでリトライ不可です。
発生する理由
- 式を編集した後に残った古い値 — 式から
#s = :statusを落としたが、値マップに:statusを残した。 - コピペのドリフト — 現在より多くの条件を持っていた以前のリクエストの値マップを再利用している。
- 過剰に宣言する生成されたリクエスト — ビルダーが後で削除されたフィルター句に
:vを追加した。 - 名前 vs 値の取り違え —
#status(名前エイリアス)のつもりが:status(値)を宣言した。 - タイプミス — 式が
:statを使うのにマップが:statusを宣言している。
修正方法
- メッセージが示す 未使用の値を削除します —
ExpressionAttributeValuesから。 - 値を式と歩調を合わせて保ちます — 式が参照するときにのみ
:placeholderを宣言します。 - 名前 vs 値を確認します —
:プレースホルダーはExpressionAttributeValuesに、#エイリアスはExpressionAttributeNamesに。 - 式とそのマップを一緒に組み立て、値が宙ぶらりんにならないようにします。
DynoTable でクエリ
DynoTable は設定したフィルター行から ExpressionAttributeValues を生成します — 出力に現れる :placeholder はすべて式の文字列から参照されています。⌘K でテーブルを開き、クエリパネルでフィルターを追加し、出力されたマップを SDK の呼び出しにコピーすれば、宙に浮いた値はなくなります。
失敗するリクエストを調べるときは、式を式ビルダーに貼り付け、その値のマップを自分のものと比べましょう。プロファイルの切り替え(⌘P)と Settings → Profiles の Test Connection で、同じテーブルに対して試していることを確認できます。AWS に接続するとインストールを参照してください。
出典
- Using expression attribute values in DynamoDB (2026-07-13 時点で検証)
- DynamoDB condition expression examples (2026-07-13 時点で検証)
関連するエラー
- Value provided in ExpressionAttributeNames unused in expressions —
#nameエイリアスに対する同じルール。 - ExpressionAttributeValues contains invalid value — マップ内の不正な形式または空の値、および逆の不一致: 参照されたが渡されなかった
:placeholder。 - The provided expression refers to an attribute that does not exist in the item — 式が、そこにないアイテム属性を読み取る。
- 学習: 式属性名と値
参考資料
- Using expression attribute values in DynamoDB — Amazon DynamoDB Developer Guide
- DynamoDB condition expression examples — Amazon DynamoDB Developer Guide
- Query — Amazon DynamoDB API Reference
最終検証日 2026-07-13、上記にリンクした公式 AWS ドキュメントに照らして確認しました。