Google cloud dataflow TextIO能否写入从窗口maxTimestamp派生的前缀?

Google cloud dataflow TextIO能否写入从窗口maxTimestamp派生的前缀?,google-cloud-dataflow,Google Cloud Dataflow,我正在处理PubSub消息的窗口流,我想将它们归档到GCS。我希望归档文件有一个从窗口时间戳派生的前缀(类似于gs://bucket/messages/2015/01/messages-2015-01-01.json)。这在TextIO.Write中是可能的,还是我需要实现自己的基于文件的链接?TextIO.Write应该可以工作。不需要自定义文件链接 在您的情况下,您希望将PubSub消息写入输出文本文件—不是本地的,而是远程的。您应该能够使用: PCollection.apply.TextI

我正在处理PubSub消息的窗口流,我想将它们归档到GCS。我希望归档文件有一个从窗口时间戳派生的前缀(类似于gs://bucket/messages/2015/01/messages-2015-01-01.json)。这在TextIO.Write中是可能的,还是我需要实现自己的基于文件的链接?

TextIO.Write应该可以工作。不需要自定义文件链接

在您的情况下,您希望将PubSub消息写入输出文本文件—不是本地的,而是远程的。您应该能够使用: PCollection.apply.TextIO.Write().to( 因为您正在处理一个PubSub消息流,所以您的窗口是无限的,并且您的PubSub数据源已经为PCollection中的每个元素提供了一个时间戳

如果希望分配时间戳,则ParDo转换需要使用DoFn,该DoFn使用ProcessContext.outputWithTimestamp()输出元素


总之,您可以在确保PCollection中的元素以时间戳输出后使用TextIO.Write。

您只是在寻找函数还是?似乎这将允许您为输出文件名提供后缀或前缀。

现在,TextIO.Write不支持流模式下的操作–写入GCS iIt’这很棘手,例如,因为你不能同时从多个worker写入一个文件,而且一旦文件关闭,你也不能附加到文件中。我们计划向TextIO添加流式支持


今天,使用BigQuery而不是GCS,您将获得对此的最佳支持–因为我们已经在流式处理期间支持BigQuery写入,您可以根据窗口名称选择写入哪个表,并且BigQuery同时支持来自多个不同工作者的写入。

这可以通过最近添加的窗口写入功能来实现在
TextIO
中。请查看,特别是使用WindowedWrites查看
到(文件名策略)
。这个功能也出现在
AvroIO

中。这似乎并没有回答问题。他已经知道如何向GCS写信。他在询问修改输出文件名的问题。丹,为什么不能用TextIO.write.Bound.withSuffix来完成这项工作?为什么流媒体与此不同?毕竟,流媒体可以被视为一项重复性工作和each job可以在每个job的末尾写入传递给.withSuffix()的字符串是一个编译时常量。此外,TextIO.write当前不能与流式运行程序一起使用。对不起,我的无知。那么在编译时使用后缀hardcover有什么意义?(假设我也可以在编译时不使用suffix将其连接起来?)似乎如果每个窗口都可以有不同的文件名,那么并发作业写入就不会有问题使用
with suffix
命令指定文件的模式。
TextIO
生成许多前缀为-00000-of-00010suffix的文件。因此,您可以使用
with suffix(.json”)
以便所有文件都具有
.json
扩展名。请参阅:或以获取示例。