2017-01-15 178 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)列的表格 - 這將非常緩慢。然後卸載該表格 - 速度會更快。