2017-01-15 7 views
2

私は米国西部のds2.xlarge Redshiftクラスターを約1TBのデータで使用しています。私は次のように同じ領域のS3バケットに50GBのテーブルをアンロードしようとしています:S3への赤方偏移のアンロードが極端に遅い

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

このクエリには約1時間かかります。 Amazon Webサイトでは、私たちのクラスタに0.5GB/sのI/Oがあると言われているので、これは意外なことです。つまり、50GBのテーブルは1時間ではなくS3にアップロードするのに2分以下かかることになります。 (広告の20〜30倍の遅さ)

他の誰かがこの問題に遭遇したか、または修正/回避策を見つけましたか? Redshiftを使用することに決めたら、Redshiftから毎日約200GBのデータをS3に移動する必要があります。

+0

クラスタにノードが1つしかありませんか。テーブルにはいくつの行と列がありますか?より少ない量(例えば、 '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)列の表に書き込むことができます。これはかなり遅くなります。そして、そのテーブルをアンロードします。これははるかに高速です。

関連する問題