使用异常的测距仪将大型csv(175 GB)导入MySQL服务器

时间:2018-08-17 14:10:09

标签: python mysql pandas csv heidisql

我有一个要插入MySQL的175 GB CSV。

表已设置并格式化。

问题是,csv使用非正统的定界符和行分隔符(都是3个字符串,分别是@%@和@ ^ @)。

经过大量的试验和错误,我能够使该过程在HeidiSQL中启动,但是它会冻结并且从不实际填充任何数据。

理想情况下,我想使用Python,但是解析器仅接受1个字符的行分隔符,这很棘手。

有人有任何技巧可以使它正常工作吗?

1 个答案:

答案 0 :(得分:3)

MySQL LOAD DATA语句将处理具有多个字符定界符的csv文件

https://dev.mysql.com/doc/refman/5.7/en/load-data.html

我希望这样的事情:

LOAD DATA LOCAL INFILE '/dir/my_wonky.csv' 
INTO TABLE my_table 
FIELDS TERMINATED BY '@%@'
LINES TERMINATED BY '@^@'
( col1 
, col2
, col3
)

我会使用.csv文件的一小部分并将其加载到测试表中,只是为了使其正常工作,进行必要的调整并验证结果。

我还希望将负载分成更易于管理的块,并避免浪费ibdata1文件中的回滚空间。我会使用类似pt-fifo-split(Percona工具包的一部分)的东西将文件分解为一系列单独的负载,但是不幸的是,pt-fifo-split没有提供一种指定行定界符的方法( s)。要利用这一点,我们必须对文件进行预处理,以替换现有的新换行符,并用新的换行符替换行定界符@^@

(如果我必须一次性加载整个文件,则将其作为登台表存储到MyISAM表中,而不是InnoDB表中。并且我将有一个单独的过程来复制行(大小合适的块)从MyISAM临时表到InnoDB表。)