开发者社区> 问答> 正文

如何实现event triggered window?

Hi friends,

Flink 自带的window 有tumlbing sliding 和 session 但是似乎没有event triggerred。

比如说 想知道过去1小时event A trigger的次数,

如果使用tumbling window和1h window |1h | 1h | t=0 在t=1.5h时刻,读取数据,是t=1h 时刻过去一小时的数据,而不是实时的。

使用sliding window 的话需要define非常小的slide,而且依旧可能有延迟。

如果想知道实时的数据,需要基于event来更新state,如何实现event triggered window?*来自志愿者整理的flink邮件归档

展开
收起
moonlightdisco 2021-12-07 16:37:22 703 0
1 条回答
写回答
取消 提交回答
  • Hi 如果是需要 event triggered 的累計統計更新的話,可以考慮使用 SQL over aggregation [1]。例如文件中提供的如下範例,計算當前 row 往前一小時內的加總結果。

    SELECT order_id, order_time, amount, SUM(amount) OVER ( PARTITION BY product ORDER BY order_time RANGE BETWEEN INTERVAL '1' HOUR PRECEDING AND CURRENT ROW ) AS one_hour_prod_amount_sumFROM Orders

    但是這種作法只能根據收到的事件來觸發,無法根據處理時間。換句話說,如果 t=X 沒有數據進來的話,就不會有 t=(X-1) ~ X 的累計統計輸出。 考慮更複雜的情況需要結合事件和處理時間來觸發的話,需要透過 Process Function API 或者用 DataStream API 自定義 Trigger 的方式實現。

    [1] https://nightlies.apache.org/flink/flink-docs-master/docs/dev/table/sql/queries/over-agg/*来自志愿者整理的flink邮件归档

    2021-12-07 17:19:27
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载