Hive应用 | 高阶函数

1、窗口函数

常用到的Hive窗口函数具体有:row_number()、rank()、dense_rank() 这三个窗口函数,具体区别主要有:

  • row_number:不管排名是否有相同的,都按照顺序1,2,3…..n

  • rank:排名相同的名次一样,同一排名有几个,后面排名就会跳过几次

  • dense_rank:排名相同的名次一样,且后面名次不跳跃

1)row_number()

代码如下所示:

SELECT user_id,
       order_id,
       row_number() OVER(PARTITION BY user_id order by order_id DESC) as rn
FROM access_cdm.dwd_trade_order_goods_dd_f
WHERE dt = '2021-08-25' AND user_id IN(7822416, 66440,10386724, 2613996)
LIMIT 100;

结果展示如下:

image

2)rank()

代码如下所示:

SELECT user_id,
       order_id,
       rank() OVER(PARTITION BY user_id order by order_id DESC) as rn
FROM access_cdm.dwd_trade_order_goods_dd_f
WHERE dt = '2021-08-25' AND user_id IN(7822416, 66440,10386724, 2613996)
LIMIT 100;

查询结果如下:

image

3)dense_rank()

代码如下所示:

SELECT user_id,
       order_id,
       dense_rank() OVER(PARTITION BY user_id order by order_id DESC) as rn
FROM access_cdm.dwd_trade_order_goods_dd_f
WHERE dt = '2021-08-25' AND user_id IN(7822416, 66440,10386724, 2613996)
LIMIT 100;

查询结果如下:

image

2、排序函数

(1)order by

hive中的 order by 会对查询结果集执行一次全局排序,这也就是说所有的数据都通过一个reduce进行处理的过程,对于大数据集,这个过程将消耗很大的时间来执行。

(2)sort by

hive中的 sort by 也就是执行一个局部排序过程。这可以保证每个reduce的输出数据都是有序的(但并非全局有序)。这样就可以提高后面进行的全局排序的效率。用户可以指定任意期望进行排序的字段,并可以在该字段后面加上asc关键字(默认)表示升序,desc关键字是降序排列。

在使用 sort by 之前,需要先设置 reduce 的数量 > 1,才会做局部排序,如果reduce数量是1,作用与 order by 一样,全局排序。

(3)distribute by

distribute by 控制 map 的输出在 reducer 中是如何划分的,mapReduce job中传输的所有数据都是按照键-值对的方式进行组织的,因此hive在将用户的查询语句转换成mapReduce job时,其必须在内部使用这个功能。默认情况下,MapReduce计算框架会依据map输入的键计算相应的哈希值,然后按照得到的哈希值将键-值对均匀分发到多个reducer中去。

(4)cluster by

cluster by 除了 distribute by 的功能外,还会对该字段进行排序,所以 cluster by = distribute by + sort by。但是排序只能是倒叙排列,不能指定排序规则为ASC或者DESC。

3、行列转换函数

(1)lateral view explain

Lateral view 其实就是用来和像类似于explode这种UDTF函数联用的。lateral view 会将UDTF生成的结果放到一个虚拟表中,然后这个虚拟表会和输入行即每个game_id 进行join 来达到连接UDTF外的select字段的目的。

lateral view explode 函数举例如下:

SELECT game_id, user_id
FROM test_table AS t
lateral view explode(split(user_ids, ',')) sn_table AS user_id
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • hive函数: 1、根据指定条件返回结果:case when then else end as 2、基本类型转换:...
    冷月回首阅读 8,574评论 0 0
  • 查询语句语法: 1 基本查询(Select…From) 1.1 全表和特定列查询 1.2 列别名 1.3 算术运算...
    Rex_2013阅读 3,641评论 0 0
  • 一、Hive基本概念 Hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提...
    CJ21阅读 5,696评论 0 13
  • 此篇内容:hive自定义函数UDF、UDTF,压缩存储方式,hive优化、hive实际编程基本涵盖了hive基础及...
    大数据阶梯之路阅读 4,245评论 0 4
  • https://nino-laiqiu.github.io/2020/11/14/Hive-principle-r...
    冰菓_阅读 3,499评论 0 0