python - 使用不寻常的分隔符将大型 csv (175 GB) 导入 MySQL 服务器

标签 python mysql pandas csv heidisql

我有一个 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/

相关文章:

python - 如何提示用户输入主机名,然后从大列表中收集主机名

python - 导入错误 - 没有名为 numpyio 的模块

mysql - 三个表 UPDATE 和 JOIN 导致错误 1064

python - 将两个 DataFrame 合并为 block

python - 在类 Python 之外定义类方法

mysql - 将数百行数据与另一个表中的数据进行比较

SELECT * 列的 MySQL 别名

python - 使用 resample/timedelta 进行 pandas 在线日志记录

python - 如何将第一个字符串与列匹配并打印 Match?

python - PyQtGraph 不调整大小