Streaming 在python数据流DoFn生命周期中,beam setup()刷新需要多长时间?

Streaming 在python数据流DoFn生命周期中,beam setup()刷新需要多长时间?,streaming,google-cloud-dataflow,pipeline,apache-beam,dataflow,Streaming,Google Cloud Dataflow,Pipeline,Apache Beam,Dataflow,我有一个流式管道,需要从BigQuery中查询,作为管道转换的参考。由于BigQuery表仅在两周内更改,因此我将查询缓存放在setup()中,而不是start\u bundle()中。通过观察日志,我看到start_bundle()将刷新其在DoFn生命周期中的值(大约50-100个元素),但setup()将永远不会刷新。有没有办法解决这个问题?虽然您没有提供代码,但我会根据您的解释回答您的问题 首先关于,每个bundle都会调用此函数,由DataFlow根据执行期间收集的度量来决定这些bun

我有一个流式管道,需要从BigQuery中查询,作为管道转换的参考。由于BigQuery表仅在两周内更改,因此我将查询缓存放在setup()中,而不是start\u bundle()中。通过观察日志,我看到start_bundle()将刷新其在DoFn生命周期中的值(大约50-100个元素),但setup()将永远不会刷新。有没有办法解决这个问题?

虽然您没有提供代码,但我会根据您的解释回答您的问题

首先关于,每个bundle都会调用此函数,由DataFlow根据执行期间收集的度量来决定这些bundle的大小

第二个,每个工人调用一次。仅当工作进程重新启动时,才会再次调用它。此外,作为比较,每个元素调用一次

因为您每周需要刷新查询两次,所以它是使用的最佳选择。当您有一个随时变化的查找表时,可以使用这种方法。因此,您需要更新查找结果。但是,您可以使用流模式,而不是在批处理模式下使用单个查询。它允许您基于GlobalWindow更新查找结果(在您的情况下是查询结果)。之后,有了这方面的输入,您可以在您的主流PCollection中使用它


注意:我必须指出,作为一种限制,输入不能正确处理大量数据(许多GB或Tb)。此外,它的信息量很大。

上述答案很好。作为替代方案,您可以调用
start\u bundle()
中的方法返回结果的缓存版本,只要该结果足够新鲜,否则会从BQ中进行完整读取。参见,例如