窗口分区子句
当指定了窗口分区子句时,它将基于用户提供的表达式拆分函数输入的行。如果没有提供表达式,分区子句可通过使用并行度来提升查询性能。
窗口分区与 GROUP BY 子句相似,区别在于它仅为每个输入行返回一个结果行。如果没有指定窗口分区子句,则会将所有输入行都视为一个分区。
当与分析函数一起使用时,将根据分区计算结果,并在下一个分区开始时重新开始。
语法
{ PARTITION BY expression[,...] | PARTITION BEST | PARTITION NODES }
参数
-
PARTITION BY expression
- 基于此表达式对分区进行排序,其中 expression 可以是列、常数或者针对列构成的任意表达式。对于带有特定分区要求的分析函数,使用
PARTITION BY
。 PARTITION BEST
- 使用并行度来提升多个节点中的多线程查询性能。
OVER(PARTITION BEST)
提供多个节点中的多线程查询最佳性能。以下注意事项适用于使用
PARTITION BEST
:-
对于无分区要求且线程安全的分析函数(如一对多转换),使用
PARTITION BEST
。 -
对于非线程安全的用户定义转换函数 (UDTF),不要使用
PARTITION BEST
。这样做会导致出现错误或不正确的结果。如果 UDTF 非线程安全,使用PARTITION NODES
。
-
PARTITION NODES
- 使用并行度来提升多个节点中的单线程查询性能。
OVER(PARTITION NODES)
提供多个节点中的单线程查询最佳性能。
示例
请参阅窗口分区。