Value provided in ExpressionAttributeValues unused in expressions
TL;DR — Anda menyediakan placeholder nilai di ExpressionAttributeValues (mis. :status) yang tidak dirujuk expression apa pun. DynamoDB mensyaratkan setiap :value yang dideklarasikan digunakan dalam KeyConditionExpression, FilterExpression, UpdateExpression, atau ConditionExpression. Hapus nilai yatim — atau perbaiki expression yang seharusnya menggunakannya.
Apa artinya
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 adalah map substitusi untuk nilai literal yang dibandingkan expression Anda (:status, :min, …). DynamoDB memberlakukan kontrak dua arah: setiap :placeholder yang digunakan dalam expression harus dideklarasikan, dan setiap placeholder yang dideklarasikan harus digunakan. Nilai tersisa yang tidak dirujuk expression apa pun memicu HTTP 400 ValidationException ini — sisi klien dan tidak dapat dicoba ulang sampai map cocok.
Mengapa itu terjadi
- Nilai usang setelah mengedit expression — Anda menghapus
#s = :statusdari expression tetapi meninggalkan:statusdi map nilai. - Drift salin-tempel — menggunakan ulang map nilai dari permintaan sebelumnya yang punya lebih banyak kondisi daripada yang sekarang.
- Permintaan yang dihasilkan yang terlalu banyak mendeklarasikan — builder menambahkan
:vuntuk klausa filter yang kemudian dihapus. - Kekeliruan nama-vs-nilai — Anda memaksudkan
#status(alias nama) tetapi mendeklarasikan:status(nilai). - Salah ketik — expression menggunakan
:statsementara map mendeklarasikan:status.
Bagaimana cara memperbaikinya
- Hapus nilai yang tidak digunakan yang disebut pesan dari
ExpressionAttributeValues. - Jaga nilai selaras dengan expression — deklarasikan
:placeholderhanya ketika expression merujuknya. - Konfirmasi nama vs nilai — placeholder
:masuk keExpressionAttributeValues; alias#masuk keExpressionAttributeNames. - Bangun expression dan map-nya bersama agar tidak ada nilai yang menggantung.
Query di DynoTable
DynoTable menghasilkan ExpressionAttributeValues dari baris filter yang Anda konfigurasikan — setiap :placeholder dalam keluarannya dirujuk di dalam string ekspresi. Buka sebuah tabel dengan ⌘K, tambahkan filter di panel kueri, lalu salin map yang dipancarkan ke panggilan SDK Anda untuk menghapus nilai yatim.
Saat men-debug permintaan yang gagal, tempel ekspresinya ke Expression Builder dan bandingkan map nilainya dengan milik Anda. Peralihan profil (⌘P) dan Test Connection di Pengaturan → Profil memastikan Anda menguji pada tabel yang sama. Lihat Menghubungkan ke AWS dan Instal.
Sumber
- Using expression attribute values in DynamoDB (diverifikasi 13-07-2026)
- DynamoDB condition expression examples (diverifikasi 13-07-2026)
Kesalahan terkait
- Value provided in ExpressionAttributeNames unused in expressions — aturan yang sama untuk alias
#name. - ExpressionAttributeValues contains invalid value — nilai salah bentuk atau kosong dalam map, dan ketidakcocokan sebaliknya:
:placeholderdirujuk tetapi tidak pernah disediakan. - The provided expression refers to an attribute that does not exist in the item — expression membaca atribut item yang tidak ada di sana.
- Pelajari: Expression names & values
Referensi
- Using expression attribute values in DynamoDB — Amazon DynamoDB Developer Guide
- DynamoDB condition expression examples — Amazon DynamoDB Developer Guide
- Query — Amazon DynamoDB API Reference
Terakhir diverifikasi 2026-07-13 terhadap dokumentasi resmi AWS yang ditautkan di atas.