可以两种不同方式在Flink中使用Windows
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)
我想知道这两种机制是否可以表达相同的东西,或者两者的主要区别和可能的用例是什么?
两个查询都计算出与常规SQL语义相对应的不同结果。因此,区别不在于Flink,而是SQL标准定义的。
第一个查询
SELECT key, MAX(value)
FROM table
GROUP BY key, TUMBLE(ts, INTERVAL '5' MINUTE)
每key
5分钟存储一次组记录。每5分钟,查询将为每个key
值产生一行,且最大值为value
。对于每个组,将多行汇总为一行。
第二个查询
SELECT key, MAX(value) OVER w
FROM table
WINDOW w AS (PARTITION BY key ORDER BY ts ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
为输入(table
)的每一行产生一行。结果行具有到目前为止所观察到value
的key
值的最大值(行按排序ts
)。请注意,多行不会聚合为单行;每个输入行产生一个输出行。此外,最大聚集的范围可以大于5分钟。实际上,这是key
此示例中的整个分区。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句