2017-08-08 3 views
1

J'utilise dynamoDB local. Je veux créer une table avec 6 attributs, un seul d'entre eux est key. Comment je fais ça? Spécifiez l'attribut clé dans keySchema et tous les attributs dans AttributeDefinitions?node.js: Comment ajouter un attribut non-clé dans DynamoDB lors de la création d'une table?

var params = { 
    TableName : "Movies", 
    KeySchema: [ 
     { AttributeName: "year", KeyType: "HASH"}, //Partition key 
    ], 
    AttributeDefinitions: [ 
     { AttributeName: "year", AttributeType: "N" }, 
     { AttributeName: "title", AttributeType: "S" } 
    ], 
    ProvisionedThroughput: { 
     ReadCapacityUnits: 10, 
     WriteCapacityUnits: 10 
    } 
}; 

dynamodb.createTable(params, function(err, data) { 
    if (err) { 
     console.error("Unable to create table. Error JSON:", JSON.stringify(err, null, 2)); 
    } else { 
     console.log("Created table. Table description JSON:", JSON.stringify(data, null, 2)); 
    } 
}); 

Répondre

1

Recevez-vous l'erreur suivante?

Une ou plusieurs valeurs de paramètres ne sont pas valides: Nombre d'attributs dans KeySchema ne correspond pas exactement à nombre d'attributs définis dans AttributeDefinitions

C'est parce que votre AttributeDefinitions contient un attribut non défini dans le KeySchema. Si vous n'utilisez qu'une clé HASH et que vous n'avez pas besoin d'une clé RANGE, vous pouvez supprimer l'attribut title du AttributeDefinitions. Est

DynamoDB est schemaless donc vous n'avez pas besoin d'inclure des définitions d'attributs non clés dans AttributeDefinitions. Vous pouvez ajouter des attributs supplémentaires lorsque vous placez un élément dans votre table (devez inclure les clés de partition/tri).

Le code suivant va créer une table avec seulement HASH (Partition) key:

var dynamodb = new AWS_SDK.DynamoDB(); 

var params = { 
    TableName : "MyNewTable", 
    KeySchema: [ 
     { AttributeName: "year", KeyType: "HASH"}, //Partition key 
     //{ AttributeName: "title", KeyType: "RANGE"}, //Sort key 
    ], 
    AttributeDefinitions: [ 
     { AttributeName: "year", AttributeType: "N" }, 
     // { AttributeName: "title", AttributeType: "S" } 
    ], 
    ProvisionedThroughput: { 
     ReadCapacityUnits: 10, 
     WriteCapacityUnits: 10 
    } 
}; 

dynamodb.createTable(params, function(err, data) { 
    if (err) { 
     console.error("Unable to create table. Error JSON:", JSON.stringify(err, null, 2)); 
    } else { 
     console.log("Created table. Table description JSON:", JSON.stringify(data, null, 2)); 
    } 

Pour plus d'informations, vous pouvez vous référer à la AWS SDK documentation pour la fonction createTable sur le service DynamoDB.

Espérons que cela aide!