Redshift - 复制多个清单文件

时间:2015-10-18 22:50:01

标签: amazon-web-services copy amazon-redshift

我使用AWS Redshift通过COPY命令加载多个S3文件。我通过清单来做这件事。我们可能有多个清单文件需要在任何时间点加载到Redshift中。将多个清单文件加载到Redshift的最佳方法是什么?

是否可以执行copy命令传递清单文件的列表/数组,如下所示?

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的整体性能吗?我对并行执行多个复制命令的担忧是它在执行复制时会引入资源争用。

3 个答案:

答案 0 :(得分:2)

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

性能提升非常显着。单个清单的Redshift COPY大约需要3分钟。将500加入1个超级清单需要45-90分钟。

答案 1 :(得分:0)

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

如果要限制可以同时运行的副本数量,可以创建新用户并按照Tutorial: Configuring Workload Management (WLM) Queues to Improve Query Processing进行操作。假设您将并发设置为1,那么您可以启动多个命令,其中只有一个将运行。

答案 2 :(得分:0)

为大量数据运行一个大的COPY的问题是Redshift将在磁盘上分配预期表的最大大小,这可能导致DISK FULL异常,如果你将分割COPY可以避免将命令分成几个COPY(*将一个接一个地运行。 NOT 同时运行)。 考虑到Redshift群集中的核心数量,以最大化并行性,这一点也很重要。