将大型csv(175gb)导入mysql服务器,并使用不寻常的delimeters

h79rfbju  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(339)

我有一个175 gb的csv,我正试图拉到mysql。
表格已设置并格式化。
问题是,csv使用非正统的delimeters和行分隔符(都是3个字符串,@%@和@^@)。
经过大量的尝试和错误之后,我能够在heidisql中启动这个过程,但是它会冻结,并且永远不会实际填充任何数据。
理想情况下,我希望使用python,但是解析器只接受1个字符的行分隔符,这使得这很棘手。
有没有人有什么办法让它发挥作用?

epggiuax

epggiuax1#

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 不提供指定行分隔符字符的方法。要利用这一点,我们必须对文件进行预处理,替换现有的新行字符,并替换行分隔符 @^@ 使用新行字符。
(如果必须在一次快照中加载整个文件,我会将其作为暂存表加载到myisam表中,而不是innodb表中。我还有一个单独的进程,它将行(以合理大小的块)从myisam staging表复制到innodb表中。)

相关问题