人们可以用两种不同的方式使用flink中的窗口
SELECT key, MAX(value)
FROM table
GROUP BY key, TUMBLE(ts, INTERVAL '5' MINUTE)
和
SELECT key, MAX(value) OVER w
FROM table
WINDOW w AS (PARTITION BY key ORDER BY ts ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
我想知道这两种机制是否可以表达相同的东西,或者两者的主要区别和可能的用例是什么?
1条答案
按热度按时间ztigrdn81#
两个查询都计算与常规sql的语义相对应的不同结果。所以区别不是特定于flink的,而是由sql标准定义的。
第一个查询
按分组记录
key
还有5分钟的桶。查询每5分钟生成一行key
最大值value
. 对于每个组,多行聚合为一行。第二个查询
为输入的每一行生成一行(
table
). 结果行具有最大value
对于key
到目前为止观察到的值(行按ts
). 注意,多行不是聚合到一行的;每个输入行产生一个输出行。此外,最大聚集范围可以超过5分钟。事实上,这是全部key
本例中的分区。