You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user-zh@flink.apache.org by me <me...@lishiyu.cn> on 2021/03/13 13:37:30 UTC

flink sql滑动窗口TOPN,输出结果有问题

Flink版本flink1.11
从第二个窗口后的结果就出现了,更新数据和废弃数据的,现在的输出是table转datastream然后filter为true的结果,
但是我想实现的TOP2 每个窗口只输出俩条数据,现在filter为true的结果是>2条的,求问怎么才能正常输出我想要的TOP2的数据?


执行SQL:select * from (
select *,ROW_NUMBER() OVER (PARTITION BY window_end ORDER BY counter DESC) as row_num
 from (
 select world,count(world) as counter,HOP_END(test.process_time,INTERVAL '1' MINUTE(1),INTERVAL '24' HOUR(2)) as window_end from test group by world,HOP(test.process_time,INTERVAL '1' MINUTE(1),INTERVAL '24' HOUR(2))
 )) where row_num <= 2
输入数据:
{"world":"bbb"} {"world":"bbb"} {"world":"bbb"} {"world":"aaa"} {"world":"aaa"} {"world":"aaa"} {"world":"aaa"} {"world":"ccc"} {"world":"ccc"} {"world":"ccc"} {"world":"ccc"} {"world":"ccc"} {"world":"ccc”}


输出结果:
===>:7> (true,aaa,4,2021-03-13T13:00,1) ===>:7> (true,bbb,3,2021-03-13T13:00,2)
===>:4> (true,ccc,6,2021-03-13T13:01,1) ===>:4> (true,aaa,4,2021-03-13T13:01,2)
从第二个窗口后的结果就出现了,更新数据和废弃数据的,现在的输出是table转datastream然后filter为true的结果,
但是我想实现的TOP2 每个窗口只输出俩条数据,现在filter为true的结果是>2条的,求问怎么才能正常输出我想要的TOP2的数据? ===>:3> (true,aaa,4,2021-03-13T13:02,1) ===>:3> (false,aaa,4,2021-03-13T13:02,1) ===>:3> (true,ccc,6,2021-03-13T13:02,1) ===>:3> (true,aaa,4,2021-03-13T13:02,2)
===>:7> (true,aaa,4,2021-03-13T13:03,1) ===>:7> (true,bbb,3,2021-03-13T13:03,2) ===>:7> (false,aaa,4,2021-03-13T13:03,1) ===>:7> (true,ccc,6,2021-03-13T13:03,1) ===>:7> (false,bbb,3,2021-03-13T13:03,2) ===>:7> (true,aaa,4,2021-03-13T13:03,2)
===>:1> (true,bbb,3,2021-03-13T13:04,1) ===>:1> (false,bbb,3,2021-03-13T13:04,1) ===>:1> (true,aaa,4,2021-03-13T13:04,1) ===>:1> (true,bbb,3,2021-03-13T13:04,2) ===>:1> (false,aaa,4,2021-03-13T13:04,1) ===>:1> (true,ccc,6,2021-03-13T13:04,1) ===>:1> (false,bbb,3,2021-03-13T13:04,2)