开窗函数概述

开窗函数每次对一个行集中的多个行(记录)进行运算。 与聚合函数不同,开窗函数要求对行集中的行进行序列化(使这些行具有特定的顺序)。 开窗函数可能要依赖于顺序来确定结果。

只能对已序列化的集使用开窗函数。 序列化行集的最简单方法是使用 serialize 运算符。 此运算符以任意方式“冻结”行的顺序。 如果已序列化的行的顺序在语义上很重要,请使用 sort 运算符来强制实施某个特定顺序。

与序列化进程所关联的成本并非微不足道。 例如,在许多情形下,它可能会阻止查询并行。 因此,在不必要的情况下,请不要应用序列化。 如有必要,请重新安排查询,以针对尽可能小的行集执行序列化。

已序列化的行集

可通过以下方法之一序列化任意行集(如表,或表格运算符的输出):

  1. 通过对行集排序。 有关发出已排序行集的运算符的列表,请参阅下文。
  2. 通过使用 serialize 运算符

只要输入已经序列化,许多表格运算符就会序列化输出,即使运算符本身并不确保对结果进行序列化也是如此。 例如,对于 extend 运算符project 运算符where 运算符,这一属性有保证。

发出已通过排序完成了序列化的行集的运算符

保留已序列化行集属性的运算符