Value provided in ExpressionAttributeNames unused in expressions
TL;DR — Anda mendeklarasikan placeholder nama di ExpressionAttributeNames (misalnya #status) yang tidak dirujuk expression mana pun. DynamoDB mewajibkan setiap alias yang dideklarasikan dipakai di KeyConditionExpression, FilterExpression, UpdateExpression, ConditionExpression, atau ProjectionExpression. Hapus alias yang tidak terpakai — atau betulkan expression yang semestinya merujuknya.
Apa artinya
ValidationException: 1 validation error detected: Value provided in ExpressionAttributeNames unused in
expressions: keys: {#status}
# what the engine actually returns, reproduced against DynamoDB Local:
ValidationException: 1 validation error detected: Value provided in ExpressionAttributeNames unused in expressions: keys: {#status}ExpressionAttributeNames adalah peta substitusi untuk alias nama atribut (dibutuhkan untuk reserved word atau nama dengan karakter khusus). DynamoDB menegakkan kontrak dua arah yang ketat: setiap alias yang Anda pakai di expression harus dideklarasikan, dan setiap alias yang Anda deklarasikan harus dipakai. Satu entri sisa yang tidak dirujuk memicu ValidationException HTTP 400 ini. Ini terjadi di sisi klien dan tidak bisa dicoba ulang sampai peta itu cocok dengan expression-nya.
Mengapa itu terjadi
- Alias basi yang tertinggal setelah menyunting expression — Anda menghapus
#status = :sdari expression tetapi lupa membuang#statusdari peta nama. - Peta hasil generasi yang mendeklarasikan berlebih — sebuah lapisan pemetaan memancarkan alias untuk setiap atribut, bahkan yang tidak disentuh expression akhirnya.
- Alias-nya ada di peta values, bukan names — yang Anda maksud
:status(sebuah value) tapi Anda deklarasikan#status(sebuah name). - Ketidakcocokan akibat salah ketik — expression memakai
#statsementara peta mendeklarasikan#status, jadi secara teknis#statustidak terpakai.
Bagaimana cara memperbaikinya
- Hapus alias tak terpakai yang disebut pesan error itu dari
ExpressionAttributeNames. - Jaga peta tetap seiring dengan expression — deklarasikan sebuah
#namehanya ketika ada expression yang benar-benar merujuknya. - Periksa kemungkinan tertukarnya name dan value — alias
#tinggal diExpressionAttributeNames, placeholder:diExpressionAttributeValues. - Bangkitkan ulang request-nya agar names, values, dan teks expression dibangun bersama, bukan dirangkai manual.
Periksa di DynoTable
DynoTable mengalias nama atribut reserved di editor update dan filter — setiap #placeholder dalam keluarannya dirujuk di dalam ekspresi. Buka sebuah tabel dengan ⌘K, sunting sebuah item, lalu salin map ExpressionAttributeNames yang dihasilkan.
Periksa silang permintaan SDK yang gagal di pemeriksa kata reserved — alat itu mencetak map alias untuk nama yang membutuhkan awalan #. Ganti profil dengan ⌘P; lihat Menghubungkan ke AWS dan Instal.
Sumber
- Expression attribute names (aliases) in DynamoDB (diverifikasi 13-07-2026)
- Reserved words in DynamoDB (diverifikasi 13-07-2026)
Cara mereproduksinya
Sebuah entri ExpressionAttributeNames yang tidak dirujuk expression mana pun:
await client.send(
new UpdateItemCommand({
TableName: 'orders',
Key: {pk: {S: 'ORDER#1'}, sk: {S: 'META'}},
UpdateExpression: 'SET stat = :v', // note: 'stat', not '#unused'
ExpressionAttributeNames: {'#unused': 'status'},
ExpressionAttributeValues: {':v': {S: 'shipped'}}
})
);Keluaran sebenarnya:
ValidationException: 1 validation error detected: Value provided in ExpressionAttributeNames unused in expressions: keys: {#unused}
HTTP 400Pesannya menyebut key yang bermasalah, yang membuat ini salah satu dari sedikit error validasi DynamoDB yang bisa langsung Anda tindaklanjuti tanpa membaca apa pun lagi. Ia biasanya muncul setelah sebuah suntingan menghapus placeholder dari expression tetapi meninggalkan deklarasinya.
Kesalahan terkait
- Value provided in ExpressionAttributeValues unused in expressions — aturan yang sama untuk placeholder
:value. - The provided expression refers to an attribute that does not exist in the item — expression membaca atribut item yang tidak ada.
- Attribute name is a reserved keyword — alasan Anda butuh alias
#sejak awal. - Pelajari: Expression names & values
Referensi
- Expression attribute names (aliases) in DynamoDB — Amazon DynamoDB Developer Guide
- Query — Amazon DynamoDB API Reference
- Reserved words in DynamoDB — Amazon DynamoDB Developer Guide
Terakhir diverifikasi 2026-07-13 terhadap dokumentasi resmi AWS yang ditautkan di atas.
Direproduksi 2026-07-26 terhadap DynamoDB Local 2.x dengan AWS SDK for JavaScript v3.1095.0 — keluaran di atas dikutip apa adanya.