文章目录

  • 1.窗口函数介绍
  • 2. 聚合函数(SUM等)+Over 的使用——累计求和
    • 2.1 使用案例
    • 2.2 使用场景
  • 3. NTILE+OVER 的使用
    • 3.1 使用案例
    • 3.2 使用场景
  • 4. ROW_NUMBER的使用 ——分组topN
    • 4.1 使用案例
    • 4.2 使用场景
  • 5.CUME_DIST 与 PERCENT_RANK的使用
    • 5.1 CUME_DIST : 小于等于当前行值的行数 / 分组内的总行数
    • 5.2 PERCENT_RANK : 分组内当前行的rank-1/分组内总行数-1
  • 6. lag与lead的使用
    • 6.1 lead(往下)
    • 6.2 lag(往上)
  • 7 FIRST_VALUE与LAST_VALUE
    • 7.1 LAST_VALUE 取分组内排序后,截止到当前行,最后一个值
    • 7.2 FIRST_VALUE 取分组内排序后,截止到当前行,第一个值
    • 7.3 应用场景

1.窗口函数介绍

窗口 :函数运行/计算时 所对应的数据集范围
函数 :执行的函数

(1)官方参考文档

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+WindowingAndAnalytics

(2)Over与聚合函数结合使用官方介绍

The OVER clause
OVER with standard aggregates:COUNT
SUM
MIN
MAX
AVG
OVER with a PARTITION BY statement with one or more partitioning columns of any primitive datatype.
OVER with PARTITION BY and ORDER BY with one or more partitioning and/or ordering columns of any datatype.
OVER with a window specification. Windows can be defined separately in a WINDOW clause. Window specifications support the following formats:
(ROWS | RANGE) BETWEEN (UNBOUNDED | [num]) PRECEDING AND ([num] PRECEDING | CURRENT ROW | (UNBOUNDED | [num]) FOLLOWING)
(ROWS | RANGE) BETWEEN CURRENT ROW AND (CURRENT ROW | (UNBOUNDED | [num]) FOLLOWING)
(ROWS | RANGE) BETWEEN [num] FOLLOWING AND (UNBOUNDED | [num]) FOLLOWINGWhen ORDER BY is specified with missing WINDOW clause, the WINDOW specification defaults to RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW.When both ORDER BY and WINDOW clauses are missing, the WINDOW specification defaults to ROW BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING.从上面可以总结一个公式select 聚合函数 over (partition by ... order by ... ) ROWS ......具体使用看下面的案例

(3)Over与分析函数结合使用官方介绍

Analytics functions
RANK
ROW_NUMBER
DENSE_RANK
CUME_DIST
PERCENT_RANK
NTILE

(4)Windowing functions

LEAD
The number of rows to lead can optionally be specified. If the number of rows to lead is not specified, the lead is one row.
Returns null when the lead for the current row extends beyond the end of the window.
LAG
The number of rows to lag can optionally be specified. If the number of rows to lag is not specified, the lag is one row.
Returns null when the lag for the current row extends before the beginning of the window.
FIRST_VALUE
This takes at most two parameters. The first parameter is the column for which you want the first value, the second (optional) parameter must be a boolean which is false by default. If set to true it skips null values.
LAST_VALUE
This takes at most two parameters. The first parameter is the column for which you want the last value, the second (optional) parameter must be a boolean which is false by default. If set to true it skips null values.

2. 聚合函数(SUM等)+Over 的使用——累计求和

WINDOW子句

PRECEDING:往前
FOLLOWING:往后
CURRENT ROW:当前行
UNBOUNDED:起点,
UNBOUNDED PRECEDING 表示从前面的起点,
UNBOUNDED FOLLOWING:表示到后面的终点

2.1 使用案例

