赞
踩
Hive窗口边界ROWS BETWEEN 和 RANGE BETWEEN使用示例
在Hive中,窗口函数的 ROWS BETWEEN 和 RANGE BETWEEN 用于定义窗口的边界,确定窗口函数操作的行范围或值范围。以下是对这两种窗口边界的具体应用示例:
CREATE TABLE student_scores
(
id INT,
name STRING,
score INT,
group_name STRING
);
INSERT OVERWRITE TABLE student_scores
VALUES (1, 'Jack', 96, 'A组'),
(2, 'John', 90, 'A组'),
(5, 'Lucy', 97, 'A组'),
(4, 'Caocao', 96, 'B组'),
(3, 'Lvbu', 99, 'B组');
SELECT id, name, score, group_name, AVG(score) OVER (PARTITION BY group_name ORDER BY score DESC ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING) AS avg_score FROM student_scores; 执行结果: | id | name | score | group_name | avg_score | |-----|---------|-------|------------|----------| | 5 | Lucy | 97 | A组 | 96.5 | | 1 | Jack | 96 | A组 | 93.0 | | 2 | John | 90 | A组 | 90.0 | | 3 | Lvbu | 99 | B组 | 97.5 | | 4 | Caocao | 96 | B组 | 96.0 |
SELECT id, name, score, group_name, AVG(score) OVER (PARTITION BY group_name ORDER BY score DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS avg_score FROM student_scores; 执行结果: | id | name | score | group_name | avg_score | |-----|---------|-------|------------|----------| | 5 | Lucy | 97 | A组 | 97.0 | | 1 | Jack | 96 | A组 | 96.5 | | 2 | John | 90 | A组 | 94.33333333333333 | | 3 | Lvbu | 99 | B组 | 99.0 | | 4 | Caocao | 96 | B组 | 97.5 |
以下是对这两种窗口边界的详细解释:
<start>
AND <end>
语法以行数为单位指定窗口的范围。<start>
和 <end>
可以是以下类型之一:<n>
PRECEDING :表示当前行之前的n行。<n>
FOLLOWING :表示当前行之后的n行。<start>
AND <end>
语法以值范围为单位指定窗口的范围。<start>
和 <end>
可以是以下类型之一:<value>
PRECEDING :表示当前行值之前的指定值范围。<value>
FOLLOWING :表示当前行值之后的指定值范围。总而言之, ROWS BETWEEN 和 RANGE BETWEEN 提供了不同的窗口边界定义方式, ROWS BETWEEN 基于行数,而 RANGE BETWEEN 基于值范围。根据具体需求和数据分析目的,选择合适的窗口边界定义方式来执行窗口函数操作。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。