hive的查询语法基本和sql一致,也是分为:
- 基本查询
select *
from emp;
select t.empno,t.ename,t.deptno
from emp t;
- 条件查询
limit
//查询前n条
select *
from emp
limit 5;
区间查询between and
select *
from emp e
where e.sal
between t.sal=10 and t.sal =1500;
order by
如果在 严格模式下直接使用order by 会报错,必须加上 LIMIT关键字
set hive.mapred.mode=nonstrict; #或者将参数值设置为,nostrict
select
*
from
A
where d ='2018-10-22'
order by checkin_time
limit 100
order by默认顺序是升序(asc)。在Hive 2.1.0及以上版本,支持对null值进行排序,升序排序是null值被排在第一位,降序时null值被排在最后。
sort by
Hive支持使用 sort by 排序。
sort by 和 order by的区别是前者给每一reducer上的所有行进行排序,后者保证在数据结果上都有序。也就是说,如果使用超过一个reducer,使用sort by可能给出部分有序的结果。
SELECT key, value FROM src SORT BY key ASC, value DESC
这个查询有2个reducer,每个结果如下
3. 关联查询
注意: hive 的连接条件一定要在 on 中,否则会笛卡尔积 不允许笛卡尔积查询 set hive.mapred.mode=strict; 允许set hive.mapred.mode=nonstrict;
-- 各类join
--1/ 内连接
-- 笛卡尔积
select a.*,b.*
from t_a a inner join t_b b;
-- 指定join条件
select a.*,b.*
from
t_a a join t_b b on a.name=b.name;
-- 2/ 左外连接(左连接)
select a.*,b.*
from
t_a a left outer join t_b b on a.name=b.name;
-- 3/ 右外连接(右连接)
select a.*,b.*
from
t_a a right outer join t_b b on a.name=b.name;
-- 4/ 全外连接
select a.*,b.*
from
t_a a full outer join t_b b on a.name=b.name;
-- 5/ 左半连接
select a.*
from
t_a a left semi join t_b b on a.name=b.name;