专栏首页cwl_Java大数据-Hive查询语法

大数据-Hive查询语法

2. Hive 查询语法

2.1. SELECT

SELECT [ALL | DISTINCT] select_expr, select_expr, ... 
FROM table_reference 
[WHERE where_condition] 
[GROUP BY col_list [HAVING condition]] 
[CLUSTER BY col_list | [DISTRIBUTE BY col_list] 
[SORT BY| ORDER BY col_list] ]
[LIMIT number]
  1. order by 会对输入做全局排序,因此只有一个reducer,会导致当输入规模较大时,需要较长的计算时间。
  2. sort by不是全局排序,其在数据进入reducer前完成排序。因此,如果用sort by进行排序,并且设置 mapred.reduce.tasks>1,则sort by只保证每个reducer的输出有序,不保证全局有序。
  3. distribute by(字段)根据指定的字段将数据分到不同的reducer,且分发算法是hash散列。
  4. Cluster by(字段) 除了具有Distribute by的功能外,还会对该字段进行排序。 —> distribute by + sort by

因此,如果分桶和sort字段是同一个时,此时, cluster by = distribute by + sort by 分桶表的作用:最大的作用是用来提高join操作的效率;

思考这个问题: select a.id,a.name,b.addr from a join b on a.id = b.id; 如果a表和b表已经是分桶表,而且分桶的字段是id字段 做这个join操作时,还需要全表做笛卡尔积吗?

2.2. 查询语法

全表查询

select * from score;

选择特定列

select s_id ,c_id from score;

列别名 1)重命名一个列。 2)便于计算。 3)紧跟列名,也可以在列名和别名之间加入关键字‘AS’

select s_id as myid ,c_id from score;

2.3. 常用函数

  • 求总行数
(count) select count(1) from score; 
  • 求分数的最大值
(max) select max(s_score) from score; 
  • 求分数的最小值
(min) select min(s_score) from score; 
  • 求分数的总和
(sum) select sum(s_score) from score; 
  • 求分数的平均值
(avg) select avg(s_score) from score;

2.4. LIMIT语句

典型的查询会返回多行数据。LIMIT子句用于限制返回的行数。

 select * from score limit 3; 

2.5. WHERE语句

  1. 使用WHERE 子句,将不满足条件的行过滤掉。
  2. WHERE 子句紧随 FROM 子句。
  3. 案例实操 查询出分数大于60的数据
select * from score where s_score > 60;

2.6 比较运算符

  • 查询分数等于80的所有的数据
select * from score where s_score = 80; 
  • 查询分数在80到100的所有数据
select * from score where s_score between 80 and 100; 
  • 查询成绩为空的所有数据
select * from score where s_score is null;
  • 查询成绩是80和90的数据
select * from score where s_score in(80,90);

2.7 LIKE 和 RLIKE

  1. 使用LIKE运算选择类似的值
  2. 选择条件可以包含字符或数字:
% 代表零个或多个字符(任意个字符)。 
_ 代表一个字符。 
  1. RLIKE子句是Hive中这个功能的一个扩展,其可以通过Java的正则表达式这个更强大的语言来指定匹配条件。

2.8 案例实操

  1. 查找以8开头的所有成绩
select * from score where s_score like '8%'; 
  1. 查找第二个数值为9的所有成绩数据
select * from score where s_score like '_9%'; 
  1. 查找成绩中含9的所有成绩数据
select * from score where s_score rlike '[9]'; # like '%9%'

2.9 逻辑运算符

  1. 查询成绩大于80,并且s_id是01的数据
select * from score where s_score >80 and s_id = '01'; 
  1. 查询成绩大于80,或者s_id 是01的数
select * from score where s_score > 80 or s_id = '01'; 
  1. 查询s_id 不是 01和02的学生
select * from score where s_id not in ('01','02');

2.10. 分组 GROUP BY 语句

GROUP BY语句通常会和聚合函数一起使用,按照一个或者多个列队结果进行分组,然后对每个组执行聚合操作。

案例实操
  1. 计算每个学生的平均分数
select s_id ,avg(s_score) from score group by s_id; 
  1. 计算每个学生最高成绩
select s_id ,max(s_score) from score group by s_id; 
HAVING 语句
  • having与where不同点
    • where针对表中的列发挥作用,查询数据;having针对查询结果中的列发挥作用,筛选数据。
    • where后面不能写分组函数,而having后面可以使用分组函数。
    • having只用于group by分组统计语句。
案例实操:
  1. 求每个学生的平均分数
select s_id ,avg(s_score) from score group by s_id;
  1. 求每个学生平均分数大于85的人
select s_id ,avg(s_score) avgscore from score group by s_id having avgscore > 85;

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 大数据-Hive分区表

    在大数据中,最常用的一种思想就是分治,我们可以把大的文件切割划分成一个个的小的文件,这样每次操作一个小的 文件就会很容易了,同样的道理,在hive当中也是支持这...

    cwl_java
  • 大数据-Hive排序

    Distribute By:类似MR中partition,进行分区,结合sort by使用。

    cwl_java
  • 快速学习Maven-从私服下载 jar 包Nexus

    没有配置 nexus 之前,如果本地仓库没有,去中央仓库下载,通常在企业中会在局域网内部署一台私服服务器,有了私服本地项目首先去本地仓库找 jar,如果没有找到...

    cwl_java
  • 小学生SQL50题

    已知有如下4张表: 学生表: student(s_id,s_name,s_birth,s_sex) –学生编号,学生姓名, 出生年月,学生性别 课程表: cou...

    暴走大数据
  • Hive快速入门系列(10) | Hive的查询语法

    注: 1、order by 会对输入做全局排序,因此只有一个reducer,会导致当输入规模较大时,需要较长的计算时间。 2、sort by不是全局排序,其...

    不温卜火
  • Hive SQL50道练习题

    – 4、查询平均成绩小于60分的同学的学生编号和学生姓名和平均成绩: – (包括有成绩的和无成绩的)

    王知无
  • hiveQL去重

    去重: 以id进行分组,然后取出每组的第一个 select * from (select *,row_number() over (partition by i...

    用户1225216
  • 这或许是对小白最友好的python入门了吧——13,字典初识

    前边我们学习了列表、元组等储存元素的方式,今天我们来看一个更为强大的:字典。 像列表用方括号[]、元组用圆括号()一样,字典用花括号{} 先编写一个简单的词典,...

    用户1315847
  • Msql面试zongjie

    说到数据库每次面试都会在sql语句上吃大亏,考察的问题无非是去重,连表查询,求最值,平均值等,看起来很简单吧,但是写起来还真有点困难,不会sql面试会大打折扣。...

    wencheng
  • 打分排序系统漫谈1 - 时间衰减

    打分排序系统的应用非常普遍,比如电影的评分,知乎帖子的热度,和新闻文章的排序。让我们从最简单直观的平均打分开始, 聊聊各种打分方法的利弊和使用场景。

    风雨中的小七

扫码关注云+社区

领取腾讯云代金券