--数据
pentaKilldata,2019-04-10,1
pentaKilldata,2019-04-11,5
pentaKilldata,2019-04-12,7
pentaKilldata,2019-04-13,3
pentaKilldata,2019-04-14,2
pentaKilldata,2019-04-15,4
pentaKilldata,2019-04-16,4
--导入数据
drop table if exists pentaKilldata_window;create table pentaKilldata_window(domain string,time string,traffic int) row format delimited fields terminated by ',';load data local inpath '/opt/data/window.txt' overwrite into table pentaKilldata_window;--查询
select
domain, time, traffic,
sum(traffic) OVER (partition by domain order by time) pv1,
sum(traffic) OVER (partition by domain order by time ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) pv2,
sum(traffic) OVER (partition by domain)  pv3,
sum(traffic) OVER (partition by domain order by time  ROWS BETWEEN 3 PRECEDING AND CURRENT ROW)  pv4,
sum(traffic) OVER (partition by domain order by time  ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING)  pv5,
sum(traffic) OVER (partition by domain order by time  ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)  pv6
from pentaKilldata_window
order by time;--输出结果
domain              time        traffic     pv1     pv2     pv3     pv4     pv5     pv6
pentaKilldata       2019-04-10      1       1       1       26      1       6       26
pentaKilldata       2019-04-11      5       6       6       26      6       13      25
pentaKilldata       2019-04-12      7       13      13      26      13      16      20
pentaKilldata       2019-04-13      3       16      16      26      16      18      13
pentaKilldata       2019-04-14      2       18      18      26      17      21      10
pentaKilldata       2019-04-15      4       22      22      26      16      20      8
pentaKilldata       2019-04-16      4       26      26      26      13      13      4

(1)pv1解释

sum(traffic) OVER (partition by domain order by time) pv1
按照domain分区,并按照time升序排序, 进行sum累计求和traffic  pv1   计算过程1       1     15       6     1+57       13    1+5+73       16    1+5+7+32       18    1+5+7+3+24       22    ...4       26    ...值得一提的是,此种方式可以写自连接实现与窗口函数相同累加效果,具体实现如下:with t as(select domain, date_format(day, 'yyyy-MM') as month, sum(pv) pv from access group by domain, date_format(day, 'yyyy-MM'))
select
b.domain, b.month, b.pv,
max(a.pv) max_pv,
sum(a.pv) sum_pv
from t a join t b
on a.domain=b.domain
where a.month <= b.month
group by b.domain, b.month, b.pv;

(2)pv2解释

sum(traffic) OVER (partition by domain order by time ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) pv2,ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW的意识是最前面到当前行,其实是和pv1是一样的意思。
traffic   pv2  1     1   5     6   7     13  3     16  2     18  4     22  4     26

(3)pv3解释 -> 这种方式可以求占比

sum(traffic) OVER (partition by domain)  pv3
只按照domain进行分区求和,相同domain的数据会发送到一个分区进行求和,最后的结果均为1+5+7+3+2+4+4=26.traffic  pv31    26 5    26 7    26 3    26 2    26 4    26 4    26 # 具体可参考
业务分析:hive下的分组求占比情况
https://blog.csdn.net/oyy_90/article/details/89843016

(4)pv4解释

sum(traffic) OVER (partition by domain order by time  ROWS BETWEEN 3 PRECEDING AND CURRENT ROW)  pv4,ROWS BETWEEN 3 PRECEDING AND CURRENT ROW的意思是 向前3行到当前行traffic   pv4 计算过程1     1   15     6   5+17     13  1+5+73     16  1+5+7+32     17  5+7+3+2   traffic为2是当前行,向前3行就是traffic为5,7,3的三行数据4     16  7+3+2+44     13  3+2+4+4

(5)pv5解释

sum(traffic) OVER (partition by domain order by time  ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING)  pv5,ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING 的意思是 向前3行 向下一行
还记得前面说的窗口含义就是数据集的范围,简单来说就是框数据。traffic  pv5 计算过程1    6  5    13 7    16 3    18 2    21  5+7+3 +2 +4 -》 traffic的2是当前行,前3行是traffic为5,7,3,后1行是traffic为4.4    20 4    13

(6)pv6解释

sum(traffic) OVER (partition by domain order by time  ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)  pv6ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING 的意思是 当前行到下面所有数据traffic   pv6 计算过程1     26  1+5+7+3+2+4+45     25  5+7+3+2+4+47     20  7+3+2+4+43     13  3+2+4+42     10  2+4+44     8   4+44     4   4

2.2 使用场景

累计求和中使用的多

3. NTILE+OVER 的使用

3.1 使用案例

