2017-01-15 172 views
2

我在美国西部使用了一个ds2.xlarge Redshift集群,大约有1TB的数据。我试图卸载50GB表的S3存储在同一区域如下:Redshift卸载到S3非常缓慢

UNLOAD ('select * from table_name') TO 's3://bucket/folder_name/' 
CREDENTIALS 'aws_access_key_id=foo;aws_secret_access_key=bar' 
MANIFEST; 

这个查询时间约1小时运行。这似乎令人惊讶,因为亚马逊网站表示我们的集群将拥有0.5GB/s的I/O,这意味着50GB的表格应该不到2分钟即可上传到S3,而不是一个小时。 (比宣传速度慢20-30倍)

是否有其他人遇到此问题和/或找到修复/解决方法?如果我们决定使用Redshift,我们需要每天将大约200GB的数据从Redshift移动到S3。

+0

集群中只有一个节点吗?表中有多少行和列?如果你做的数量较少(例如'select * from table_name limit 10000')它会更快完成吗?出于兴趣,集群提及0.5GB/s的地方在哪里? –

+0

这里提到了I/O:https://aws.amazon.com/blogs/aws/amazon-redshift-now-faster-and-more-cost-effective-than-ever/ 我相信桌子有大约80M行和10-20列。速度快很多,限制为 – sparknoob

+0

我怀疑I/O列是数据库可以访问磁盘存储的速度,而不一定是导出到Amazon S3的速度。事实上导出速度更快,行数更少表明它与数据量有关。您可以尝试使用工作负载管理(WLM)向进程授予插槽(因此更多的内存)。请参阅:['wlm_query_slot_count'](http://docs.aws.amazon.com/redshift/latest/dg/r_wlm_query_slot_count.html) –

回答

0

Redshift“重新实现”完整行非常昂贵。这就是S3卸载比总磁盘I/O慢得多的原因。

数据以针对检索单个列进行优化的方式存储在磁盘上。重新创建全行会生成(有效)随机I/O访问。在基于SSD的节点类型上,您的卸载速度将更快

如果您想验证这一点,您可以将所有列(分隔符)写入1 VARCHAR(MAX)列的表格 - 这将非常缓慢。然后卸载该表格 - 速度会更快。