2017-08-20 41 views
1

我有一個大的清單文件,其中包含大約460,000個條目(所有S3文件),我希望加載到Redshift。由於我無法控制的問題,這些條目中的一些(可能是一打或更多)包含錯誤的JSON,如果我一次傳入整個清單,會導致COPY命令失敗。使用帶鍵前綴的COPY也會以相同的方式失敗。使用多個清單文件從S3加載到Redshift?

爲了解決這個問題,我編寫了一個Python腳本,它將一次一次通過清單文件一個URL,併爲每個使用psycopg2的COPY命令發出一個COPY命令。該腳本還會捕獲並記錄任何錯誤,以確保腳本即使在遇到錯誤文件時也能運行,並允許我們找到並修復錯誤的文件。

這個腳本現在已經運行了一個多星期,在一個備用的EC2實例上運行了一個多星期,並且只完成了大約75%。我想降低運行時間,因爲此腳本將再次使用。

我對Redshift的理解是,COPY命令是並行執行的,而且我有一個想法 - 將清單文件拆分爲更小的塊,然後運行腳本,每個塊都會減少加載所有塊的時間文件?

回答

1

COPY命令可以非常快速和高效地並行加載多個文件。因此,當您爲python文件中的每個文件運行一個COPY命令時,由於沒有利用並行加載,這將花費很多時間。

所以,也許你可以編寫一個腳本來在你的清單中找到壞的JSON文件,並將它們踢出來並用新的清潔清單運行一個COPY文件?

或者像你建議的那樣,我會建議將清單文件拆分成小塊,以便COPY可以一次運行多個文件。 (不是每個文件的單個COPY命令)

相關問題