NTILE(n) 用于将分组数据按照顺序切分成n片,返回当前切片值,如果切片不均匀,默认增加第一个切片的分布。NTILE不支持ROWS BETWEEN

-- 数据源
pentaKilldata,2019-04-10,1
pentaKilldata,2019-04-11,5
pentaKilldata,2019-04-12,7
pentaKilldata,2019-04-13,3
pentaKilldata,2019-04-14,2
pentaKilldata,2019-04-15,4
pentaKilldata,2019-04-16,4

(1)使用测试1

-- 查询语句1
select
domain, time, traffic,
NTILE(2) OVER (partition by domain order by time) rn1,
NTILE(3) OVER (partition by domain order by time) rn2,
NTILE(4) OVER (order by time) rn3
from pentaKilldata_window
order by domain,time;
-- 结果1解释
domain          time    traffic rn1 rn2 rn3
pentaKill   2019-04-10  1       1   1   1
pentaKill   2019-04-11  5       1   1   2
pentaKill   2019-04-12  7       1   1   2
pentaKill   2019-04-13  3       1   2   3
pentaKill   2019-04-14  2       2   2   3
pentaKill   2019-04-15  4       2   3   4
pentaKill   2019-04-16  4       2   3   4NTILE(2) :将数据切成两片NTILE(3) : 将数据切成3片,多的分到其他切片NTILE(4) : 将数据切成4片,不够的某个切片会少

(2)使用测试2

 -- 在原有表中增加数据
yy.com,2019-04-10,2
yy.com,2019-04-11,3
yy.com,2019-04-12,5
yy.com,2019-04-13,6
yy.com,2019-04-14,3
yy.com,2019-04-15,9
yy.com,2019-04-16,7-- 查询语句2
select
domain, time, traffic,
NTILE(4) OVER (order by time) rn3
from pentaKilldata_window
order by domain,time;domain     time      traffic   rn3
pentaKill   2019-04-10  1       1
pentaKill   2019-04-11  5       1
pentaKill   2019-04-12  7       2
pentaKill   2019-04-13  3       2
pentaKill   2019-04-14  2       3
pentaKill   2019-04-15  4       4
pentaKill   2019-04-16  4       4
yy.com      2019-04-10  2       1
yy.com      2019-04-11  3       1
yy.com      2019-04-12  5       2
yy.com      2019-04-13  6       2
yy.com      2019-04-14  3       3
yy.com      2019-04-15  9       3
yy.com      2019-04-16  7       4NTILE(4) : 将数据切成4片,不够的某个切片会少,进行hash随机到分区

3.2 使用场景

一个表中字段不多,但是行数很多的情况下,可以使用此函数。 其实,实际生产中使用的不多。

4. ROW_NUMBER的使用 ——分组topN

窗口函数 若排序值相同
ROW_NUMBER 排序按自然升序
RANK 排序总数不变
DENSE_RANK 排序总数变少

窗口函数还可以完成group by 去重中 获取分组之外字段的场景。

但是有些情况下使用ROW_NUMBER会非常耗时,使用group by的方式去重也可以获取分组之外的字段

SELECT
url ,
max_token[2] as post_data,
max_token[3] as res_raw_data,
max_token[4] AS req_raw_data
'' AS d,
max_token[5] as request_datetime,
'' AS f
FROM
(--相同url情况下,将其他5个字段放入array,然后使用max取出其中最大的arraySELECT  max(ARRAY(cast(content_length AS BIGINT) + 1000000    -- 0,content_length    -- 1            ,post_data,res_raw_data,req_raw_data,request_datetime)) AS max_token,urlFROM    XXXXWHERE   ds = '20210101' group by url
)  tmp

row_number():从1开始,按照顺序,生成分组内记录的序列,row_number()的值不会存在重复,当排序的值相同时,按照表中记录的顺序进行排列;通常用于获取分组内排序第一的记录;获取一个session中的第一条refer等。

rank():生成数据项在分组中的排名,排名相等会在名次中留下空位。

dense_rank():生成数据项在分组中的排名,排名相等会在名次中不会留下空位。

4.1 使用案例

