使用CSV批量上载到Azure存储

时间:2014-05-10 18:08:23

标签: javascript node.js batch-file csv azure

我在将大型csv文件上传到Azure的表存储时遇到了一个问题,因为它似乎很快地从中流式传输数据,导致它无法正常上传或引发大量的超时错误。

这是我目前的代码:

var fs = require('fs');
var csv = require('csv');
var azure = require('azure');
var AZURE_STORAGE_ACCOUNT = "my storage account";
var AZURE_STORAGE_ACCESS_KEY =     "my access key";
var tableService =     azure.createTableService(AZURE_STORAGE_ACCOUNT,AZURE_STORAGE_ACCESS_KEY);
var count = 150000;
var uploadCount =1;
var counterror = 1;
tableService.createTableIfNotExists('newallactorstable', function(error){
if(!error){
    console.log("Table created / located");
}
else
{
    console.log("error");
}
});

csv()
.from.path(__dirname+'/actorsb-c.csv', {delimiter: '\t'})
.transform( function(row){
    row.unshift(row.pop());
    return row;
})
.on('record', function(row,index){
    //Output plane carrier, arrival delay and departure delay
    //console.log('Actor:' + row[0]);

    var actorsUpload = {
    PartitionKey : 'actors'
    , RowKey : count.toString()
    , Actors : row[0]
    };



    tableService.insertEntity('newallactorstable', actorsUpload, function(error){
        if(!error){
            console.log("Added: " + uploadCount);
        }
        else
        {
            console.log(error)
        }
    });
    count++


})
.on('close', function(count){
    console.log('Number of lines: '+count);
})
.on('error', function(error){
    console.log(error.message);
});

CSV文件大约为800mb。

我知道要修复它,我可能需要批量发送数据,但我完全不知道如何做到这一点。

2 个答案:

答案 0 :(得分:1)

我不知道azure包还是CSV包,但我建议你使用流上传文件。如果您已将文件保存到驱动器,则可以从中创建read stream,然后使用该流将createBlockBlobFromStream上传到azure。那个问题会重定向我here。我建议你看看它,因为它处理编码。代码提供了一种将文件转换为base64字符串的方法,但我有一个想法,可以使用节点更有效地完成。我不得不调查一下。

答案 1 :(得分:1)

hmm我建议将文件上传到blob存储,并且可以在表存储中引用blob URI。阻止blob选项为您提供了一种简单的批量上传方式。