前言
使用Starrocks引擎中的窗口函数 row_number() over( )对10亿的数据集进行去重操作,BE内存溢出问题频发(忘记当时指定的BE内存上限是多少了.....),此时才意识到,开窗操作,如果使用 不当,反而更容易引发性能问题。 下文是对Hive中的窗口函数底层源码进行初步学习,若有问题,请指正~
一、窗口函数的执行步骤
(1)将数据分割成多个分区;
(2)在各个分区上调用窗口函数;
由于窗口函数的返回结果不是一个聚合值,而是另一张表的格式(table-in, table-out),因此Hive社区引入分区表函数 Partitioned Table Function(PTF)。
简略的代码流转图:
hive会把QueryBlock,翻译成执行操作数OperatorTree,其中每个operator都会有三个重