select
domain, time, traffic,
ROW_NUMBER() OVER (partition by domain order by traffic desc) rn1,
RANK() OVER (partition by domain order by traffic desc) rn2,
DENSE_RANK() OVER (partition by domain order by traffic desc) rn3
from pentaKilldata_window;domain  time      traffic   rn1     rn2     rn3
yy.com  2019-04-15      9       1       1       1
yy.com  2019-04-16      7       2       2       2
yy.com  2019-04-13      6       3       3       3
yy.com  2019-04-12      5       4       4       4
yy.com  2019-04-14      3       5       5       5
yy.com  2019-04-11      3       6       5       5
yy.com  2019-04-10      2       7       7       6

(1) ROW_NUMBER

ROW_NUMBER() OVER (partition by domain order by traffic desc) rn1,
这种方式在分组TopN中使用的最多,也用的较为频繁traffic   rn1  9       1  7       2  6       3  5       4  3       5  3       6  2       7  比如:查询按照domain分组的traffic使用top3select domain,time,traffic from (select domain, time, traffic,ROW_NUMBER() OVER (partition by domain order by traffic desc) as rankfrom pentaKilldata_window) c where rank<=3;domain  time      traffic
yy.com  2019-04-15      9
yy.com  2019-04-16      7
yy.com  2019-04-13      6

(2) RANK

RANK() OVER (partition by domain order by traffic desc) rn2,
traffic为3的排名相同,ran2值相同。但是ran2值的总数7不变。 这种场景目前碰到少traffic    rn2   9        1   7        2   6        3   5        4   3        5   3        5   2        7

(3)DENSE_RANK

DENSE_RANK() OVER (partition by domain order by traffic desc) rn3
traffic为3的排名相同,ran2值相同。但是rank2的值的总数变为6,总数变少traffic   rn39       17       26       35       43       53       52       6

4.2 使用场景

求分组topN的时候使用

5.CUME_DIST 与 PERCENT_RANK的使用

dept01,pentakill,10000
dept01,doubleKill,20000
dept01,firstblood,30000
dept02,zhangsan,40000
dept02,lisi,50000      create table ruozedata_window02(dept  string,user string,sal int)
row format  delimited fields  terminated by ',';load data local inpath '/opt/data/window02.txt' overwrite into table ruozedata_window02;

5.1 CUME_DIST : 小于等于当前行值的行数 / 分组内的总行数

select
dept,user,sal,
round(CUME_DIST () over(order by sal),2) rn1,
round(CUME_DIST () over(partition by dept order by sal),2) rn2
from ruozedata_window02;小于等于当前行值的行数 /  分组内的总行数
dept    user            sal     rn1     rn1计算过程         rn2        rn2计算过程
dept01  pentakill       10000   0.2     1/5                 0.33        1/3
dept01  doubleKill      20000   0.4     2/5                 0.67        2/3
dept01  firstblood      30000   0.6     3/5                 1.0         3/3
dept02  zhangsan        40000   0.8     4/5                 0.5         1/2
dept02  lisi            50000   1.0     5                   1.0         2/2备注: CUME_DIST () over(order by sal),2)  其中的2是返回值的小数点partition by dept 相当于对dept分组

5.2 PERCENT_RANK : 分组内当前行的rank-1/分组内总行数-1

select
dept,user,sal,
round(PERCENT_RANK() over(order by sal),2) rn1,
round(PERCENT_RANK() over(partition by dept order by sal),2) rn2
from ruozedata_window02;分组内当前行的rank-1/分组内总行数-1
dept    user            sal     rn1     rn1计算过程         rn2   rn2计算过程
dept01  pentakill       10000   0.0     1-1/5-1             0.0   1-1/3-1
dept01  doubleKill      20000   0.25    2-1/5-1             0.5   2-1/3-1
dept01  firstblood      30000   0.5     3-1/5-1             1.0   3-1/3-1
dept02  zhangsan        40000   0.75    4-1/5-1             0.0   1-1/2-1
dept02  lisi            50000   1.0     5-1/5-1             1.0   2-1/2-1

6. lag与lead的使用

