2017-08-02 2 views
0

Ich habe einen Trigger auf einen S3-Bucket, der eine CSV-Datei hat. Ich versuche, eine node.js Lambda-Funktion zu schreiben, um die CSV-Datei in eine Dynamodb-Tabelle zu laden. Meine Datei ist wie untenkonvertieren CSV in Dynamodb JSON-Format

Speed, San Diego, 35,0,0 
Air, Houston, 32,0,0 
Air, Chicago, 35,0,0 

Meine Datei i keine Kopf, sondern müssen sie mit dem Schlüssel valueslike haben unter

Gauge: Speed, City: San Diego, Value:35, temp1: 0, temp2: 0 

und so weiter, ich bin im Grunde versucht, nur zu erhalten Dies in Dynamodb JSON-Format, sobald ich es in dieses Format bekomme, kann ich es laden, aber ich konnte keine Beispielskripte online finden. Hat jemand ein Beispiel dafür, wie man die Originaldaten in dynamodb json format bekommt?

Ich habe die Datenpipeline Beiträge gesehen, aber ich bin für einen Knoten/js Methode suchen, um diese Daten zu DDB json zu konvertieren

Antwort

1

Sie die CSV-Inhalt in ein Array JavaScript parsen können die csv-parse npm Modul. Ich benutze Version 1.2.0, die Synchronisierungsoption, aber es sollte mit späteren Versionen funktionieren.

const parse = require('csv-parse/lib/sync'); 

function parseCsv(data, header) { 
    // remove spaces in front of data 
    data = data.replace(/\s*,\s*/g, ","); 
    // add new line between header & data 
    data = `${header}\n${data}`; 

    return parse(data, {columns: true}); 
} 

var csv = 
`Speed, San Diego, 35,0,0 
Air, Houston, 32,0,0 
Air, Chicago, 35,0,0`; 

// comma separate your header 
var header = "Gauge,City,Value,temp1,temp2"; 


// #TEST 
var ddbArray = parseCsv(csv, header); 

console.log(JSON.stringify(ddbArray, 0, 2)); 
0

können Sie csvtojson benutzen, um Ihre CSV-Daten in JSON-Objekt in Ihrer Lambda-Funktion zu konvertieren.

Hier ist ein schnelles und schmutziges Beispiel für Sie auf die Idee zu bekommen:

var AWS  = require('aws-sdk'), 
 
    Promise = require('bluebird'), 
 
    csv  = require('csvtojson'), 
 
    uuid = require('uuid/v4'); 
 

 

 
AWS.config.setPromisesDependency(Promise); 
 

 
var save = (items) => { 
 
    var dynamodb = new AWS.DynamoDB.DocumentClient(); 
 
    var params = { 
 
     RequestItems: { 
 
      'MyDynamoDBTable': items 
 
     } 
 
    } 
 

 
    return dynamodb.batchWrite(params).promise(); 
 
} 
 

 
var data = 
 
"Speed, San Diego, 35,0,0 \n \ 
 
Air, Houston, 32,0,0 \n \ 
 
Air, Chicago, 35,0,0"; 
 

 
var items = []; 
 

 
csv({noheader: true}) 
 
    .fromString(data) 
 
    .on("csv", (row) => { 
 
     console.log(row); 
 
     
 
     var item = { 
 
      PutRequest: { 
 
       Item: { 
 
        id: uuid(), 
 
        gauge: row[0], 
 
        city : row[1], 
 
        value: row[3], 
 
        temp1: row[4], 
 
        temp2: row[5] 
 
       } 
 
      }    
 
     }; 
 

 
     items.push(item); 
 
    }) 
 
    .on('done',() => { 
 
     save(items) 
 
      .then((result) => console.log(result)) 
 
      .catch((error) => console.error(error)); 
 
    });