我正在使用AWS Redshift通过COPY命令加载多个S3文件。我是通过清单来做这件事的。我们可能有多个清单文件需要在任何时间点加载到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的整体性能?我对并行执行多个复制命令的担心是它在执行复制时会引入资源争用。
我最终做的是将多个清单文件的内容加入到超级清单中。因此,我没有为500个清单文件执行500个单独的COPY命令,而是将500个清单的内容连接成一个超级清单,然后执行Redshift COPY。
性能提升非常显着。单个清单的Redshift COPY大约需要3分钟。将500加入1个超级清单需要45-90分钟。
您可以运行多个复制命令,当然它会影响性能。您只需要进行一些测试来衡量您可以接受的减速水平。
如果要限制可以同时运行的副本数,可以创建一个新用户并按照Tutorial: Configuring Workload Management (WLM) Queues to Improve Query Processing进行操作。假设您将并发设置为1,那么您可以启动多个命令,其中只有一个将运行。
为大量数据运行一个大的COPY的问题是Redshift将在磁盘上分配预期表的最大大小,这可能导致DISK FULL异常,如果您将COPY命令分成几个,则可以避免COPY(*将一个接一个地运行。不同时运行)。考虑到Redshift群集中的核心数量,以最大化并行性也很重要。