HIVE的常用函数

Hive 和数据库比较
Hive 和数据库除了拥有类似的查询语言,再无类似之处。
1)数据存储位置
Hive 存储在 HDFS 。数据库将数据保存在块设备或者本地文件系统中。
2)数据更新
Hive 中不建议对数据的改写。而数据库中的数据通常是需要经常进行修改的。
3)执行延迟
Hive 执行延迟较高。数据库的执行延迟较低。当然,这个是有条件的,即数据规模较小,
当数据规模大到超过数据库的处理能力的时候,Hive 的并行计算显然能体现出优势。
4)数据规模

Hive 支持很大规模的数据计算;数据库可以支持的数据规模较小。
1.6.4 内部表和外部表
元数据、原始数据
1)删除数据时
内部表:元数据、原始数据,全删除
外部表:元数据 只删除
2)在公司生产环境下,什么时候创建内部表,什么时候创建外部表?
在公司中绝大多数场景都是外部表。
自己使用的临时表,才会创建内部表;
1.6.5 系统函数
1)数值函数
(1)round:四舍五入;(2)ceil:向上取整;(3)floor:向下取整
2)字符串函数
(1)substring:截取字符串;(2)replace:替换;(3)regexp_replace:正则替换
(4)regexp:正则匹配;(5)repeat:重复字符串;(6)split:字符串切割
(7)nvl:替换 null 值;(8)concat:拼接字符串;
(9)concat_ws:以指定分隔符拼接字符串或者字符串数组;
(10)get_json_object:解析 JSON 字符串
3)日期函数
(1)unix_timestamp:返回当前或指定时间的时间戳
(2)from_unixtime:转化 UNIX 时间戳(从 1970-01-01 00:00:00 UTC 到指定时间的
秒数)到当前时区的时间格式
(3)current_date:当前日期
(4)current_timestamp:当前的日期加时间,并且精确的毫秒
(5)month:获取日期中的月;(6)day:获取日期中的日
(7)datediff:两个日期相差的天数(结束日期减去开始日期的天数)
(8)date_add:日期加天数;(9)date_sub:日期减天数
(10)date_format:将标准日期解析成指定格式字符串
4)流程控制函数
(1)case when:条件判断函数
(2)if:条件判断,类似于 Java 中三元运算符
5)集合函数
(1)array:声明 array 集合
(2)map:创建 map 集合
(3)named_struct:声明 struct 的属性和值
(4)size:集合中元素的个数
(5)map_keys:返回 map 中的 key
(6)map_values:返回 map 中的 value
(7)array_contains:判断 array 中是否包含某个元素
(8)sort_array:将 array 中的元素排序
6)聚合函数
(1)collect_list:收集并形成 list 集合,结果不去重
(2)collect_set:收集并形成 set 集合,结果去重
1.6.6 自定义 UDF、UDTF 函数
1)在项目中是否自定义过 UDF、UDTF 函数,以及用他们处理了什么问题,及自定义步骤?
(1)目前项目中逻辑不是特别复杂就没有用自定义 UDF 和 UDTF
(2)自定义 UDF:继承 G…UDF,重写核心方法 evaluate
(3)自定义 UDTF:继承自 GenericUDTF,重写 3 个方法:initialize(自定义输出的列
名和类型),process(将结果返回 forward(result)),close
2)企业中一般什么场景下使用 UDF/UDTF?
(1)因为自定义函数,可以将自定函数内部任意计算过程打印输出,方便调试。
(2)引入第三方 jar 包时,也需要。
1.6.7 窗口函数
一般在场景题中出现手写:分组 TopN、行转列、列转行。

按照功能,常用窗口可划分为如下几类:聚合函数、跨行取值函数、排名函数。
1)聚合函数
max:最大值。
min:最小值。
sum:求和。
avg:平均值。
count:计数。
2)跨行取值函数
(1)lead 和 lag
select
order_id,
user_id,
order_date,
amount,
lag(order_date,1, ‘1970-01-01’) over (partition by user_id order by order_date) last_date,
lead(order_date,1, ‘9999-12-31’) over (partition by user_id order by order_date) next_date
from order_info;
窗口函数(window functions)
常用窗口函数——lead和lag
功能:获取当前行的上/下边某行、某个字段的值。

字段名 偏移量 默认值
思考:该查询语句
的结果是什么?
窗口函数(window functions)
1
2
3
4
5
6
7
窗口函数,能为每行数据划分一个窗口,然后对窗
口范围内的数据进行计算,最后将计算结果返回给该行
数据。
定义
1
1&2
2&3
3&4
4&5
5&6
6&7

注:lag 和 lead 函数不支持自定义窗口。
(2)first_value 和 last_value
3)排名函数
select
stu_id,
course,
score,
rank() over(partition by course order by score desc) rk,
dense_rank() over(partition by course order by score desc) dense_rk,
row_number() over(partition by course order by score desc) rn
from score_info;
窗口函数(window functions)
常用窗口函数——rank1224、dense_rank 1223、row_number 1234

注:rank 、dense_rank、row_number 不支持自定义窗口。
1.6.8 Hive 优化
1.6.8.1 分组聚合
一个分组聚合的查询语句,默认是通过一个 MapReduce Job 完成的。Map 端负责读取数
据,并按照分组字段分区,通过 Shuffle,将数据发往 Reduce 端,各组数据在 Reduce 端完
成最终的聚合运算。
分组聚合的优化主要围绕着减少 Shuffle 数据量进行,具体做法是 map-side 聚合。所谓
select
order_id,
user_id,
order_date,
amount,
first_value(order_date,false) over (partition by user_id order by order_date) first_date,
last_value(order_date,false) over (partition by user_id order by order_date) last_date
from order_info;
窗口函数(window functions)
常用窗口函数——first_value和last_value
功能:获取窗口内某一列的第一个值/最后一个值
order_id user_id order_date amount
1 1001 2022-01-01 10
2 1001 2022-01-02 20
3 1001 2022-01-03 10
4 1002 2022-01-04 30
5 1002 2022-01-05 40
6 1002 2022-01-06 20
语法:
order_id user_id order_date amount first_date last_date
1 1001 2022-01-01 10 2022-01-01 2022-01-03
2 1001 2022-01-02 20 2022-01-01 2022-01-03
3 1001 2022-01-03 10 2022-01-01 2022-01-03
4 1002 2022-01-04 30 2022-01-04 2022-01-06
5 1002 2022-01-05 40 2022-01-04 2022-01-06
6 1002 2022-01-06 20 2022-01-04 2022-01-06
字段名 是否跳过null
思考:该查询语句
的结果是什么?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一凡888

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值