【问题标题】:Using multiple manifest files to load to Redshift from S3?使用多个清单文件从 S3 加载到 Redshift?
【发布时间】:2017-08-20 18:49:48
【问题描述】:

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

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

该脚本已经在一个备用 EC2 实例上运行了一个多星期,仅完成了大约 75%。我想降低运行时间,因为这个脚本会被再次使用。

我对 Redshift 的理解是 COPY 命令是并行执行的,因此我有了一个想法 - 将清单文件分成更小的块,然后运行每个块的脚本,以减少加载所有文件所需的时间文件?

【问题讨论】:

    标签: python amazon-web-services amazon-s3 amazon-redshift


    【解决方案1】:

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

    所以也许您可以编写一个脚本来查找清单中的错误 JSON 并将它们踢出并使用新的干净清单运行单个 COPY?

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

    【讨论】:

      猜你喜欢
      • 2018-03-22
      • 1970-01-01
      • 2017-10-22
      • 2013-08-12
      • 1970-01-01
      • 1970-01-01
      • 2016-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多