大数据之Hive<六>

本文详细介绍了Hive的基本查询操作,包括全表和特定列查询、列别名、算术运算符、常用函数如COUNT、MAX、MIN、SUM、AVG的使用,以及LIMIT、WHERE子句的应用。同时,讲解了比较运算符(Between/In/Is Null)、LIKE和RLIKE通配符,以及逻辑运算符(And/Or/Not)。最后,探讨了GROUP BY和HAVING语句在分组和数据筛选中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 查询

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Select

[WITH CommonTableExpression (, CommonTableExpression)*]    (Note: Only available starting with Hive 0.13.0)

SELECT [ALL | DISTINCT] select_expr, select_expr, ...

  FROM table_reference

  [WHERE where_condition]

  [GROUP BY col_list]

  [ORDER BY col_list]

  [CLUSTER BY col_list

    | [DISTRIBUTE BY col_list] [SORT BY col_list]

  ]

 [LIMIT number]

6.1 基本查询(Select…From

6.1.1 全表和特定列查询

1)全表查询

hive (default)> select * from emp;

2)选择特定列查询

hive (default)> select empno, ename from emp;

注意:

1SQL 语言大小写不敏感。

2SQL 可以写在一行或者多行

3关键字不能被缩写也不能分行

4)各子句一般要分行写。

5)使用缩进提高语句的可读性。

6.1.2 列别名

1)重命名一个列。

2)便于计算。

3)紧跟列名,也可以在列名和别名之间加入关键字‘AS’

4)案例实操

       1)查询名称和部门

       hive (default)> select ename AS name, deptno dn from emp;

6.1.3 算术运算符

运算符

描述

A+B

A相加

A-B

A减去B

A*B

A相乘

A/B

A除以B

A%B

AB取余

A&B

AB按位取与

A|B

AB按位取或

A^B

AB按位取异或

~A

A按位取反

案例实操

       查询出所有员工的薪水后加1显示。

hive (default)> select sal +1 from emp;

6.1.4 常用函数

1)求总行数(count

hive (default)> select count(*) cnt from emp;

2)求工资的最大值(max

hive (default)> select max(sal) max_sal from emp;

3)求工资的最小值(min

hive (default)> select min(sal) min_sal from emp;

4)求工资的总和(sum

hive (default)> select sum(sal) sum_sal from emp;

5)求工资的平均值(avg

       hive (default)> select avg(sal) avg_sal from emp;

6.1.5 Limit语句

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

hive (default)> select * from emp limit 5;

6.2 Where语句

1)使用WHERE子句,将不满足条件的行过滤掉。

2WHERE子句紧随FROM子句。

3)案例实操

查询出薪水大于1000的所有员工

hive (default)> select * from emp where sal >1000;

6.2.1 比较运算符(Between/In/ Is Null

1)下面表中描述了谓词操作符,这些操作符同样可以用于JOIN…ONHAVING语句中。

操作符

支持的数据类型

描述

A=B

基本数据类型

如果A等于B则返回TRUE,反之返回FALSE

A<=>B

基本数据类型

如果AB都为NULL,则返回TRUE,其他的和等号(=)操作符的结果一致,如果任一为NULL则结果为NULL

A<>B, A!=B

基本数据类型

A或者BNULL则返回NULL;如果A不等于B,则返回TRUE,反之返回FALSE

A<B

基本数据类型

A或者BNULL,则返回NULL;如果A小于B,则返回TRUE,反之返回FALSE

A<=B

基本数据类型

A或者BNULL,则返回NULL;如果A小于等于B,则返回TRUE,反之返回FALSE

A>B

基本数据类型

A或者BNULL,则返回NULL;如果A大于B,则返回TRUE,反之返回FALSE

A>=B

基本数据类型

A或者BNULL,则返回NULL;如果A大于等于B,则返回TRUE,反之返回FALSE

A [NOT] BETWEEN B AND C

基本数据类型

如果AB或者C任一为NULL,则结果为NULL。如果A的值大于等于B而且小于或等于C,则结果为TRUE,反之为FALSE。如果使用NOT关键字则可达到相反的效果。

A IS NULL

所有数据类型

如果A等于NULL,则返回TRUE,反之返回FALSE

A IS NOT NULL

所有数据类型

如果A不等于NULL,则返回TRUE,反之返回FALSE

IN(数值1, 数值2)

所有数据类型

使用 IN运算显示列表中的值

A [NOT] LIKE B

STRING 类型

B是一个SQL下的简单正则表达式,如果A与其匹配的话,则返回TRUE;反之返回FALSEB的表达式说明如下:‘x%’表示A必须以字母‘x’开头,‘%x’表示A必须以字母’x’结尾,而‘%x%’表示A包含有字母’x’,可以位于开头,结尾或者字符串中间。如果使用NOT关键字则可达到相反的效果。

A RLIKE B, A REGEXP B

STRING 类型

B是一个正则表达式,如果A与其匹配,则返回TRUE;反之返回FALSE。匹配使用的是JDK中的正则表达式接口实现的,因为正则也依据其中的规则。例如,正则表达式必须和整个字符串A相匹配,而不是只需与其字符串匹配。

2)案例实操

1)查询出薪水等于5000的所有员工

hive (default)> select * from emp where sal =5000;

       2)查询工资在5001000的员工信息

hive (default)> select * from emp where sal between 500 and 1000;

       3)查询comm为空的所有员工信息

hive (default)> select * from emp where comm is null;

       4)查询工资是15005000的员工信息

hive (default)> select * from emp where sal IN (1500, 5000);

6.2.2 LikeRLike

1)使用LIKE运算选择类似的值

2)选择条件可以包含字符或数字:

代表零个或多个字符(任意个字符)

代表一个字符。

3RLIKE子句是Hive中这个功能的一个扩展,其可以通过Java的正则表达式这个更强大的语言来指定匹配条件。

4)案例实操

       1)查找以2开头薪水的员工信息

       hive (default)> select * from emp where sal LIKE '2%';

       2)查找第二个数值为2的薪水的员工信息

hive (default)> select * from emp where sal LIKE '_2%';

       3)查找薪水中含有2的员工信息

hive (default)> select * from emp where sal RLIKE '[2]';

6.2.3 逻辑运算符(And/Or/Not

操作符

含义

AND

逻辑并

OR

逻辑或

NOT

逻辑否

案例实操

       1)查询薪水大于1000,部门是30

hive (default)> select * from emp where sal>1000 and deptno=30;

       2)查询薪水大于1000,或者部门是30

hive (default)> select * from emp where sal>1000 or deptno=30;

       3)查询除了20部门和30部门以外的员工信息

hive (default)> select * from emp where deptno not IN(30, 20);

6.3 分组

6.3.1 Group By语句

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

案例实操:

       1)计算emp表每个部门的平均工资

hive (default)> select t.deptno, avg(t.sal) avg_sal from emp t group by t.deptno;

       2)计算emp每个部门中每个岗位的最高薪水

hive (default)> select t.deptno, t.job, max(t.sal) max_sal from emp t group byt.deptno, t.job;

6.3.2 Having语句

1havingwhere不同点

1where针对表中的列发挥作用,查询数据;having针对查询结果中的列发挥作用,筛选数据。

2where后面不能写分组函数,而having后面可以使用分组函数。

3having只用于group by分组统计语句。

2)案例实操:

1)求每个部门的平均薪水大于2000的部门

       求每个部门的平均工资

       hive (default)> select deptno, avg(sal) from emp group by deptno;

       求每个部门的平均薪水大于2000的部门

hive (default)> select deptno, avg(sal) avg_sal from emp group by deptno havingavg_sal > 2000;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值