提问者:小点点

在数据流中从BigQuery写入Cloud Storage时如何设置文件大小而不是分片数


目前使用Dataflow从BigQuery读入表数据并使用一定数量的分片写入Cloud Storage。

//Read Main Input
PCollection<TableRow> input = pipeline.apply("ReadTableInput",
    BigQueryIO.readTableRows().from("dataset.table"));

// process and write files
input.apply("ProcessRows", ParDo.of(new Process())
    .apply("WriteToFile", TextIO.write()
        .to(outputFile)
        .withHeader(HEADER)
        .withSuffix(".csv")
        .withNumShards(numShards));

为了管理文件大小,我们估计了将文件保持在特定大小下所需的分片总数。

有没有办法代替设置分片数量,设置文件大小并让分片是动态的?


共1个答案

匿名用户

从设计上来说,这是不可能的。如果你深入研究Beam的核心,你可以通过编程方式定义一个执行图,然后运行它。这个过程是大规模并行的(ParDo的意思是“并行执行”),在同一个节点上或几个节点/VM上。

这里的分片数只是并行工作以写入文件的“写入器”的数量。然后PCollection将被拆分为所有工作人员写入。

大小是非常可变的(例如消息的大小、文本编码、压缩与否和压缩因子,…),Beam不能依赖它来构建它的图形。