J'essaie de créer une table simple en utilisant le shell javascript DynamoDB et j'obtiens cette exception:
{
"message": "The number of attributes in key schema must match the number of attributes defined in attribute definitions.",
"code": "ValidationException",
"time": "2015-06-16T10:24:23.319Z",
"statusCode": 400,
"retryable": false
}
Voici le tableau que j'essaye de créer:
var params = {
TableName: 'table_name',
KeySchema: [
{
AttributeName: 'hash_key_attribute_name',
KeyType: 'HASH',
},
],
AttributeDefinitions: [
{
AttributeName: 'hash_key_attribute_name',
AttributeType: 'S',
},
{
AttributeName: 'attribute_name_1',
AttributeType: 'S',
}
],
ProvisionedThroughput: {
ReadCapacityUnits: 1,
WriteCapacityUnits: 1,
},
};
dynamodb.createTable(params, function(err, data) {
if (err) print(err);
else print(data);
});
Cependant, si j'ajoute le deuxième attribut au keySchema, cela fonctionne bien. Ci-dessous une table de travail:
var params = {
TableName: 'table_name',
KeySchema: [
{
AttributeName: 'hash_key_attribute_name',
KeyType: 'HASH',
},
{
AttributeName: 'attribute_name_1',
KeyType: 'RANGE',
}
],
AttributeDefinitions: [
{
AttributeName: 'hash_key_attribute_name',
AttributeType: 'S',
},
{
AttributeName: 'attribute_name_1',
AttributeType: 'S',
}
],
ProvisionedThroughput: {
ReadCapacityUnits: 1,
WriteCapacityUnits: 1,
},
};
dynamodb.createTable(params, function(err, data) {
if (err) print(err);
else print(data);
});
Je ne veux pas ajouter la plage au schéma clé. Toute idée de comment résoudre ce problème?
amazon-dynamodb
dynamo-local
NAbbas
la source
la source
Réponses:
DynamoDB est sans schéma (sauf le schéma de clé)
En d'autres termes, vous devez spécifier le schéma de clé (nom et type d'attribut) lorsque vous créez la table. Eh bien, vous n'avez pas besoin de spécifier d'attributs non clés. Vous pouvez mettre un élément avec n'importe quel attribut plus tard (doit inclure les clés bien sûr).
À partir de la page de documentation , le
AttributeDefinitions
est défini comme:Lorsque vous créez une table, le
AttributeDefinitions
champ est utilisé uniquement pour les clés de hachage et / ou de plage. Dans votre premier cas, il n'y a que la clé de hachage (numéro 1) tandis que vous fournissez 2 AttributeDefinitions. C'est la cause première de l'exception.TL; DR N'incluez aucune définition d'attribut non clé dans
AttributeDefinitions
.la source
AttributeDefinitions
si cette clé sera utilisée comme cléhash
ourange
dans l'indexLorsque vous utilisez un attribut non clé dans at
"AttributeDefinitions"
, vous devez l'utiliser comme index, sinon cela va à l'encontre du fonctionnement de DynamoDB. Voir le lien .Donc pas besoin de mettre un attribut non clé
"AttributeDefinitions"
si vous ne l'utilisez pas comme index ou clé primaire.la source
J'ai également eu ce problème et je posterai ici ce qui n'a pas fonctionné pour moi au cas où cela aiderait quelqu'un d'autre.
Dans mon
CreateTableRequest
, j'avais un tableau vide pour leGlobalSecondaryIndexes
.Commenter ces lignes dans la création de la table a résolu mon problème. Je suppose donc que la liste doit être
null
, pas vide.la source