Mongoexport到多个csv文件

时间:2015-03-16 16:01:41

标签: mongodb csv export-to-csv mongoexport

我有一个很大的mongoDB集合。我想将此集合导出为CSV,然后我可以将其导入统计包中以进行数据分析。

该集合中包含大约15 GB的文档。我想将这个集合拆分成~100个大小相同的CSV文件。有没有办法用mongoexport实现这个目的?我也可以在pymongo中查询整个集合,拆分它并手动写入csv文件,但我想这会慢一点,需要更多编码。

感谢您提供意见。

3 个答案:

答案 0 :(得分:3)

您可以使用--skip& --limit选项。

例如,如果您的集合包含1,000个文档,则可以使用脚本循环(伪代码)执行此操作:

loops = 100
count = db.collection.count()
batch_size = count / loops

for (i = 0; i < loops; i++) {
    mongoexport --skip (batch_size * i) --limit batch_size --out export${i}.json ...
} 

考虑到您的文件大小相等。

但请注意,大跳过很慢。

下限迭代将比上限迭代更快。

答案 1 :(得分:0)

更好的上述循环版本可以并行执行,因为你像我一样不耐烦的sonnofabitch:

假设我们有385892079条记录,除以100。

No. Time Source Destination Protocol Length Info 51 2.476681000 192.168.0.33 192.185.47.210 TCP 62 1143→443 [SYN] Seq=0 Win=65535 Len=0 MSS=1460 SACK_PERM=1 52 2.534541000 192.185.47.210 192.168.0.33 TCP 62 443→1143 [SYN, ACK] Seq=0 Ack=1 Win=29200 Len=0 MSS=1460 SACK_PERM=1 53 2.534559000 192.168.0.33 192.185.47.210 TCP 54 1143→443 [ACK] Seq=1 Ack=1 Win=65535 Len=0 54 2.534720000 192.168.0.33 192.185.47.210 TLSv1 163 Client Hello 56 2.592332000 192.185.47.210 192.168.0.33 TCP 60 443→1143 [ACK] Seq=1 Ack=110 Win=29200 Len=0 57 2.594550000 192.185.47.210 192.168.0.33 TLSv1 191 Server Hello, Change Cipher Spec, Encrypted Handshake Message 58 2.596455000 192.168.0.33 192.185.47.210 TCP 54 1143→443 [FIN, ACK] Seq=110 Ack=138 Win=65398 Len=0 60 2.654542000 192.185.47.210 192.168.0.33 TCP 60 443→1143 [FIN, ACK] Seq=138 Ack=111 Win=29200 Len=0 61 2.654558000 192.168.0.33 192.185.47.210 TCP 54 1143→443 [ACK] Seq=111 Ack=139 Win=65398 Len=0

答案 2 :(得分:0)

#total=335584
limit=20974;
skip=0;
for i in {1..16}; do mongoexport --host localhost --db tweets --collection mycollection --type=csv --fields tweet_id,user_name,user_id,text --out master_new/mongo_rec_${i}.csv -v --skip ${skip} --limit ${limit} --quiet; let skip=$((skip+limit)); done