hive 数据分析 窗口函数

1. 端上跨节点漏斗

    多个join,然后比较各自的时间挫.

2. 窗口函数(教程: https://help.aliyun.com/document_detail/34994.html )

   

    作用: 1. 取前n条详情,

             2. 聚合.. 避免contact过多. 比较繁琐,需要三次select 

                  1select 先给每行分配行数,2select然后只保留前三行, 3select+group by.

                   CONCAT_WS(",",COLLECT_SET(org_id) ) org_ids  或者 group_concat

      

              

             3. 保留原行数, 不通过group by 但每行新增group by 后的字段.

    例子 每行新增部门平均数: SELECT depname, empno, salary, avg(salary) OVER (PARTITION BY depname) FROM empsalary;
  depname  | empno | salary |          avg          
-----------+-------+--------+-----------------------
 develop   |    11 |   5200 | 5020.0000000000000000
 develop   |     7 |   4200 | 5020.0000000000000000
 develop   |     9 |   4500 | 5020.0000000000000000
 develop   |     8 |   6000 | 5020.0000000000000000
 develop   |    10 |   5200 | 5020.0000000000000000
 personnel |     5 |   3500 | 3700.0000000000000000
 personnel |     2 |   3900 | 3700.0000000000000000
 sales     |     3 |   4800 | 4866.6666666666666667
 sales     |     1 |   5000 | 4866.6666666666666667
 sales     |     4 |   4800 | 4866.6666666666666667
(10 rows)

  附录:

窗口函数的格式语法声明如下:

window_func() over (partition by [col1,col2…]
[order by [col1[asc|desc], col2[asc|desc]…]] windowing_clause)
  • window_func(): Ntile,Rank,Dense_Rank, Row_Number,Lag, Lead,FIRST_VALUE, LAST_VALUE

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

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

  • partition by部分用来指定开窗的列。分区列的值相同的行被视为在同一个窗口内。现阶段,同一窗口内最多包含1亿行数据(建议不超过500万行),否则运行时报错。
  • order by用来指定数据在一个窗口内如何排序。
  • windowing_clause部分可以用rows指定开窗方式,有以下两种方式:
    • rows between x preceding|following and y preceding|following表示窗口范围是从前或后x行到前或后y行。
    • rows x preceding|following窗口范围是从前或后第x行到当前行。

猜你喜欢

转载自blog.csdn.net/fei33423/article/details/84820383
今日推荐