Google cloud dataflow 即使给定的窗口为空,如何为每个窗口发出摘要数据?

Google cloud dataflow 即使给定的窗口为空,如何为每个窗口发出摘要数据?,google-cloud-dataflow,Google Cloud Dataflow,对于我的应用程序来说,始终发出“windowfinished”消息非常重要,即使窗口是空的。我不知道怎么做。我最初的想法是为处理过的每条记录输出一个int,然后使用Sum.integersglobal,然后根据它发出一条记录,给每个窗口一个单例,然后我可以简单地在每个窗口发出一条摘要记录,如果窗口为空,则为0。当然,这是失败的,您必须使用而不使用默认值,如果窗口为空,它将不会发出任何信息。云数据流是围绕处理可能非常稀疏的数据的概念构建的。根据设计,它不会召唤数据来填补这些稀疏的空白,因为在许多情

对于我的应用程序来说,始终发出“windowfinished”消息非常重要,即使窗口是空的。我不知道怎么做。我最初的想法是为处理过的每条记录输出一个int,然后使用
Sum.integersglobal
,然后根据它发出一条记录,给每个窗口一个单例,然后我可以简单地在每个窗口发出一条摘要记录,如果窗口为空,则为0。当然,这是失败的,您必须使用
而不使用默认值,如果窗口为空,它将不会发出任何信息。

云数据流是围绕处理可能非常稀疏的数据的概念构建的。根据设计,它不会召唤数据来填补这些稀疏的空白,因为在许多情况下,这将是成本高昂的。对于像您这样的非稀疏性很实用的用例(为单个全局键创建非稀疏结果),解决方法是使用包含空值的heartbeat
PCollection
连接主
PCollection
。因此,对于
Sum.integersglobal
的示例,您将
plant
您的主
PCollection
,其中的次
PCollection
每个窗口正好包含一个零值。这假设您正在使用可枚举类型的窗口(例如,
FixedWindows
SlidingWindows
会话
根据定义是不可枚举的)

目前,实现这一点的唯一方法是编写一个数据生成器程序,将必要的零流注入Pub/Sub,并带有适合您将要使用的窗口类型的时间戳。如果您写入与主输入相同的发布/子主题,您甚至不需要在代码中添加
Flatten
。缺点是,您必须在某个地方将其作为单独的作业运行


将来(一旦我们的自定义源API可用),我们应该能够提供一个
PSource
,它接受一个可枚举的
WindowFn
加上一个默认值,并生成一个适当的无边界
PCollection

我觉得心跳是必要的,但我希望不是。谢谢你的回答。