千锋教育-做有情怀、有良心、有品质的职业教育机构

当前位置:首页  >  关于学院  >  技术干货  >  大数据技术干货  >  正文

Hive窗口函数

来源:千锋教育
作者:qyf
关键词: 重庆 太原
2022-09-28
分享

Hive窗口函数

  窗口函数是用于分析用的一类函数,要理解窗口函数要先从聚合函数说起。 大家都知道聚合函数是将某列中多行的值合并为一行,比如sum、count等。 而窗口函数则可以在本行内做运算,得到多行的结果,即每一行对应一行的值。通用的窗口函数可以用下面的语法来概括:

  Function() Over (Partition By Column1,Column2,Order By Column3)

  窗口函数又分为以下三类: 聚合型窗口函数 分析型窗口函数 * 取值型窗口函数

  聚合型窗口函数

  -- SUM(), MIN(),MAX(),AVG(),COUNT() 这些聚合函数和Over函数配合使用

  -- 列子:

  SUM(result) OVER (PARTITION BY a ORDER BY b) -- 累计至当前行的和

  SUM(result) OVER (PARTITION BY a ORDER BY b rows between 3 preceding and current row) --之前三行到当前行的和

  分析型窗口函数

  # RANk(),ROW_NUMBER(),DENSE_RANK() 等函数和Over函数配合使用

  # 例子:

  ROW_NUMBER() OVER (PARTITION BY a ORDER BY b)

  * ROW_NUMBER():生成连续的序号(相同元素序号相同)

  * RANk():如两元素排序相同则序号相同,并且会跳过下一个序号;

  * DENSE_RANK():如两元素排序相同则序号相同,不会跳过下一个序号

  OLAP 分析中常用的几个函数

  -- Grouping Sets

  -- 在一个GROUP BY查询中,根据不同的维度组合进行聚合,等价于将不同维度的GROUP BY结果集进行UNION ALL

  SELECT

  a,

  b,

  COUNT(DISTINCT uuid) AS uv,

  FROM t1

  GROUP BY a,b

  GROUPING SETS (month,day,(month,day))

  -- CUBE

  -- 在一个GROUP BY查询中,根据不同的维度组合进行聚合,等价于将不同维度的GROUP BY结果集进行UNION ALL

  SELECT

  a,

  b,

  COUNT(DISTINCT uuid) AS uv,

  FROM t1

  GROUP BY a,b

  WITH CUBE

  --ROLLUP

  --是CUBE的子集,以最左侧的维度为主,从该维度进行层级聚合

  SELECT

  a,

  b,

  COUNT(DISTINCT uuid) AS uv,

  FROM t1

  GROUP BY a,b

  WITH ROLLUP

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

相关推荐

  • Hive窗口函数 窗口函数是用于分析用的一类函数,要理解窗口函数要先从聚合函数说起。 大家都知道聚合函数是将某列中多行的值合并为一行,比如sum、count等。 而窗口函数则可以在本行内做运算,得到多行的结果,即每一行对应一行的值。通用的窗口函数可以用下面的语法来概括:
  • Hive有搭建集群的必要吗? Hive作业的运行,资源调度是YARN,数仓存储是HDFS,他们两个都是分布式的集群。 对于Hive你可以简单理解成就是负责将你的SQL转换为MR,当然也提供元数据管理(metastore),我们使用Hive时只需要一个客户端即可,对于Hive MetaStore和HiveServer2服务,可以构建一个高可用的(HA)。
  • Spark的shuffle过程和mr的shuffle过程的区别有哪些? MR在reduce端还会进行一次合并排序,spark则在map端就完成了排序,采用Tim-Sort排序算法。基于以上种种原因,MR自定义分区器时往往还需要自定义分组,spark则不需要(或者说map结构已经是自定义分组了)。
  • HBase读流程:如果读缓存和写缓存的数据不一致,怎么返回? 因为HBase读时,先去查询写缓存MemStore,如果有则直接返回,如果写缓存MemStore没有时,则会去查询读缓存BlockCache,如果有就直接返回,没有将会读取对应HFile,并返回同时缓存BlockCache。
  • 在开发的时候有没有用过拉链表?拉链表的应用场景有哪些?怎么用的? 没有用过拉链表,因为我们的开发场景中暂时不设计,我这边可以就简单把我对拉链表的认知给说一下:首先拉链表是在面对处理的数据量比较大,且计算要求保留历史变更数据。其主要的核心在于通过设置两个字段作为数据是否有效性的开关(begin_date,end_date),这样做的目的是保证在表的数据,在某一个时间区间内(时间粒度得统一,月,日,时,分…)有且仅有一条有效的数据。
  • 离线数仓的分层是如何分层的? 离线数仓的分层通常是三层:ODS层、DWD层、DWS层、ADS层,其中ODS层(操作明细)、DWD层(数据仓库明细)、DWS层(数据仓库公用汇总)这三层通常被称为公共层,是数据清洗、加工、聚合的重点,ADS层(应用数据层)。我们的项目也不另外,就是按这个套路建设。