我正在将一个相当大的文件加载到 postgresql 数据库中。为此,我首先使用split
在文件中获取较小的文件(每个 30Gb),然后我使用以下命令将每个较小的文件加载到数据库中GNU Parallel
and psql copy
.
问题是大约需要 7 个小时来分割文件,然后开始为每个核心加载一个文件。我需要的是一种讲述的方式split
每次完成写入文件时将文件名打印到 std 输出,以便我可以将其通过管道传输到Parallel
然后它开始加载文件split
写完吧。像这样的事情:
split -l 50000000 2011.psv carga/2011_ | parallel ./carga_postgres.sh {}
我已阅读split
手册页,我找不到任何东西。有没有办法做到这一点split
或者任何其他工具?
您可以让并行进行分割:
<2011.psv parallel --pipe -N 50000000 ./carga_postgres.sh
请注意,手册页建议使用--block
over -N
,这仍然会在记录分隔符处分割输入,\n
默认情况下,例如:
<2011.psv parallel --pipe --block 250M ./carga_postgres.sh
Testing --pipe
and -N
以下测试将 100 个数字的序列拆分为 5 个文件:
seq 100 | parallel --pipe -N23 'cat > /tmp/parallel_test_{#}'
检查结果:
wc -l /tmp/parallel_test_[1-5]
Output:
23 /tmp/parallel_test_1
23 /tmp/parallel_test_2
23 /tmp/parallel_test_3
23 /tmp/parallel_test_4
8 /tmp/parallel_test_5
100 total
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)