记一次从csv文件导入6千万数据到Mysql数据库

接到客户方需求,提供了一份2.7G的CSV文件,要求去更新数据库。

第一回合,刚拿到数据的时候,第一想法是直接更新这么多数据肯定不合理的,而且性能非常差,搞不好就卡死数据库。所以想到的是对改数据进行拆分,然后问题来了,由于数据量太大,Excel、txt、Notepad++都无法打开,开始各种查资料,找到了Sublime、和Power BI可以打开,然后开始没千万数据去拆分,后面省略万字。。。。。其中辛苦只有试过的人才懂,然后直接放弃了。

第二回合,写python脚本,听说这个很强大,由于没怎么接触过python脚本,写了个脚本尝试了下,一样的道理读取小文件还行,太大的话直接卡死,原谅我对python脚本理解不深,python大神看到请见谅。然后放弃了。。。。。

第三回合,写java脚本,我可是靠这个吃饭的,同事推荐了commons-io,这个确实强大啊,LineIterator流读取,细节就不说了,肯定有很多逻辑问题的,下面直接贴脚本。

哈哈哈,前面两回合只是自己想吐槽下自己,亲测12分钟解决,千万记住导数据是不能加索引。

public Result insert() {
    Long start = System.currentTimeMillis();
    StringBuilder sb = new StringBuilder("insert into tb_id_info(customer_id,member_id) values ");
    StringBuilder sb1 = new StringBuilder();
    Connection con = null;
    Statement st = null;
    try{
        LineIterator it = FileUtils.lineIterator(new File(file), "UTF-8");
        con = new DBUtil("db").openConnection();
        st = con.createStatement();
        int count = 0;
        while(it.hasNext()) {
            String line = it.nextLine();
            count++;
            String[] split = line.replaceAll("\"", "").split(",");
            sb1.append("('"+split[0]+"','"+ split[1] + "')");
            if (count % 10000 != 0){
                sb1.append(",");
            }
            if(count % 10000 == 0) {
                System.out.println("插入数量:" + count);
                String sql = sb.toString() + sb1.toString();
                st.executeUpdate(sql);
                sb1 = new StringBuilder();
            }
        }
        String sql = sb.toString() + sb1.deleteCharAt(sb1.length() - 1).toString();
        st.executeUpdate(sql);
    }catch (Exception e){
        e.printStackTrace();
    }finally {
        try {
            con.close();
            st.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    Long end = System.currentTimeMillis();
    return new ResultUtil<>().setSuccessMsg("执行结束,共耗时:" + (end - start) / 1000 + "秒");
}

数据虽然是导入成功了,但是最终没有解决问题,还有根据id去更新原表数据啊,再接再厉吧!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Python中的pandas库和MySQLdb库来实现将csv文件导入MySQL数据库中的操作,具体步骤如下: 1. 安装pandas库和MySQLdb库: ```python !pip install pandas !pip install mysqlclient ``` 2. 导入需要的库: ```python import pandas as pd import MySQLdb ``` 3. 读取csv文件并将数据存储在DataFrame对象中: ```python data = pd.read_csv('your_csv_file.csv') ``` 4. 建立与MySQL数据库的连接: ```python conn = MySQLdb.connect(host='your_host', port=your_port, user='your_username', passwd='your_password', db='your_database') ``` 5. 将数据写入MySQL数据库: ```python data.to_sql(name='your_table_name', con=conn, if_exists='replace', index=False) ``` 以上代码中,name参数表示要写入的表名,con参数表示与数据库建立的连接对象,if_exists参数表示如果表已经存在则替换原有表,index参数表示不需要将DataFrame对象的索引写入数据库。 完整代码如下: ```python import pandas as pd import MySQLdb # 读取csv文件并将数据存储在DataFrame对象中 data = pd.read_csv('your_csv_file.csv') # 建立与MySQL数据库的连接 conn = MySQLdb.connect(host='your_host', port=your_port, user='your_username', passwd='your_password', db='your_database') # 将数据写入MySQL数据库 data.to_sql(name='your_table_name', con=conn, if_exists='replace', index=False) # 关闭连接 conn.close() ``` 注意:在执行以上代码之前,需要先在MySQL数据库中创建好对应的表,使其与csv文件中的列名一致。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值