FLINK DATASTREAM-在窗口上执行SQL查询,请订购



因此,我正在使用Flink DataStream模拟流式任务,并且我想在每个窗口上执行一个SQL查询。

假设这是查询

SELECT name, age, sum(days), avg(salary)
FROM employees
WHERE age > 25
GROUP BY name, age
ORDER BY name, age

我很难将其翻译成翻转。从我的理解来计算平均水平,我需要使用.apply()WindowFunction手动进行操作。但是如何计算总和?也可以在同一窗口函数中手动?
我也想知道是否可以在整个窗口上订购?

下面是我到目前为止我想到的伪代码。任何帮助,将不胜感激!谢谢!

employeesStream
.filter(new FilterFunction() ....)    \ where clause
.keyby(nameIndex, ageIndex)           \ group by??
.timeWindow(Time.seconds(10), Time.seconds(1))
.apply(new WindowFunction() ....)     \ calculate average (and sum?)
// order by??

我检查了表API,但似乎不支持流式传输,例如Orderby。

流中的排序不是微不足道的。您要如何分组永无止境的东西?在您的示例中,您想计算一个平均值或总和,每个窗口只有一个值。您不能排序一个值。

另一种可能性是缓冲所有值,并等待完整性开始分类的指标。得益于活动时间和水印,如果您知道自己已经看到所有值直到一定时间(又称水印(,则可以对流进行分类。

事件时间排序最近引入了,将是Flink 1.4表API的一部分。请参阅此处的示例。

相关内容

  • 没有找到相关文章

最新更新