Apache flink Flink DataStream-在窗口上执行SQL查询,执行orderBy

Apache flink Flink DataStream-在窗口上执行SQL查询,执行orderBy,apache-flink,flink-streaming,Apache Flink,Flink Streaming,因此,我正在使用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手动计算。那我怎么计算总数呢?是否也在同一窗口功

因此,我正在使用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??

我检查了,但流媒体似乎不支持很多操作,例如orderBy。

流媒体中的排序并不简单。你想如何对永无止境的事物进行分类?在您的示例中,您希望计算平均值或总和,即每个窗口只有一个值。不能对一个值进行排序

另一种可能是缓冲所有值并等待完整性指标开始排序。多亏了事件时间和水印,如果您知道在某个时间之前已看到所有值(也称为水印),则可以对流进行排序

最近引入了事件时间排序,它将成为Flink 1.4表API的一部分。有关示例,请参见