1

我有一個管道分隔的文本文件,它是360GB壓縮文件(gzip)。 它有超過1,620列。我不能準確顯示字段名,但這裏是它基本上是什麼:在aws的360gb文本文件中將1620列轉換爲360gb文本文件中的行

primary_key|property1_name|property1_value|property800_name|property800_value 
12345|is_male|1|is_college_educated|1 

嚴重的是,有超過這些屬性名稱/值字段800。 大約有2.8億行。 該文件位於S3存儲桶中。 我需要將數據導入Redshift,但Redshift中的列限制爲1,600。

用戶希望我轉發數據。例如:

primary_key|key|value 
12345|is_male|1 
12345|is_college_educated|1 

什麼是轉動的AWS環境中的文件的好辦法?數據在一個文件中,但我計劃將數據分成許多不同的文件以允許並行處理。

我考慮過使用雅典娜。我找不到任何說明雅典娜允許的最大列數的內容。但是,我發現了一個關於普雷斯托(Presto)(雅典娜是基於此)的網頁,上面寫着「沒有確切的硬限制,但我們已經看到有超過幾千的東西突破。」(https://groups.google.com/forum/#!topic/presto-users/7tv8l6MsbzI)。

謝謝。

回答

1

我從AWS的大部分時間裏所瞭解到的,如果達到極限,就會以錯誤的方式或不以可擴展的方式進行。大多數時候架構師的設計都是考慮到可擴展性和性能。

我們有類似的問題,有2000列。這是我們如何解決它。

  1. 將文件分成20個不同的表,每個100 + 1(主鍵)列。
  2. 在單個查詢中對所有這些表進行選擇以返回所需的所有數據。
  3. 如果您說您希望查看選擇中的所有1600列,那麼業務用戶正在查看錯誤的列以進行分析甚至是機器學習。

要加載10TB +數據我們已經將數據分割成多個文件,並在並行加載它們,裝載這種方式也較快。

在雅典娜和紅移之間,表現是唯一的區別。其餘的都是一樣的。紅移比雅典娜表現更好。初始加載時間和掃描時間高於紅移。

希望它有幫助。

2

首先,調整您的數據,然後加載到Redshift。

更詳細地,所述步驟是:

  1. (使用EMR或可能AWS膠),其讀取在 源S3數據並寫出(到不同的S3文件夾)樞轉的運行火花作業 版本。通過這個我的意思是如果你有800個值對,那麼你會 寫出800行。同時,您可以將文件分成多個部分以啓用並行加載。
  2. 「COPY」將此數據轉化爲Redshift