我有一个简单的管道,该管道从Pub Sub主题读取并写入BigQuery。我想在从主题中读取消息并将其写入BQ之间引入5分钟的延迟。
我以为我可以使用触发器来做到这一点,类似于下面的内容,但是消息仍然没有延迟地直接通过。
PCollection windowed_inputEvents = inputEvents.apply( Window.into(FixedWindows.of(Duration.standardMinutes(1))。triggering(AfterProcessingTime.pastFirstElementInPane()。plusDelayOf(Duration.standardMinutes(5)))。withAllowedLateness(Duration.standardMinutes(1))。discardingFiredPanes()) ;
是否可以使用触发器创建这样的延迟?
谢谢
答案 0 :(得分:0)
似乎您正在混淆两件事。在您的示例中,您有一个1分钟的固定窗口,这意味着在该窗口的末尾会发出作为该窗口一部分的所有数据元素。
触发器基本上是附加的杠杆,您可以利用它们在关闭窗口之前发出数据。窗口期关闭后,触发器无法保存数据。例如,如果窗口在12:00到12:01之间,并且第一个元素在12:00到来,则在12:01窗口关闭时,该元素将被发射,直到12:才停止: 05。
要满足您的要求,您可以做几件事:-
withTriggeringFrequency
。更多详情可在这找到 -
https://beam.apache.org/releases/javadoc/2.2.0/org/apache/beam/sdk/io/gcp/bigquery/BigQueryIO.Write.html#withTriggeringFrequency-org.joda.time.Duration-