我有一个 175 GB 的 csv,我正试图将其导入 MySQL。
表格已设置并格式化。
问题是,csv 使用非正统的定界符和行分隔符(都是 3 个字符串,@%@ 和 @^@)。
经过大量试验和错误后,我能够在 HeidiSQL 中启动进程,但它会卡住并且从未实际填充任何数据。
理想情况下,我想使用 Python,但解析器只接受 1 个字符的行分隔符,这让这很棘手。
有没有人有任何关于让它工作的提示?
最佳答案
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 文件的一个非常小的子集并将其加载到测试表中,只是为了让它正常工作,进行必要的调整,验证结果。
我还想将负载分解为更易于管理的 block ,并避免耗尽 ibdata1 文件中的回滚空间。我会使用类似 pt-fifo-split
(Percona 工具包的一部分)的东西将文件分成一系列单独的加载,但不幸的是,pt-fifo-split
不提供指定行分隔符的方法。要使用它,我们必须预处理文件,替换现有的换行符,并将行分隔符 @^@
替换为换行符。
(如果我必须一次加载整个文件,我会把它作为临时表加载到 MyISAM 表中,而不是 InnoDB 表中。而且我会有一个单独的进程来复制行 (以合理大小的 block )从 MyISAM 暂存表到 InnoDB 表。)
关于python - 使用不寻常的分隔符将大型 csv (175 GB) 导入 MySQL 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51897241/