Lorsque je tente d'exécuter une requête GetItem pour ma table Amazon DynamoDB, l'erreur suivante s'affiche : « l'élément clé fourni ne correspond pas au schéma ».
Brève description
Cette erreur peut s'afficher pour les raisons suivantes :
- Vous avez spécifié un type de données incorrect pour la clé.
- Vous avez incorrectement nommé les attributs.
- Vous n'avez spécifié qu'une partie de la clé.
- Les données sont écrites dans la mauvaise table.
- Il y a une clé supplémentaire inutile.
- Vous exécutez une requête GetItem pour tenter d'obtenir une série d'éléments au lieu d'un seul élément.
- Votre table utilise une clé primaire composite. Vous exécutez donc une requête GetItem sans spécifier la clé de partition ni la clé de tri.
- Votre table n’utilise pas de clé de tri. Vous exécutez donc une requête GetItem et vous ne spécifiez qu'une clé de partition.
Résolution
Vérifier votre clé primaire et trier le type de données de clé
Pour que votre commande GetItem réussisse, les données principales et les données clés de tri doivent être du même type que les données de votre table DynamoDB. Dans l'exemple de commande suivant, la clé de tri Année utilise des données de type chaîne (S) :
aws dynamodb get-item --table-name Key-Element --key '{"EventID":{"S":"test-item01"}, "Year":{"S":"2024"}}'
Comme la table utilise un type de données numérique (N), le message d'erreur suivant s'affiche :
« Une erreur s'est produite (ValidationException) lors de l'appel de l'opération GetItem : L'élément de clé fourni ne correspond pas au schéma »
Exécutez plutôt la commande suivante qui utilise le type de données numérique :
aws dynamodb get-item --table-name Key-Element --key '{"EventID":{"S":"test-item01"}, "Year":{"N":"2024"}}'
Vous obtiendrez un résultat similaire à l’exemple suivant :
{
"Item": {
"EventID": {
"S": "test-item01"
},
"Year": {
"N": "2024"
},
"Works?": {
"N": "1"
}
}
}
Choisir une opération adaptée à votre cas d'utilisation
Utiliser l'opération BatchGetItem ou GetItem
Lorsque vous récupérez des données à partir de vos tables DynamoDB, vous pouvez utiliser les opérations Getitem ou BatchGetitem. L'opération GetItem récupère un seul enregistrement à la fois. La requête doit inclure le schéma de clé de la table.
L'opération BatchGetItem requiert que vous fournissiez la clé de partition pour les tables qui ne comportent qu'une clé de partition. Pour les tables qui utilisent une clé primaire composite, vous devez fournir la partition et la clé de tri lorsque vous utilisez BatchGetItem.
Utiliser l'opération Interroger
Pour récupérer des données lorsque vous ne spécifiez pas de clé de tri, utilisez l'opération Interroger. Étant donné que l’opération Interroger vous permet de spécifier uniquement la clé de partition lorsque vous récupérez des données, utilisez-la pour les tables comportant une clé primaire composite.
Utiliser l'API d’analyse de DynamoDB
Pour rechercher des données en fonction d'un attribut non clé, utilisez l'API d’analyse de DynamoDB. L'opération Analyser vous permet d'utiliser une expression FilterExpression pour filtrer les données en fonction de n'importe quel attribut sans qu'il soit nécessaire de spécifier la clé primaire.
Pour utiliser un attribut non clé pour rechercher des données, utilisez une recherche imbriquée dans FilterExpression. Par exemple, pour rechercher des éléments dont l'attribut userId correspond à une valeur spécifique dans l'attribut Données imbriqué, utilisez l'expression suivante :
« Data.userId": your_expression_values. »
Important : Étant donné que l'opération Analyser effectue une itération sur tous les éléments pour vérifier si la condition du filtre est remplie, l'opération peut rapidement entraîner des frais. Si vous devez utiliser l'opération Analyser, ajoutez une pagination lorsque vous analysez des tables volumineuses. L'API d’analyse ne renvoie que 1 Mo de données par appel. Utilisez la pagination pour analyser uniquement les nouvelles données.