【问题标题】:Convert CSV to DynamoDB JSON format将 CSV 转换为 DynamoDB JSON 格式
【发布时间】:2019-02-14 05:55:06
【问题描述】:

我在具有 CSV 文件的 S3 存储桶上有一个触发器。我正在尝试编写一个 Node.js lambda 函数来将 CSV 文件加载到 DynamoDB 表中。 我的文件如下所示:

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

我的文件没有标题,但我需要使用如下键值:

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

等等,我基本上只是想把它转换成 DynamoDB JSON 格式,一旦我把它转换成那种格式,我就可以加载它,但是我无法在网上找到任何示例脚本。有人有如何将原始数据转换为 DynamoDB JSON 格式的示例吗?

我看过数据管道的帖子,但我正在寻找一种 Node.js 方法来将此数据转换为 DDB JSON。

【问题讨论】:

    标签: node.js amazon-s3 amazon-dynamodb aws-lambda


    【解决方案1】:

    您可以使用 csv-parse npm 模块将 CSV 内容解析为 JavaScript 数组。我使用的是 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 ));
    

    【讨论】:

      【解决方案2】:

      您可以在 lambda 函数中使用csvtojson 将您的 csv 数据转换为 json 对象。

      这是一个快速而肮脏的例子,让您了解这个想法:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-03-26
        • 2013-11-07
        • 1970-01-01
        • 2018-08-15
        • 2020-08-25
        • 2021-03-19
        • 2020-02-04
        • 1970-01-01
        相关资源
        最近更新 更多