这是我参与2022首次更文挑战的第23天,活动详情查看:2022首次更文挑战
上文讲到hive的数据结构和常用语法,介绍了内部表和外部表,以及分区表,本文开头继续详细说一下什么是分区表。
分区表是在表的目录下还有文件去区分数据,这个就是分区表最核心的地方。
hive中是没有索引的,如果要查询数据就是查询全部,那么对查询压力肯定很大,但是如果我们有明确知道要查询某一天的数据,就可以根据分区去查询指定的文件夹中的数据,提高效率。
分区就是将业务数据有序的分割成小的数据集。
create table dept partition(in int,name string,loc string) partitioned by (month string) row format delimited fields terminated by '\t';
分区字段可以有多级。
hive的常用查询方式:
group by语句通常会和聚合函数一起使用,比如sum,count等等,按照一个或者可以多个队列的结果进行分组,并且对每组执行聚合操作。
having和where的区别
where可以针对表中的列发挥作用,而having完全不同,它是可以根据查询结果中的列发挥作用,筛选结果。
还有一个不同点是where后面不能写分组函数,而having后面可以使用分组函数。
having只用于group by分组统计语句。
接下来是介绍hive的连接查询。
1、用法首先是使用别名简化查询,2、使用表名前缀提高执行效率。
select s.id,s.name,t.id,t.name from student s join teacher t on s.id=t.sid;
内链接
只有进行连接的两个表中都存在于连接条件相匹配的数据才会被保留。
select s.id,s.name,t.id,t.name from student s join teacher t on s.id=t.sid
左外连接
左外连接JOIN操作符左边表中符合查询条件的数据保留下来。
select s.id,s.name,t.id,t.name from student s left join teacher t on s.id=t.sid
右外连接
右外连接:JOIN操作符右边表中符号where查询条件的记录会被保留下来。
select s.id,s.name,t.id,t.name from student s right join teacher t on s.id=t.sid