Hive详细讲解-各类函数速通

文章目录

1.查看系统中内置函数

sql 复制代码
show functions

2.查看某个函数细节

  • 可以看到hive中源码的全类名

今天将老师讲的东西总结;总结完成后删除此条信息

3.单行函数

3.1算数函数

运算符较为简单,但是请注意取反操作是~

老师说法:&与运算会先将数字转化为2进制然后进行运算

3.2数值函数

  • round四舍五入
  • ceil上取整
  • floor下取整
  • 可以设置返回小数个数

3.3字符串函数

  • substring

三个参数,第三个可选

和之前的limit两个数量的参数一样

第二个参数表示从哪里开始截取

第三个参数表示截取几个!

特别注意,索引从1开始

和python一样支持负数,例如substring('abc',-1)

  • replace替换函数

此处的替换,还是全局替换而非局部替换。

3.4regexp_replace正则替换

正则表达式 描述 示例 匹配结果
. 匹配除换行符外的任意字符 a.b acb, a1b
\d 匹配一个数字(0-9 \d\d 12, 34
\D 匹配非数字字符 \D a, -
\w 匹配字母、数字、下划线 \w+ abc123, _x_
\W 匹配非字母、数字、下划线 \W !, @
\s 匹配空白字符(空格、制表符等) \s+ 空格、制表符等
\S 匹配非空白字符 \S+ abc, 123
^ 匹配行的开头 ^abc abc123
$ 匹配行的结尾 123$ abc123
* 匹配前一个字符 0 次或多次 a* ``, a, aaa
+ 匹配前一个字符 1 次或多次 a+ a, aaa
? 匹配前一个字符 0 次或 1 次 a? ``, a
{n} 匹配前一个字符恰好 n 次 a{3} aaa
{n,} 匹配前一个字符至少 n 次 a{2,} aa, aaa
{n,m} 匹配前一个字符至少 n 次,至多 m 次 a{2,4} aa, aaa
[abc] 匹配括号内任意一个字符 [abc] a, b, c
[^abc] 匹配不在括号内的任意字符 [^abc] d, 1, !

特别注意:

[^abc]

+

\S

\s

.

\D

  • 正则表达式的使用,请你注意转义

3.5regexp正则匹配

3.6repeat

3.7split切割函数

  • split切割第二个参数出来的是一个正则表达式
  • 切割出来是一个array
  • 切割出来索引从0开始

3.8nvl函数

  • 传入两个参数
  • 判断第一个参数是否为空,若不空返回第一个参数值,为空返回出第二个参数。

3.9concat拼接函数

  • 注意点concat可以将传入的任意str拼接

3.10解析json字符串 get_json_object

  • 返回值string

  • json文件表示一个对象会以{ 开头

  • json表示一个数组会以[开头

4.日期函数

日期:年月日

时间:时分秒

4.1时间戳函数

  • unix_timestamp:返回当前或指定时间的时间戳

  • 时间戳指的是1970年到当前的秒数

  • 当前时刻时间戳全世界同一时刻相同

  • 10位时间戳表示秒,13位表示毫秒

  • 可以指定时间时间戳

此处的时间格式和Java相同

4.2将时间戳转化为日期

  • from_unixtime()
  • 两个参数,第二个参数可选,可以转指定格式

4.3获取当前日期

4.3日期运算

  • 过于繁琐,直接列到下面,用的时候直接拿来用即可

  • 唯一有用的也就data_format

5.流程控制函数

5.1case when()

感觉有点像linux shell

  • 可以简化写法

5.2 if写法

6.集合函数

  • 集合函数就是处理复杂数据类型

6.1见名知意array_contains()

和Java一样都是contains,然后返回true还是false。

  • 此外常见size()

6.2 map函数

和Java一样,但是返回的是数组类型。

6.3结构体

7.高级聚合函数

  • collect_list()返回一个数组
  • collect_set()返回一个数组

8.炸裂函数(hive独有)-UDTF函数

  • explode(map|array)

array: 一个数组,每个元素将被展开为一行。

map: 一个映射类型(key-value对),会将每个key-value对展开为一行,分别返回keyvalue

  • DUTF指标函数

posexplode()返回函数值以及字典索引

使用EXPLODE时必须搭配LATERAL VIEW来展开数据。

NULL值处理 : 如果arraymapNULLEXPLODE将返回0行。

多次使用 : 如果有多个嵌套的arraymap,可以使用多次LATERAL VIEW进行展开。

  • 通常情况下lateral view和udtf函数配合使用。
  • 基本语法

hobby显然原始表字段没有,因此需要lateral view结合爆裂函数进行操作;

  • tmp表示UDTF炸出来的表的名字 tmp表的别名必须存在
  • hobby表示tmp每一个字段的别名;

这段 Hive SQL 语句可以分解为几个步骤来理解。以下是详细的拆解和解释:

1. 最外层查询

sql复制代码select
 cate,
 count(*)
from
(
 -- 内层子查询
)t2
group by cate;

功能

  • 统计每个 cate(分类)的数量(count(*))。
  • 数据来源是子查询 t2,按 cate 分组(group by cate)。

2. 子查询 t2

sql复制代码select
    movie,
    cate
from
(
    -- 更内层子查询
)t1 lateral view explode(cates) tmp as cate

功能

  • t1 中提取每个电影(movie)及其单个分类(cate)。
  • lateral view explode(cates):将数组 cates 展开为多行,每行包含一个分类(cate)。
shell 复制代码
insert overwrite table movie_info
values ("《疑犯追踪》", "悬疑,动作,科幻,剧情"),
       ("《Lie to me》", "悬疑,警匪,动作,心理,剧情"),
       ("《战狼2》", "战争,动作,灾难");

-- lateral view explode(category) tmp as cate

select
    cate,
    count(*)
from
(
    select
        movie,
        cate
    from
    (
        select
            movie,
            split(category,',') cates
        from movie_info
    )t1 lateral view explode(cates) tmp as cate
)t2
group by cate;

9.窗口函数

  • 窗口,函数(直接拿聚合函数来用即可)
  • 窗口定义计算范围,函数定义计算逻辑

绝大多数聚合函数都可以配合窗口函数直接使用

基于值的order by表示你基于哪个字段来进行窗口范围划分

  • 窗口函数示例
  • sum() over() tablename
  • 支持内部排序,order by order_data
  • rows between a and b
  • unbounded preceding表示第一行
  • current row 表示当前行
  • 整体来看也就是排序后的表 amount按照第一行加到当前行返回结果;
  • 基于值的窗口划分
  • order by指定比较字段为order_data
  • 接着按照order_data按照 -无穷(unbounded preceding)到当前值(current row)来进行比较
  • 窗口函数分区

定义分区字段,然后窗口函数作用到每一个分区上

相较于传统的窗口函数,多了个partition by

此外其他一样。

我的理解:

必要字段:聚合函数() over(order by rows|range between * and *) column_name;

其他若分区,写partition by即可

9.窗口函数常用补充

  • 跨行取值函数

  • lead取下一行、lag取上一行

拿到每一个订单间隔多少日期,上一个日期,下一个日期的下单时间

  • first_value,last_value获取第一行和最后一行某一个字段值

但是hive提供额外参数,是否跳过空值

  • rank,dense_rank,row_number排名函数

  • 使用该类函数,你仅需要考虑partition by 和order by即可,不需要考虑窗口范围

相关推荐
想做富婆5 小时前
Hive:复杂数据类型之Map函数
数据仓库·hive·hadoop
想做富婆7 小时前
hive:基本数据类型,关于表和列语法
大数据·hive·hadoop
梦醒沉醉7 小时前
单机伪分布Hadoop详细配置
大数据·hadoop·分布式
WHYBIGDATA17 小时前
Hive安装教程
大数据·hive·hadoop
想做富婆17 小时前
Hive:struct数据类型,内置函数(日期,字符串,类型转换,数学)
数据仓库·hive·hadoop
乙卯年QAQ17 小时前
【Hadoop】Hadoop 概述
大数据·hadoop·分布式
黄雪超20 小时前
深入MapReduce——从MRv1到Yarn
大数据·hadoop·mapreduce
想做富婆1 天前
Hive:基本查询语法
数据仓库·hive·hadoop