這裏的訣竅是將文件檢索和潛在解壓縮分解爲一個子作業,然後將文件處理成另一個子作業。
這裏有一個簡單的例子任務:
正常,您連接到S3,然後你可以列出使用tS3List桶中所有相關的對象,然後通過這個來tS3Get。或者,您可能有另一種方法將您想要下載的相關對象密鑰傳遞給tS3Get。
在上述工作中,我設置tS3Get了獲取每一個通過設置鍵迭代由tS3List組件對象:
((String)globalMap.get("tS3List_1_CURRENT_KEY"))
,然後將其下載到:
"C:/Talend/5.6.1/studio/workspace/S3_downloads/" + ((String)globalMap.get("tS3List_1_CURRENT_KEY"))
我添加的額外位開始於tS3Get的條件鏈接Run If
,它將tFileUnarchive與條件鏈接在一起:
((String)globalMap.get("tS3List_1_CURRENT_KEY")).endsWith(".zip")
它檢查從S3下載的文件是否爲.zip
文件。
的tFileUnarchive組件然後只需要告訴解壓什麼,這將是我們剛剛下載的文件:
"C:/Talend/5.6.1/studio/workspace/S3_downloads/" + ((String)globalMap.get("tS3List_1_CURRENT_KEY"))
以及在哪裏它解壓到:
"C:/Talend/5.6.1/studio/workspace/S3_downloads"
這然後將提取的文件放在與不需要提取的文件相同的地方。
從這裏我們現在可以通過下載遍歷文件夾尋找我們想通過我的情況下設置的目錄"C:/Talend/5.6.1/studio/workspace/S3_downloads"
和全球表達"*.csv"
的文件類型,因爲我想讀僅在CSV文件(包括壓縮)我在S3中。
最後,我們再通過設置文件中讀取分隔的文件由tFileInputDelimited組件作爲閱讀:
((String)globalMap.get("tFileList_1_CURRENT_FILEPATH"))
而且在我的情況只是那麼我打印這個控制檯,但很明顯,你會再想要在上傳到AWS RDS實例之前執行一些轉換。
感謝您的回覆。但我在這裏遇到了一些問題。 第一個是我在S3上有一個桶,假設'分析',裏面有'May2015'等明智的月份文件夾。因此,tfileUnarchive正在提取文件夾,即在創建May2015/File.txt時指定的路徑中,並在嘗試使用tfilelist對其進行迭代時無法找到該文件。 同樣在這裏你已經展示瞭如何從本地系統做到這一點,但如果我想通過EMR集羣來運行它,那麼我該如何實現它。 請指導我。 – user3454116
您需要將其分解爲多個問題以保持清晰簡潔。我建議創建一個新的問題鏈接回這個問題,顯示你在獲得上述答案之後現在已經做了什麼,然後更具體地滿足你的需求(所以問題標題可能類似於「在嵌套文件夾結構上使用tFileUnarchive在S3「)和上述答案並不完全覆蓋你的新問題。如果/一旦得到答案,我會提出另一個關於如何將這個答案應用於EMR集羣/ MapReduce作業的問題。 – ydaetskcoR
嗨, 感謝您解壓縮文件並閱讀它的解決方案。 關於我的嵌套文件夾結構的第一個查詢,做了一些研究後,我想我已經完成了它。我檢查了tfilelist組件中的include子目錄選項,它似乎工作。 另外,如果您對我的第二個查詢有任何想法,請讓我知道。 – user3454116