node.js之定时任务+文件读取+INSERTALL

有个需求

每天更新一下oracle数据库中的某张表

数据来自与csv文件 四个字段,用逗号分割

大约千万条,测试数据有298W条


引入定时任务模块

var schedule = require('node-schedule');

var start=require("~~~~")

定义规则

 var rule = new schedule.RecurrenceRule();
            rule.dayOfWeek = [0, new schedule.Range(1, 6)];
            rule.hour = 15;
            rule.minute = 48;
            var j = schedule.scheduleJob(rule, function(){
                BlmLog.info("[schedule] [start]:Success !!");
                start.start();
            });

如:每周15:48执行任务,即 引入的start的start方法

start方法:

引入:

 var fs = require("fs");
 var readline = require('readline')

读取csv文件中的每一行  拼接成sql放入数组

会在dao、中遍历数组

与INSERT ALL组成最终的sql语句

6000条一插

设置成500条的时候 对oracle请求过于频繁会报错

6000条又有点慢

this.start=async() =>{
        const re = await dao.clearTable();
        var i=0;
        console.log("start read!");
        var rl = readline.createInterface({
            input: fs.createReadStream('vlcc_ship_track.csv')

        });
        rl.on('line', async(line)=>{
            var results=line.split(",");
            if(results.length==4){
            var sql = "INTO 表名 VALUES ('"+results[0]+"','"+results[1]+"','"+results[2]+"','"+results[3]+"')";
            data.push(sql);}
            i++;
            if(i==6000){
                i=0;
                rl.pause();//暂停一哈,传入data
                dao.insert(data);
                data.length=0;
                await rl.resume();
            }
        });
    rl.on('close', async(line) =>{
            await dao.insert(data);//不够6000条,剩下的也插入
            console.log("read end!");
        });  
    }
清空表用truncate table 表名

INSERT ALL写法:

var sql_data="";
        for (var i=0;i<data.length;++i){
            sql_data=sql_data+data[i]+" ";
        }

 var sql = "INSERT ALL "+sql_data+" select 1 from dual";




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值