Redshift - 复制多个清单文件

Redshift - copying multiple manifest files

我正在使用 AWS Redshift 通过 COPY 命令加载多个 S3 文件。我正在通过清单执行此操作。我们可能有多个清单文件需要随时加载到 Redshift 中。将多个清单文件加载到 Redshift 的最佳方式是什么?

是否可以执行传递 list/array 清单文件的复制命令,如下所示?

copy schema.table_name
from 's3://my-bucket/manifest1.manifest', 's3://my-bucket/manifest2.manifest', 's3://my-bucket/manifest3.manifest'
credentials 'aws_access_key_id=XXXX;aws_secret_access_key=YYYY'
manifest gzip format as json 'auto';

或者是否可以从不同的应用程序执行多个复制命令而不会对 Redshift 的整体性能造成太大影响?我对并行执行多个复制命令的担忧是它会在执行复制时引入资源争用。

可以运行复制多个命令,当然会影响性能。您只需要做一些测试来衡量您可以接受的减速程度。

如果想限制可以运行同时复制的数量,可以新建一个用户关注Tutorial: Configuring Workload Management (WLM) Queues to Improve Query Processing。假设您将并发设置为 1,那么您可以启动多个命令,其中只有 1 个是 运行ning。

我最后做的是将多个清单文件的内容加入到一个超级清单中。因此,我没有为 500 个清单文件执行 500 个单独的 COPY 命令,而是将 500 个清单的内容连接成一个超级清单,然后执行 Redshift COPY。

性能提升显着。单个清单的 Redshift COPY 花费了大约 3 分钟。将 500 个连接成 1 个超级清单需要 45-90 分钟。

运行对大量数据进行一次大的 COPY 的问题是 Redshift 将在磁盘上分配预期的最大大小 table,这可能导致 DISK FULL 异常,如果将 COPY 命令拆分为多个 COPY,则可以避免这种情况(*这将 运行 一个接一个。NOT 同时进行)。 记住 Redshift 集群中的内核数量也很重要,以便最大限度地提高并行度。