HIve SQL学习笔记

HIve SQL学习笔记

最近面试的时候一直听到面试官说Hive SQL,今天刷了一点资料稍微系统的学习一下,在这里做一个小结。

首先介绍一下Hive SQL:

  • Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的SQL查询功能,可以将SQL语句转换为MapReduce任务运行。它使得针对Hadoop进行SQL查询成为可能。
  • 简单来说,HiveSQL与我们之前见到的MySQL等关系型数据库在用法上是差不多的。

Hive SQL 与 SQL的区别:

  • 1.HQL不支持行级别的增、改、删,所有数据在加载时就已经确定,不可更改
  • 2.不支持事务
  • 3.支持分区存储
  • 4.查询速度响应不如SQL迅速

Hive SQL需要注意的地方:

  • 1.Hive SQL不支持top函数,在Hive SQL中找前几的话可以使用limit函数
  • 2.执行顺序与MySQL一致
  • 3.日常处理中需要注意map数不要过万
  • 4.Hive SQL不能很好的识别分号,当分号不是作为结束标志时,需要加转义字符/

Hive SQL在业务上:

  • 1.Hive SQL专用函数 from_unixtime()、datediff()、date_add()、date_sub()
  • 2.Hive SQL独有的窗口函数使用起来效率更高
  • 3.union all 使用速度要比full join 速度更快,一般常使用unoin all +数字0占位来实现full join的功能;同时union all常搭配coalesce()函使用
  • 4.业务中如果出现:存在某某表但不存在某某表当中时,考虑使用left join查询效率更高
  • 5.当需要查询数据的前百分之多少数据时,考虑采用ntile()函数

Hive SQL常用技巧

  • 1.去重时使用group by代替distinct能提升查询效率
  • 2.在使用union all时可开启并发执行,参数设置为:set hive.exec.parallel=true

利用窗口函数进行多重分组:

  • grouping sets():紧跟group by后进行多重分组的设置
  • cube():根据group by 维度的所有组合进行聚合;使用方法:with cube 跟在group by后
  • rollup():以最左侧的维度为主,进行层次聚合,例子:年月日的分类汇总;使用方法:with rollup 跟在group by后

行转列函数:

  • lateral view 一般在使用行转列时,通常需要搭配lateral view explode(split (字段名称,‘分隔符’));
  • 若当字段里面的分隔符不一致时需要使用replace()函数将其转化成一致的;
  • 同理:列转行为:concat_ws(’,’,collect_set(字段名称))

表连接的优化:

  • 在内连接的情况下尽量做到小表在前大表在后,因为Hive SQL会默认将后面的表认为是大表并将其进行缓存;
  • 尽量使用相同的连接键进行连接
  • 尽早过滤数据

发生数据倾斜的原因及解决方法:

  • 1.空值产生的数据倾斜: 由于在表连接的过程中连接键的某些值为空,此时Hive SQL会难以识别,如进程一直是99%无法查询出数据。
  • 解决方案: on a.user_id = b.user_id and a.user_id is not null
  • 2.大小表连接时出现数据倾斜: 这种情况是由于大小表的数据量过于悬殊
  • 解决方案: SELECT /* + mapjoin(a)*/ (将小表放在内存里,在map里面做join即可,在括号中加入表名即可)
  • 3.表连接条件的字段数据类型不一致
  • 解决方案: on a.user_id = cast( b.iser_id as string );使用cast()函数转换字段的数据类型

学习参考资料:

  • https://www.bilibili.com/video/BV1uy4y1m7mf (b站这个开课吧老师的课很不错,推荐大家去听,有一些案例很贴近工作)
  • 《Hive编程指南》
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值