使用CSV批量上传到Azure存储

我遇到了将大型csvfile upload到Azure的表存储的问题,因为它似乎是从数据stream中如此快速地传输数据,以至于无法正确上传或引发大量超时错误。

这是我现在的代码:

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。

我知道要解决这个问题,我可能需要批量发送数据,但我几乎不知道该怎么做。

我不知道azure包和CSV包,但是我build议你使用stream上传文件。 如果将文件保存到驱动器,则可以从中创build读取stream ,然后使用createBlockBlobFromStream将该stream上传到azure色。 这个问题在这里redirect我。 我build议你看看,因为它处理编码。 代码提供了一种将文件转换为base64string的方法,但是我有这样的想法,可以使用节点更高效地完成。 但是我将不得不考虑这一点。

嗯我build议将您的file upload到blob存储,您可以参考您的表存储中的blob URI。 块blob选项给你一个简单的批量上传方式。