首页 > 解决方案 > 如何根据日期列在不同的文本/csv文件中转储一个巨大的mysql表?

问题描述

我有一个包含数百万条记录的巨大 MySQL 表。我有一个用例,根据日期列,我想将结果拆分并转储到不同的文本文件中。

例如:

col_1 col_2 date_col
a     b      20-12-2021 
a     b      20-12-2021 
a2    b2     21-12-2021
..    ..     ...

因此row1,androw2 将转到一个名为 的 CSV 20_12_2021.csvrow3并将转到21_12_2021.csv. 我现在正在做的是使用 Python 来获取结果,然后逐行循环,然后确定结果的去向,但这需要很长时间。

有没有更好更优化的方法来做到这一点?

标签: pythonmysql

解决方案


我喜欢这个解决方案,您可以在其中使用df.groupbycolumn date_col,它将使用映射器或0默认情况下轴上的一系列列对 DataFrame 进行分组,并表示行。

解决方案:

for name, g in df.groupby('date_col'):
    g.to_csv(f'{name}.csv', index=False)

Result:

$ cat 20-12-2021.csv  <-- CSV file created

col_1,col_2,date_col
a,b,20-12-2021
a,b,20-12-2021

$ cat 21-12-2021.csv   <-- CSV file created

col_1,col_2,date_col
a2,b2,21-12-2021

或者

df.groupby('date_col').apply(lambda x: x.to_csv('{}.csv'.format(x.name), index=False))

注意:如果您对一百万行有效的 MYSQL 感到好奇,那么这里有一个很好的答案Pandas 现在内置了对@ThePhysicist 分块加载的支持。

Alao 看一下带有 chunksize 的 Reading table 仍然会泵送内存


推荐阅读