How can I import bulk data from a CSV file into DynamoDB?

后端 未结 14 1850
我在风中等你
我在风中等你 2021-01-31 15:08

I am trying to import a CSV file data into AWS DynamoDB.

Here\'s what my CSV file looks like:

first_name  last_name
sri ram
Rahul   Dravid
JetPay  Underw         


        
14条回答
  •  悲&欢浪女
    2021-01-31 15:46

    As a lowly dev without perms to create a Data Pipeline, I had to use this javascript. Hassan Sidique's code was slightly out of date, but this worked for me:

    var fs = require('fs');
    var parse = require('csv-parse');
    var async = require('async');
    const AWS = require('aws-sdk');
    const dynamodbDocClient = new AWS.DynamoDB({ region: "eu-west-1" });
    
    var csv_filename = "./CSV.csv";
    
    rs = fs.createReadStream(csv_filename);
    parser = parse({
        columns : true,
        delimiter : ','
    }, function(err, data) {
        var split_arrays = [], size = 25;
    
        while (data.length > 0) {
    
            //split_arrays.push(data.splice(0, size));
            let cur25 = data.splice(0, size)
            let item_data = []
    
            for (var i = cur25.length - 1; i >= 0; i--) {
              const this_item = {
                "PutRequest" : {
                  "Item": {
                    // your column names here will vary, but you'll need do define the type
                    "Title": {
                      "S": cur25[i].Title
                    },
                    "Col2": {
                      "N": cur25[i].Col2
                    },
                    "Col3": {
                      "N": cur25[i].Col3
                    }
                  }
                }
              };
              item_data.push(this_item)
            }
            split_arrays.push(item_data);
        }
        data_imported = false;
        chunk_no = 1;
        async.each(split_arrays, (item_data, callback) => {
            const params = {
                RequestItems: {
                    "tagPerformance" : item_data
                }
            }
            dynamodbDocClient.batchWriteItem(params, function(err, res, cap) {
                if (err === null) {
                    console.log('Success chunk #' + chunk_no);
                    data_imported = true;
                } else {
                    console.log(err);
                    console.log('Fail chunk #' + chunk_no);
                    data_imported = false;
                }
                chunk_no++;
                callback();
            });
    
        }, () => {
            // run after loops
            console.log('all data imported....');
    
        });
    
    });
    rs.pipe(parser);

提交回复
热议问题