前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >大数据-Hive查询语法

大数据-Hive查询语法

作者头像
cwl_java
发布2019-12-26 16:02:38
3.1K0
发布2019-12-26 16:02:38
举报
文章被收录于专栏:cwl_Java

2. Hive 查询语法

2.1. SELECT

代码语言:javascript
复制
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. 查询语法

全表查询

代码语言:javascript
复制
select * from score;

选择特定列

代码语言:javascript
复制
select s_id ,c_id from score;

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

代码语言:javascript
复制
select s_id as myid ,c_id from score;

2.3. 常用函数

  • 求总行数
代码语言:javascript
复制
(count) select count(1) from score; 
  • 求分数的最大值
代码语言:javascript
复制
(max) select max(s_score) from score; 
  • 求分数的最小值
代码语言:javascript
复制
(min) select min(s_score) from score; 
  • 求分数的总和
代码语言:javascript
复制
(sum) select sum(s_score) from score; 
  • 求分数的平均值
代码语言:javascript
复制
(avg) select avg(s_score) from score;

2.4. LIMIT语句

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

代码语言:javascript
复制
 select * from score limit 3; 

2.5. WHERE语句

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

2.6 比较运算符

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

2.7 LIKE 和 RLIKE

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

2.8 案例实操

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

2.9 逻辑运算符

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

2.10. 分组 GROUP BY 语句

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

案例实操
  1. 计算每个学生的平均分数
代码语言:javascript
复制
select s_id ,avg(s_score) from score group by s_id; 
  1. 计算每个学生最高成绩
代码语言:javascript
复制
select s_id ,max(s_score) from score group by s_id; 
HAVING 语句
  • having与where不同点
    • where针对表中的列发挥作用,查询数据;having针对查询结果中的列发挥作用,筛选数据。
    • where后面不能写分组函数,而having后面可以使用分组函数。
    • having只用于group by分组统计语句。
案例实操:
  1. 求每个学生的平均分数
代码语言:javascript
复制
select s_id ,avg(s_score) from score group by s_id;
  1. 求每个学生平均分数大于85的人
代码语言:javascript
复制
select s_id ,avg(s_score) avgscore from score group by s_id having avgscore > 85;
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2. Hive 查询语法
    • 2.1. SELECT
      • 2.2. 查询语法
        • 2.3. 常用函数
          • 2.4. LIMIT语句
            • 2.5. WHERE语句
              • 2.6 比较运算符
                • 2.7 LIKE 和 RLIKE
                  • 2.8 案例实操
                    • 2.9 逻辑运算符
                      • 2.10. 分组 GROUP BY 语句
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档