cookie1,2015-04-10 10:00:02,url2
cookie1,2015-04-10 10:00:00,url1
cookie1,2015-04-10 10:03:04,1url3
cookie1,2015-04-10 10:50:05,url6
cookie1,2015-04-10 11:00:00,url7
cookie1,2015-04-10 10:10:00,url4
cookie1,2015-04-10 10:50:01,url5
cookie2,2015-04-10 10:00:02,url22
cookie2,2015-04-10 10:00:00,url11
cookie2,2015-04-10 10:03:04,1url33
cookie2,2015-04-10 10:50:05,url66
cookie2,2015-04-10 11:00:00,url77
cookie2,2015-04-10 10:10:00,url44
cookie2,2015-04-10 10:50:01,url55drop table if exists  ruozedata_window03;
create table ruozedata_window03(cookieid string,time string,url string)
row format delimited  fields terminated by ',';load data local inpath '/opt/data/window03.txt' overwrite into table ruozedata_window03;

6.1 lead(往下)

LEAD(col,n,DEFAULT) 用于统计窗口内往下第n行值
第一个参数为列名,第二个参数为往下第n行(可选,默认为1),第三个参数为默认值(当往下第n行为NULL时候,取默认值,如不指定,则为NULL)select cookieid,time,url,
lead(time, 1, '1970-01-01 00:00:00') over(partition by cookieid order by time) pre1,
lead(time, 2) over(partition by cookieid order by time) pre2
from ruozedata_window03;cookieid    time            url     pre1                pre2
cookie1 2015-04-10 10:00:00 url1    2015-04-10 10:00:02 2015-04-10 10:03:04
cookie1 2015-04-10 10:00:02 url2    2015-04-10 10:03:04 2015-04-10 10:10:00
cookie1 2015-04-10 10:03:04 1url3   2015-04-10 10:10:00 2015-04-10 10:50:01
cookie1 2015-04-10 10:10:00 url4    2015-04-10 10:50:01 2015-04-10 10:50:05
cookie1 2015-04-10 10:50:01 url5    2015-04-10 10:50:05 2015-04-10 11:00:00
cookie1 2015-04-10 10:50:05 url6    2015-04-10 11:00:00 NULL
cookie1 2015-04-10 11:00:00 url7    1970-01-01 00:00:00 NULL
cookie2 2015-04-10 10:00:00 url11   2015-04-10 10:00:02 2015-04-10 10:03:04
cookie2 2015-04-10 10:00:02 url22   2015-04-10 10:03:04 2015-04-10 10:10:00
cookie2 2015-04-10 10:03:04 1url33  2015-04-10 10:10:00 2015-04-10 10:50:01
cookie2 2015-04-10 10:10:00 url44   2015-04-10 10:50:01 2015-04-10 10:50:05
cookie2 2015-04-10 10:50:01 url55   2015-04-10 10:50:05 2015-04-10 11:00:00
cookie2 2015-04-10 10:50:05 url66   2015-04-10 11:00:00 NULL
cookie2 2015-04-10 11:00:00 url77   1970-01-01 00:00:00 NULL

6.2 lag(往上)

LAG(col,n,DEFAULT) 用于统计窗口内往上第n行值
第一个参数为列名,第二个参数为往上第n行(可选,默认为1),第三个参数为默认值(当往上第n行为NULL时候,取默认值,如不指定,则为NULL)select cookieid,time,url,
lag(time, 1, '1970-01-01 00:00:00') over(partition by cookieid order by time) pre1,
lag(time, 2) over(partition by cookieid order by time) pre2
from ruozedata_window03cookieid time    url pre1    pre2
cookie1 2015-04-10 10:00:00 url1    1970-01-01 00:00:00 NULL
cookie1 2015-04-10 10:00:02 url2    2015-04-10 10:00:00 NULL
cookie1 2015-04-10 10:03:04 1url3   2015-04-10 10:00:02 2015-04-10 10:00:00
cookie1 2015-04-10 10:10:00 url4    2015-04-10 10:03:04 2015-04-10 10:00:02
cookie1 2015-04-10 10:50:01 url5    2015-04-10 10:10:00 2015-04-10 10:03:04
cookie1 2015-04-10 10:50:05 url6    2015-04-10 10:50:01 2015-04-10 10:10:00
cookie1 2015-04-10 11:00:00 url7    2015-04-10 10:50:05 2015-04-10 10:50:01
cookie2 2015-04-10 10:00:00 url11   1970-01-01 00:00:00 NULL
cookie2 2015-04-10 10:00:02 url22   2015-04-10 10:00:00 NULL
cookie2 2015-04-10 10:03:04 1url33  2015-04-10 10:00:02 2015-04-10 10:00:00
cookie2 2015-04-10 10:10:00 url44   2015-04-10 10:03:04 2015-04-10 10:00:02
cookie2 2015-04-10 10:50:01 url55   2015-04-10 10:10:00 2015-04-10 10:03:04
cookie2 2015-04-10 10:50:05 url66   2015-04-10 10:50:01 2015-04-10 10:10:00
cookie2 2015-04-10 11:00:00 url77   2015-04-10 10:50:05 2015-04-10 10:50:01

