如何获取流式事件的移动总和?
How can I get the moving sum of streaming events?
我有一个发出整数事件的源。
对于每个新整数,我想将它与前一小时流式传输的所有整数相加,并将该值发送到下一步。
计算当前事件的整数与前一小时所有事件的整数的总和然后发出的惯用方法是什么?我可以想到两个选项,但觉得我错过了一些东西:
- 使用大小为一小时的滑动window,滑动一毫秒。这将确保总是有一个 window 从最近的事件开始正好倒退一小时。
- 创建我自己的过程函数来跟踪小于或等于一小时的先前整数。使用此状态进行我的计算。
您可以使用 Flink SQL 使用 over window 来做到这一点。像这样:
SELECT
SUM(*) OVER last_hour AS rolling_sum
FROM Events
WINDOW last_hour AS (
ORDER BY eventTime
RANGE BETWEEN INTERVAL '1' HOUR PRECEDING AND CURRENT ROW
)
见OVER Aggregation from the Flink SQL docs for more info. You could also use the Table API, see Over Windows。
我有一个发出整数事件的源。
对于每个新整数,我想将它与前一小时流式传输的所有整数相加,并将该值发送到下一步。
计算当前事件的整数与前一小时所有事件的整数的总和然后发出的惯用方法是什么?我可以想到两个选项,但觉得我错过了一些东西:
- 使用大小为一小时的滑动window,滑动一毫秒。这将确保总是有一个 window 从最近的事件开始正好倒退一小时。
- 创建我自己的过程函数来跟踪小于或等于一小时的先前整数。使用此状态进行我的计算。
您可以使用 Flink SQL 使用 over window 来做到这一点。像这样:
SELECT
SUM(*) OVER last_hour AS rolling_sum
FROM Events
WINDOW last_hour AS (
ORDER BY eventTime
RANGE BETWEEN INTERVAL '1' HOUR PRECEDING AND CURRENT ROW
)
见OVER Aggregation from the Flink SQL docs for more info. You could also use the Table API, see Over Windows。