2

我正在嘗試將一個巨大的表格從postgres遷移到Redshift中。紅移插入瓶頸

  1. 表的大小爲約5697213832

  2. 工具:Pentaho的水壺表輸入(來自postgres的) - >表輸出(紅移)

  3. 與紅移JDBC4

連接

通過觀察我發現插入到Redshift是瓶頸。僅約500行/秒。

有沒有什麼方法可以在單機模式下加速插入Redshift?像使用JDBC參數?

回答

7

的主要原因的紅移性能,瓶頸我認爲是紅移每個命中對待到羣集作爲單個查詢。它在集羣上執行每個查詢,然後進入下一個階段。現在,當我發送多行(本例中爲10)時,每行數據都被視爲單獨的查詢。 Redshift逐個執行每個查詢,並且一旦執行所有查詢,就完成數據的加載。這意味着如果您擁有1億行,那麼您的Redshift羣集上將運行1億個查詢。那麼表現去傾倒!

使用S3 File Output步驟在PDI將加載數據至S3剷鬥然後紅移羣集上施加COPY命令來讀取從S3相同的數據到紅移。這將解決你的性能問題。

您也可以閱讀以下博客鏈接:

  1. Loading data to AWS S3 using PDI
  2. Reading Data from S3 to Redshift

希望這有助於:)

+0

如果您可以在S3上將輸出分割爲單獨的文件,那麼您可以使用清單工具來並行化您的負載。 http://docs.aws.amazon.com/redshift/latest/dg/r_COPY_command_examples.html#copy-command-examples-manifest –

14

你有沒有考慮使用S3作爲中間層?

將您的數據轉儲到csv文件並應用gzip壓縮。上傳文件到S3,然後使用copy命令加載數據。

http://docs.aws.amazon.com/redshift/latest/dg/r_COPY.html

+0

好主意,只是想知道是否有其他的方式來加載數據到Redshift。像多線程插入Redshift –

+0

我認爲這是最快的方法。在我的情況下,轉換和加載5M記錄需要花費4分鐘=每秒20.000行(在EC2上轉換,然後將文件傳輸到S3並觸發複製命令) – vtuhtan

+1

這是根據redshift文檔加載表格的最有效方式:http://www.hp.com/go/downloads/ ://docs.aws.amazon.com/redshift/latest/dg/t_Loading_data。html – skud

0

更好地將數據導出到S3,然後用COPY命令將數據導入Redshift。通過這種方式,導入過程很快,而您不需要將其抽真空。

0

將數據導出到S3存儲桶並在Redshift中使用COPY命令。 COPY命令是在Redshift中插入數據的最快方式。