7 FIRST_VALUE与LAST_VALUE

7.1 LAST_VALUE 取分组内排序后,截止到当前行,最后一个值

select cookieid,time,url,
LAST_VALUE(url) over(partition by cookieid order by time) rn
from ruozedata_window03;cookieid    time            url     rn
cookie1 2015-04-10 10:00:00 url1    url1
cookie1 2015-04-10 10:00:02 url2    url2
cookie1 2015-04-10 10:03:04 1url3   1url3
cookie1 2015-04-10 10:10:00 url4    url4
cookie1 2015-04-10 10:50:01 url5    url5
cookie1 2015-04-10 10:50:05 url6    url6
cookie1 2015-04-10 11:00:00 url7    url7
cookie2 2015-04-10 10:00:00 url11   url11
cookie2 2015-04-10 10:00:02 url22   url22
cookie2 2015-04-10 10:03:04 1url33  1url33
cookie2 2015-04-10 10:10:00 url44   url44
cookie2 2015-04-10 10:50:01 url55   url55
cookie2 2015-04-10 10:50:05 url66   url66
cookie2 2015-04-10 11:00:00 url77   url77

7.2 FIRST_VALUE 取分组内排序后,截止到当前行,第一个值

select cookieid,time,url,
FIRST_VALUE(url) over(partition by cookieid order by time) rn
from ruozedata_window03;cookieid    time    url rn
cookie1 2015-04-10 10:00:00 url1    url1   //根据cookie1分组,time升序排序后的第一个值是rul1
cookie1 2015-04-10 10:00:02 url2    url1
cookie1 2015-04-10 10:03:04 1url3   url1
cookie1 2015-04-10 10:10:00 url4    url1
cookie1 2015-04-10 10:50:01 url5    url1
cookie1 2015-04-10 10:50:05 url6    url1
cookie1 2015-04-10 11:00:00 url7    url1
cookie2 2015-04-10 10:00:00 url11   url11   //根据cookie2分组,time升序排序后的第一个值是rul11
cookie2 2015-04-10 10:00:02 url22   url11
cookie2 2015-04-10 10:03:04 1url33  url11
cookie2 2015-04-10 10:10:00 url44   url11
cookie2 2015-04-10 10:50:01 url55   url11
cookie2 2015-04-10 10:50:05 url66   url11
cookie2 2015-04-10 11:00:00 url77   url11

7.3 应用场景

比如给一批订单数据,求
求这个月你下的第一单 时间?
求这个月你下的最后一单  时间?以上可以用到FIRST_VALUE与LAST_VALUE的值

参考文档

    # 参考文档1https://blog.csdn.net/dingchangxiu11/article/details/83145151# 参考文档2https://blog.csdn.net/weixin_38750084/article/details/82779910

