2016-08-02 8 views
0

Neu bei AWS, bei dem versucht wird, Daten in eine Tabelle einzutragen. Nach dem Lesen der Dokumentation und dem Versuch, Beispielen zu folgen, stoße ich auf diesen Validierungsfehler.AWS - Einer der erforderlichen Schlüssel wurde nicht mit einem Wert versehen

One of the required keys was not given a value 

Mein Code:

var conf = require("/directory"); 
var AccessKey = 'supersecretkey'; 
var SecretKey = 'supersecretkey'; 

var tableName = conf.tableCS; 

var AWS = require('aws-sdk'); 

console.log("Endpoint: " + conf.endpoint); 
AWS.config.update({ 
    accessKeyId: AccessKey, 
    secretAccessKey: SecretKey, 
    region: conf.region, 
    endpoint: conf.endpoint 
}); 
var docClient = new AWS.DynamoDB.DocumentClient(); 

var file = process.argv[2]; 
console.log("File: " + file); 

var csv = require("fast-csv"); 

csv.fromPath(file) 
    .on("data", function(data) { 
     // Uncomment to see CSV data 
     // console.log(data); 

     var arrayLength = data.length; 
     for (var i = 0; i < arrayLength; i++) { 
      // console.log(data[i]); 
      var params = { 
       TableName: tableName, 
       Key: { 
         RefID: data 
       } 
      }; 

      console.log("Adding a new item..."); 
      docClient.put(params, function(err, data) { 
       if (err) { 
        console.error("Unable to add item. Error JSON:", JSON.stringify(err, null, 2)); 
       } 
       else { 
        console.log("Added item:", JSON.stringify(data, null, 2)); 
       } 
      }); 
      // Looping through, now putItem into database 
     } 

    }) 
    .on("end", function() { 
     console.log("done"); 
    }); 

Ich fand this, aber ich bin nicht zu verstehen, die range Schlüsselrolle. Ich erstelle die Tabelle in diesem folgenden Code und habe den Schlüssel hash, aber keinen Schlüssel range. Ist das mein Problem? Was würde ich den Entfernungsschlüssel machen?

var conf = require("/directory"); 
var AccessKey = 'supersecretkey'; 
var SecretKey = 'supersecretkey'; 

var tableName = conf.tableCSV; 

// Take input from command line 
process.argv.forEach(function(val, index, array) { 
    console.log(index + ': ' + val); 
}); 

console.log("Table: " + tableName); 

var AWS = require('aws-sdk'); 

console.log("Endpoint: " + conf.endpoint); 
AWS.config.update({ 
    accessKeyId: AccessKey, 
    secretAccessKey: SecretKey, 
    region: conf.region, 
    endpoint: conf.endpoint 
}); 
var dynamodb = new AWS.DynamoDB(); 

var params = { 
    TableName: tableName, 
    KeySchema: [{ 
     AttributeName: 'RefID', 
     KeyType: 'HASH' 
    }], 
    AttributeDefinitions: [{ 
     AttributeName: 'RefID', 
     AttributeType: 'S' 
    }], 
    ProvisionedThroughput: { 
     ReadCapacityUnits: 1, 
     WriteCapacityUnits: 1 
    } 
}; 

dynamodb.createTable(params, function(err, table) { 
    if (err) { 
     console.log(err); 
    } 
    else { 
     console.log("TABLED CREATED"); 
     console.log(table); 
    } 
}); 

Antwort

2

In der Tabellendefinition, genannt Sie den Schlüssel Ref-ID aber in Ihrer Put-Operation Sie den Schlüssel Info sind zu benennen. Wenn Ihre Tabelle einen Hash-Schlüssel mit dem Namen Ref-ID hat, wird für jeden von Ihnen eingegebenen Datensatz ein Wert für Ref-ID benötigt.

+0

Danke für die Antwort. Ich habe die Änderungen vorgenommen und bekomme immer noch den gleichen Fehler. Ich habe meinen Beitrag bearbeitet, um die Änderungen wiederzugeben, die ich gemacht habe, vielleicht habe ich einen weiteren trivialen Fehler gemacht? – FF5Ninja

+1

Haben Sie die Tabelle nach dem Ändern des Schlüsselnamens neu erstellt? –

+0

Ah ja, trivialer Fehler. Vielen Dank! Jetzt habe ich einen neuen Fehler zu beheben lol – FF5Ninja