0

我需要從Google雲端存儲中讀取文件,並根據文件中的字段transaction_date將其分割爲多個文件。文件大小約爲6TB(分成多個文件)。最有效的方法是什麼?我必須使用Dataflow或Dataproc,還有其他簡單的方法來做到這一點嗎?Google雲端存儲 - 按文件中的值拆分文件

+0

您預計每個transaction_date有多少條記錄?你輸入格式的文件格式是什麼,你是否計劃輸出相同的文件格式? (是換行符分隔的CSV還是JSON或類似的東西?) –

+0

90%的數據是針對一個日期的,其餘的10%分佈在長達10天的時間內。以換行符分隔的CSV,我正在計劃輸出中的相同格式。只需要將一個文件放入多達11個文件(今天的90%+過去10天的10%)。 –

+0

您是否需要在單個*文件中與單個transaction_date關聯的所有記錄,或者是否只需要按照您可以輕鬆獲取交易日期的所有數據的方式來組織它,可能通過組織成較小的文件除以每個交易日期的不同目錄? –

回答

1

我認爲您希望按照transaction_date編寫單獨的(分片)文件。在Dataflow中附帶的TextIO.Write中沒有任何直接的支持,但是由於聽起來您有一個特殊情況,您知道日期範圍,因此您可以手動創建〜11個不同的已過濾TextIO.Write變換。

PCollection<Record> input = ... 

for (Date transaction_date : known_transaction_dates) { 
    input.apply(Filter.by(<record has this date>) 
     .apply(TextIO.Write.to(
      String.format("gs://my-bucket/output/%s", transaction_date))); 
} 

這當然不理想。對於BigQueryIO,可以根據數據窗口向不同的表寫入功能 - 添加到TextIO的類似功能可能會解決您的使用案例。否則,各種數據相關的寫入都在我們的視線之內,並且包括像您這樣的情況。

相關問題