C#快速解析txt或csv格式文件并入库

牧歌ing 2017-04-24 04:20:32
请教大家一个问题,解析一个50G的csv文件并入库时太慢的问题,具体如下:
可配置变量 int a=100,b=2,c=20,v=30;
文件格式:12|20|30|40|50|60
解析:拿到一行数据并分割后,需要对第其中的各列做一个运算,比如第一列:12*a/b
现在我是从文件中一行一行读取,并批量入库的,现在1g要20来分钟,我想请教大家在该场景下如何快速解析入库,如果有样列更好,谢谢!
...全文
859 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 3 楼 xuzuning 的回复:
1、建一个能容纳你的数据的临时表(CSVTable) BULK INSERT CSVTable FROM 'D:\csv.txt' WITH( FIELDTERMINATOR = '|', ROWTERMINATOR = '\n' ) 将数据导进去 2、用 update 指令计算所需计算的列 3、将临时表插入到正式表中
这是什么语法 欢迎阅读我的文章
  • 打赏
  • 举报
回复
引用 楼主 u013010499 的回复:
现在我是从文件中一行一行读取,并批量入库的,现在1g要20来分钟,
这基本上不是你按行“读取数据、进行split 列分割”的问题,这应该是你的数据库系统以及业务逻辑约束问题。 比如说,首先删除相关索引、约束定义、触发器,再测试一下插入。
脆皮大雪糕 2017-06-25
  • 打赏
  • 举报
回复
入什么库?如果是oracle,使用其自带的sql loader导入,那个速度 biu biu的。我平时导入1200多万记录,4G多的文件几分钟就可以了。 只不过有几个限制 1、源文件需要放在oracle服务器上 ,你50G的东西用网络传也要很长时间。 2、目标表需要是空表。这个一般也好办,建立一张接口表导入数据,然后再从接口表进行后续处理即可。
秋的红果实 2017-06-25
  • 打赏
  • 举报
回复
分块读取原数据源,然后存入多个数据库表,然后union all将各个表连起来
牧歌ing 2017-06-23
  • 打赏
  • 举报
回复
引用 7 楼 starfd 的回复:
50g,这东西生成的策略就是有问题的,50G这东西怎么读取就是个比较困难的问题了
是的,现生成的时候已分块
  • 打赏
  • 举报
回复
50g,这东西生成的策略就是有问题的,50G这东西怎么读取就是个比较困难的问题了
angel6709 2017-04-24
  • 打赏
  • 举报
回复
快不了。。。
孤独的海啊 2017-04-24
  • 打赏
  • 举报
回复
你多线程! 用一个线程读取这个文件,并解析甚至生成sql语句,放到一个公共的list中或者MQ(如果你懂的话),然后启动多个线程,同时读取这个list(用list.remove(0)这个方法确保,读取并删除),执行sql写入。 先来10个线程写入的试试。 注意list要线程同步。
  • 打赏
  • 举报
回复
看到50G,我觉得你这个东西快不了。数据这么多必须要花大量时间处理,就看你能接受的时间是多长了。
xuzuning 2017-04-24
  • 打赏
  • 举报
回复
1、建一个能容纳你的数据的临时表(CSVTable) BULK INSERT CSVTable FROM 'D:\csv.txt' WITH( FIELDTERMINATOR = '|', ROWTERMINATOR = '\n' ) 将数据导进去 2、用 update 指令计算所需计算的列 3、将临时表插入到正式表中
by_封爱 版主 2017-04-24
  • 打赏
  • 举报
回复
mark.... 你可以百度搜索 c# 超大txt 就有资料了. 不过我到是想看看 论坛里还有没有更屌的办法

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