Hi Roc, 这边涉及到 order by 和 limit 一起使用时如何执行的问题。 1. 只对找到 limit n 的数据后,然后进行 order by,并不是对所有的数据; 2. 对所有的数据进行 order by 后,再 limit; 目前看 flink 对 `StreamExecSortLimit` 只保证输出 limit n,但是不保证输出的 limit n 是排序的。 如果业务允许的话,可以在 limit 后面加个 offset,这样可以使用 `emitRecordsWithRowNumber`,保证 limit n 最后是 order by 的。 个人觉得 应该将 `StreamExecSortLimit` 的 `outputRankNumber` 设置为true。 不知道理解的对不对,CC @Jark @ godfrey
Best, Hailong Wang 在 2020-10-22 10:09:09,"Roc Marshal" <flin...@126.com> 写道: >Hi, > > > > >SELECT > >TUMBLE_START(ts, INTERVAL '1' day) as window_start, > >TUMBLE_END(ts, INTERVAL '1' day) as window_end, > >c1, > >sum(c2) as sc2 > >FROM sourcetable > >GROUP BY TUMBLE(ts, INTERVAL '1' day), c1 > >ORDER BY window_start, sc2 desc limit 10 > > >这个sql希望能够以一天为窗口(翻滚)进行计算窗口 >按照c1分组,并对c2列求和(sc2)后对sc2进行窗口内排序。但是结果看起来,结果集中窗口内的数据列sc2并没有有序(降序/或者升序)排列。 >能不能根据我的需求和sql的写法诊断一下问题出在哪里?或者说给一下建议,好让我定位到自己对flinksql使用的误区在哪? > > >谢谢! > > >Best Roc.