Hive窗口函数的使用相关推荐

  1. 大数据技术-hive窗口函数详解

    有不少同学一听这个标题,hive窗口函数是什么鬼?没听说过还有窗口函数这个东西啊,其实它的用处可大了,下面听小千慢慢道来. hive窗口函数 窗口函数指定了函数工作的数据窗口大小(当前行的上下多少行) ...

  2. HiveQL学习笔记(四):Hive窗口函数

    本系列是本人对Hive的学习进行一个整理,主要包括以下内容: 1.HiveQL学习笔记(一):Hive安装及Hadoop,Hive原理简介 2.HiveQL学习笔记(二):Hive基础语法与常用函数 ...

  3. hive窗口函数使用

    hive窗口函数的使用 前言 一.hive窗口函数语法 1.over()窗口函数的语法结构 1.1.over()函数中的三个函数讲解 2.常与over()一起使用的分析函数 2.1.聚合类 2.2.排 ...

  4. Hive 窗口函数 实现原理

    Hive 窗口函数 实现原理 hive中窗口函数的实现,主要是借助于一个叫做 Windowing Table Function 的Partitioned Table Function Partitio ...

  5. hive 窗口函数(持续更新)

    hive窗口函数语法 avg().sum().max().min()等是分析函数,而over()才是窗口函数,下面我们来看看over()窗口函数的语法结构.及常与over()一起使用的分析函数: 1. ...

  6. HIVE 窗口函数和分析函数

    **HIVE 窗口函数和分析函数** 第一篇,试试水: 一.介绍 分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是:对于每个组返回多行,而聚合函数对于每个组只返回一行. 开窗函数指定了分析 ...

  7. Hive窗口函数之累积值、平均值、首尾值的计算学习

    Hive窗口函数可以计算一定范围内.一定值域内.或者一段时间内的累积和以及移动平均值等:可以结合聚集函数SUM() .AVG()等使用:可以结合FIRST_VALUE() 和LAST_VALUE(), ...

  8. hive 窗口函数_Datatist科技专栏 | Hive排序窗口函数速学教程!

    作者:原上野 设计:Cindy 编辑:AI君 在开发过程中经常会遇见排序的场景,比如取top N的问题,这时候row_number(),rank,dense_ran()这三个函数就派上用场了,其中,r ...

  9. hive窗口函数_Hive sql窗口函数源码分析

    在了解了窗口函数实现原理 spark.hive中窗口函数实现原理复盘 和 sparksql比hivesql优化的点(窗口函数)之后,今天又撸了一遍hive sql 中窗口函数的源码实现,写个笔记记录一 ...

  10. Hive窗口函数(over/partition by/order by/window/序列函数)总结与实践

    一.简介 本文主要介绍Hive中的窗口函数,Hive中的窗口函数和SQL中的窗口函数相类似,都是用来做一些数据分析类的工作,一般用于olap分析(在线分析处理). 二.概念 我们都知道在sql中有一类 ...

最新文章

  1. 乔布斯曾带头反对 iPhone 第三方 App!由苹果反垄断案披露的那些往事
  2. jvm系列(七):jvm调优-工具篇
  3. 2020-11-19
  4. TensorFlow交叉熵
  5. C++ 11 深度学习(四)结构、权限修饰符
  6. DevExpress ActiveX
  7. 中国顶级程序员有多牛?一个弄哭韩国,一个堪称阿里“扫地僧”
  8. 微信小程序 #项目笔记# | 从0到1实现婚礼邀请函小程序
  9. Android 蓝牙AVRCP 专题(2)-----黑名单
  10. excel或wps查找文本字符串子串或拆分字符串公式
  11. 将图片url转为base64的方法
  12. 多路电源管理芯片(记录)
  13. 【硬件木马项目】第二篇:硬件木马检测方法的种类及原理
  14. 软件之道 -- 道篇全文
  15. HTML文件mhl,比HDMI更强!MHL与HDMI技术解析
  16. 中国公开课《如何培养孩子的学习兴趣》2020 郑日昌 观后感
  17. 聚合广告SDK文档(Kotlin)
  18. 时序图神经网络总结(1)
  19. 网站快速排名百度首页搜索前十名
  20. Unity 控制物体移动

热门文章

  1. 【转】人脸识别:AI产品经理需要了解的CV通识
  2. Omron 论坛软件下载连接
  3. 一个dsp最小系统至少要有_DSP最小系统原理图设计
  4. 复制或粘贴内容到含有隐藏单元格的区域时如何只复制或粘贴可见单元格
  5. 机器人运动学与动力学
  6. MOSEK安装教程及安装过程遇到的问题
  7. Excel 连接数据库的两种方式
  8. Gauss消去法、列主元素消去法及LU分解法的MATLAB实现
  9. 报错 | Cannot find module ‘@better-scroll/core/dist/types/BScroll‘
  10. MotoSimEG-VRC软件:安川机器人弧焊焊接离线编程与虚拟仿真