Hive也是数据库的一种,hivesql和mysql使用起来并没有什么不同,数据插入、表关联查询都是一样的,二者都是sql语法。
重点掌握两个:
- hdfs文件系统(分布式文件系统)
- hive的窗口函数
注意:窗口函数在mysql8.0版本是支持的,但是5.7版本并不支持。
利用hive命令进入hive窗口,速度会有延迟,这是因为作为数据仓库的hive并不注重查询的时间性,更倾向于数据的分析、保存。所以如果生产系统用hive系统是肯定不合适的。
Hive的窗口函数
注意:over()才是窗口函数,而sum、row_number、count只是与over()搭配的分析函数
1、row_number()over()
举例:查出每种性别中年龄最大的两条数据
准备工作:


over()就是进行分组排序的一些操作。(注意在编辑器中写代码时不要有tab缩进,不然复制到hive中会产生错误)
解答代码:
select
*,
row_number() over(partition by sex order by age desc) as rn
from userinfo;
select *
from
(select
*,
row_number() over(partition by sex order by age desc) as rn
from userinfo) t
where rn<=2;

注意:row_number() over()不考虑重复数据,比如如果两个人的年龄一样也会排出先后,不会是相同的排名。
应用:可以用来对数据去重,当想保留一条数据时,就可以让m=1,这样就只取了每组数据的一条记录,达到了去重给的目的。
2、sum() over()
举例:
有一份产品的消费记录数据,要求按时间累计统计到当月的总额
准备工作:

回答:
select
product_name,
month,
money,
sum(money) over(partition by product_name order by month) as all_money
from saleinfo;

小记录:
sql提取某一类别的第一条记录,直接group by 即可,但如果是查询某一类别中的前几条记录,有两个角度,一是利用赋值变量对齐进行排序然后选取要求的行数;另外一个思路是利用窗口函数。
易混概念区分:
- 大数据:
1、有海量的数据
2、有对海量数据进行挖掘的需求
3、有对海量数据进行挖掘的软件工具(hadoop、spark、storm、flink、tez、impala......)
- hadoop
对海量数据进行挖掘的软件工具 - hive
数据库的一种 - hdfs
分布式文件系统
#在linux下创建文件student.txt,然后再放到hive中的表中
$ hadoop fs -put hdfs://localhost:9000/user/hive/warehouse/zyq_db/student.txt
#或者在linux中创建数据(vi data.txt--cat data.txt),然后再hive中load data
#load data 命令要在hive中执行
load data local inpath '/home/frog005/student.txt' into table student;
网友评论