2017-08-02 7 views
0

私はcsvファイルを持つS3バケットにトリガーを持っています。私はnode.jsラムダ関数を記述してcsvファイルをdynamodbテーブルにロードしようとしています。 私のファイルは、私のファイルは、ヘッダを持っていませんが、私はcsvをdynamodb json形式に変換する

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

以下のキーvalueslikeでそれを持っている必要がありますというように、私は基本的には取得しようとしています

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

以下のようなものですこれをdynamodb json形式にすると、一度その形式にすると、ロードできますが、オンラインでサンプルスクリプトを見つけることができませんでした。誰も元のデータをdynamodb json形式にする方法の例はありますか?

私は、データパイプラインの記事を見てきましたが、私はあなたがcsv-parse NPMモジュールを使用して、JavaScriptの配列にCSVの内容を解析することができDDBのJSON

答えて

1

にこのデータを変換するためのノード/ jsの方法を探しています。私は同期オプションであるバージョン1.2.0を使用していますが、それ以降のバージョンでも動作します。

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

あなたのラムダ関数でJSONオブジェクトにあなたのCSVデータを変換するためにcsvtojsonを使用することができます。

あなたがアイデアを得るためにするためにここでは、迅速かつ汚い例だ:

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)); 
 
    });

関連する問題