2015-10-18 23 views
0

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

是否可以执行复制命令传递清单文件的列表/数组像下面?

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的整体性能太多?我并行执行多个副本命令的问题在于,它在执行副本时会引入资源争用。

回答

1

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

性能改善显着。 Redshift单个清单COPY约需3分钟。连接500到1超级舱单需要45-90分钟。

0

对于大量数据运行一个大COPY的问题是,Redshift会在磁盘上分配预期表的最大大小,这可能会导致DISK FULL异常,如果要拆分COPY命令转换为多个COPY(*将会一个接一个地运行,NOT)。 为了最大化并行性,记住Redshift群集中的核心数量也很重要。

+0

已经有解决方案,甚至更多OP自己解决了他自己的问题。 –

+0

我知道,但我认为有必要提到他的解决方案可能不适用于所有情况,对于到此为止的人(像我一样)事先知道 – JustinCase

+0

好,因为您相信您的解决方案很好。可以留在这里。 :-) –