Supplied AttributeValue is empty, must contain exactly one of the supported datatypes

TL;DR — L'un des attributs de ton Item (ou de ta clé) a un AttributeValue sans aucune valeur à l'intérieur — un ensemble vide, une chaîne/un binaire vide dans un attribut de clé, un champ null/undefined, ou un wrapper sans membre S/N/BOOL/… DynamoDB exige que chaque AttributeValue contienne exactement un type pris en charge. Supprime l'attribut vide ou donne-lui une vraie valeur.

Ce que ça signifie

ValidationException: Supplied AttributeValue is empty, must contain exactly one of the supported datatypes

DynamoDB a rejeté la requête en validant la forme d'un élément : un AttributeValue était présent mais ne portait rien que DynamoDB puisse stocker. Chaque AttributeValue doit contenir exactement une valeur typée (S, N, B, SS, NS, BS, M, L, NULL ou BOOL). C'est un HTTP 400, non réessayable — le même élément échoue à nouveau jusqu'à ce que tu corriges l'attribut.

C'est distinct de ExpressionAttributeValues contains invalid value : celle-là concerne un :placeholder dans une expression ; celle-ci concerne un attribut dans le corps de l'élément lui-même (PutItem, BatchWriteItem, TransactWriteItems).

Pourquoi ça arrive

  • Un champ undefined/null dans l'objet que tu écris — le marshaller émet un AttributeValue vide au lieu de l'ignorer ou de le typer en NULL.
  • Un ensemble videSS, NS ou BS doit avoir au moins un membre. Un ensemble vide est invalide partout.
  • Une chaîne vide dans un attribut de clé — les attributs de chaîne non-clé peuvent valoir "", mais un attribut de clé de table ou d'index ne le peut pas.
  • Une valeur binaire vide dans une clé — même règle que les chaînes : le binaire vide convient pour les attributs non-clé (et à l'intérieur des ensembles, listes et maps), jamais pour une clé.
  • Un ensemble vide imbriqué enfoui dans une Map ou une List que tu persistes — les chaînes et valeurs binaires vides imbriquées sont autorisées ; les ensembles vides imbriqués ne le sont pas.

Comment le corriger

  1. Retire les attributs vides/undefined avant d'écrire. Construis l'Item uniquement à partir des champs qui ont réellement des valeurs ; supprime le reste au lieu d'envoyer un wrapper vide.
  2. Pour le Document Client, active la gestion des valeurs vides. L'option de marshalling removeUndefinedValues: true de @aws-sdk/lib-dynamodb supprime les champs undefined pour qu'ils n'atteignent jamais le fil. (Les chaînes et valeurs binaires vides pour les attributs non-clé sont autorisées directement par DynamoDB.)
  3. N'envoie jamais un ensemble vide — omets complètement l'attribut quand l'ensemble n'a aucun membre, ou stocke un NULL.
  4. Donne de vraies valeurs aux attributs de clé — une clé de partition/de tri (de table ou d'index) ne peut jamais être une chaîne vide ou un binaire vide.
  5. Parcours les Maps/Lists imbriquées à la recherche d'ensembles vides parasites si l'attribut fautif n'est pas au niveau supérieur.

FAQ

Que signifie « Supplied AttributeValue is empty » dans DynamoDB ? Un attribut de ton élément a un AttributeValue qui ne contient aucune valeur stockée — une chaîne ou un binaire vide dans un attribut de clé, un ensemble vide, ou un champ null/undefined. Chaque AttributeValue doit contenir exactement un type de données pris en charge, donc DynamoDB rejette l'écriture.

Comment empêcher DynamoDB de rejeter les valeurs vides ? Retire les attributs vides et undefined avant d'écrire (ou utilise l'option removeUndefinedValues du Document Client). N'envoie jamais un ensemble vide — omets l'attribut ou stocke un NULL. Les attributs de clé doivent toujours porter une vraie valeur non vide.

Erreurs liées

Références

Dernière vérification le 2026-07-13 par rapport à la documentation officielle AWS liée ci-dessus.

Travaille avec DynamoDB sans la Console

Un client de bureau rapide pour DynamoDB qui exécute le vrai SQL que DynamoDB ne peut pas — JOINs, GROUP BY, agrégations — avec édition visuelle et un agent IA sur tes propres clés Bedrock.

Essai gratuit de 30 jours, sans carte bancaire — ensuite la formule Gratuit, sans limite de durée.