2017-08-20 42 views
1

我有一个大的清单文件,其中包含大约460,000个条目(所有S3文件),我希望加载到Redshift。由于我无法控制的问题,这些条目中的一些(可能是一打或更多)包含错误的JSON,如果我一次传入整个清单,会导致COPY命令失败。使用带键前缀的COPY也会以相同的方式失败。使用多个清单文件从S3加载到Redshift?

为了解决这个问题,我编写了一个Python脚本,它将一次一次通过清单文件一个URL,并为每个使用psycopg2的COPY命令发出一个COPY命令。该脚本还会捕获并记录任何错误,以确保脚本即使在遇到错误文件时也能运行,并允许我们找到并修复错误的文件。

这个脚本现在已经运行了一个多星期,在一个备用的EC2实例上运行了一个多星期,并且只完成了大约75%。我想降低运行时间,因为此脚本将再次使用。

我对Redshift的理解是,COPY命令是并行执行的,而且我有一个想法 - 将清单文件拆分为更小的块,然后运行脚本,每个块都会减少加载所有块的时间文件?

回答

1

COPY命令可以非常快速和高效地并行加载多个文件。因此,当您为python文件中的每个文件运行一个COPY命令时,由于没有利用并行加载,这将花费很多时间。

所以,也许你可以编写一个脚本来在你的清单中找到坏的JSON文件,并将它们踢出来并用新的清洁清单运行一个COPY文件?

或者像你建议的那样,我会建议将清单文件拆分成小块,以便COPY可以一次运行多个文件。 (不是每个文件的单个COPY命令)

相关问题