Value provided in ExpressionAttributeNames unused in expressions
TL;DR — ExpressionAttributeNames'te hiçbir ifadenin başvurmadığı bir ad yer tutucusu (örneğin #status) bildirdiniz. DynamoDB, bildirilen her takma adın bir KeyConditionExpression, FilterExpression, UpdateExpression, ConditionExpression veya ProjectionExpression'da kullanılmasını gerektirir. Kullanılmayan takma adı kaldırın — ya da ona başvurması gereken ifadeyi düzeltin.
Ne anlama gelir
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, öznitelik adı takma adları için bir ikame map'idir (ayrılmış sözcükler ya da özel karakterli adlar için gerekir). DynamoDB katı bir iki yönlü sözleşme uygular: bir ifadede kullandığınız her takma ad bildirilmelidir ve bildirdiğiniz her takma ad kullanılmalıdır. Artakalmış, başvurulmayan bir girdi bu HTTP 400 ValidationException'ı tetikler. İstemci tarafındadır ve map, ifadelerle eşleşene kadar yeniden denenebilir değildir.
Neden olur
- Bir ifadeyi düzenledikten sonra kalan bir bayat takma ad — ifadeden
#status = :s'yi kaldırdınız ama#status'ı adlar map'inden silmeyi unuttunuz. - Fazla bildirim yapan üretilmiş bir map — bir eşleme katmanı, son ifadenin dokunmadığı öznitelikler için bile takma adlar yaydı.
- Takma ad adlar map'inde değil, değerler map'inde —
:status(bir değer) demek istediniz ama#status(bir ad) bildirdiniz. - Bir yazım hatası uyuşmazlığı — ifade
#statkullanırken map#statusbildiriyor, dolayısıyla#statusteknik olarak kullanılmıyor.
Nasıl düzeltilir
- Mesajın adını verdiği kullanılmayan takma adı
ExpressionAttributeNames'ten silin. - Map'i ifadelerle eşzamanlı tutun — bir
#name'i yalnızca bir ifade ona gerçekten başvurduğunda bildirin. - Bir ad-değer karışıklığı olup olmadığını kontrol edin —
#-takma adlarıExpressionAttributeNames'te,:-yer tutucularıExpressionAttributeValues'te yaşar. - İsteği yeniden üretin, böylece adlar, değerler ve ifade metni elle birleştirilmek yerine birlikte oluşturulsun.
DynoTable'da inceleyin
Hiçbir ifadenin başvurmadığı bir ExpressionAttributeNames girdisi:
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'}}
})
);Gerçek çıktı:
ValidationException: 1 validation error detected: Value provided in ExpressionAttributeNames unused in expressions: keys: {#unused}
HTTP 400Mesaj, sorunlu anahtarı adıyla verir; bu da onu, başka hiçbir şey okumadan üzerinde işlem yapabileceğiniz birkaç DynamoDB doğrulama hatasından biri yapar. Genellikle bir düzenleme ifadeden bir yer tutucuyu kaldırıp bildirimini geride bıraktığında ortaya çıkar.
Kaynaklar
- Expression attribute names (aliases) in DynamoDB (2026-07-13 tarihinde doğrulandı)
- Reserved words in DynamoDB (2026-07-13 tarihinde doğrulandı)
Nasıl yeniden oluşturulur
Güncelleme ve filtre düzenleyicilerinde DynoTable takma adlar ayrılmış öznitelik adları — çıktıdaki her #placeholder ifadede referans alınır. ⌘K ile bir tablo açın, bir öğeyi düzenleyin ve oluşturulan ExpressionAttributeNames haritasını kopyalayın.
reserved words checker'deki başarısız SDK isteklerini çapraz kontrol edin — # öneklerine ihtiyaç duyan adlar için takma ad haritasını yazdırır. Profilleri ⌘P ile değiştirin; bkz. Connect to AWS ve Install.
İlgili hatalar
- Value provided in ExpressionAttributeValues unused in expressions —
:valueyer tutucuları için aynı kural. - The provided expression refers to an attribute that does not exist in the item — ifade, orada olmayan bir öğe özniteliğini okuyor.
- Attribute name is a reserved keyword — en başta neden bir
#-takma adına ihtiyaç duyduğunuz. - Öğrenin: Expression names & values
Kaynaklar
- Expression attribute names (aliases) in DynamoDB — Amazon DynamoDB Developer Guide
- Query — Amazon DynamoDB API Reference
- Reserved words in DynamoDB — Amazon DynamoDB Developer Guide
En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.
2026-07-26 tarihinde AWS SDK for JavaScript v3.1095.0 ile DynamoDB Local 2.x'e karşı yeniden üretildi — yukarıdaki çıktı birebir alınmıştır.