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的类似功能可能会解决您的使用案例。否则,各种数据相关的写入都在我们的视线之内,并且包括像您这样的情况。

相关问题