Hive的数据查询

与mysql和oracle中的sql语句不一样地方会特别标注
Hive简单查询

#声明如下:
SELECT [ALL|DISTINCT] select_expr,select_expr,...
FROM table_reference
[WHERE where_conditon]
[GROUP BY col_list]
[CLUSTER BY col_list
    |[DISTRIBUTE BY col_list][SORT BY col_list]
    |[ORDER BY col_list]]
[LIMIT number]
DISTRIBUTE BY指定分发器(Partitioner),多Reducer可用

简单查询举例:
–表达式

查询员工信息:员工号 姓名 月薪 年薪
select empno,ename,sal,sal*12 from emp;

–null,将空值转换成0:用nvl(comm,0)

查询员工信息:员工号 姓名 月薪 年薪 奖金 年收入  
注:comm 有null的空值
select empno,ename,sal,sal*12,comm,sal*12+nvl(comm,0) from emp;

–查询Null空值:is null

查询奖金为空的员工
select * from emp where comm=null; #报错
select * from emp where comm is null;

–使用distinct来去重

select distinct depno from emp;
select distinct depno,job from emp; #distinct作用于后面所有的列,即(depno,job)

注明:上面的查询除了select * from emp;此语句不用mapreduce来分配任务,因为它只要查全表,而其它的例如表达式,排序等都要经过mapreduce来分配任务,来进行计算,排序等。

使用fetch简单查询
使用fetch直接在表中使用简单查询语句,不用经过Mapreduce,没有函数没有排序就为简单的查询语句.
使用三种方法设置fetch task功能

方法1:
在hive的提示符下输入下面的语句
hive> set hive.fetch.task.conversion=more;
方法2:
quit退出hive,在启动hive之前执行hive --hiveconf ......表示是在后面启动hive之后都可以用fetch做简单查询。这里的--hiveconf是指设置hiveconf配置。语句如下:
MacdeiMac:bin mac$ hive --hiveconf hive.fetch.task.conversion=more
方法3:
在hive的安装目录的conf下面配置修改hive-site.xml文件。
在configration中加入下面的配置
<property>
    <name>hive.fetch.task.converstion</name>
    <value>more</value>
</property>
重新启动hive,即已经生效

方法1和方法2只适用于当前的Hive,若退出后,则失效。方法3是配置永久的fetch task。

Hive过滤查询
–字符串查询

--查询名叫KING的员工
select * from emp where ename='KING';

–大小写不通用,严格区别字符串的大小写

select * from emp where ename='King';

–like模糊查询

查询名字以S打头的员工
select empno,ename sal from emp where ename like '%S'

–包含下划线查询
用转义字符\,第一个\表示的是转义字符的含义,第二个\表示的这个转义字符是什么

查询中间含有‘_’的员工
select empno,ename sal from emp where ename like '%_%';  
#它把所有数据都查出来了,因为_代表的是任意一个字符
select empno,ename sal from emp where ename like '%\\_%';

Hive 排序查询
排序是高级操作,故一定会用mapreduce作业来完成
–升降序排序

查询员工信息:员工号 姓名 月薪 按照月薪排序
select empno,ename,sal from emp order by sal; #升序
select empno,ename,sal from emp order by sal desc; #降序

–order by 后面跟:列,表达式,别名,序号

#表达式
select empno,ename,sal,sal*2 from emp order by sal*12; 
#别名
select empno,ename,sal,sal*2 annsal from emp order by annsal; 
#序号
select empno,ename,sal,sal*2 annsal from emp order by 4; 
注:empno为第一列,序号为1,故类推序号为4的是 annsal 第4列
hive中要设置参数,将序号排序设置改为true才可以用。
下面参数默认值是false,在orderby查询语句中是不能使用序号查询的
hive> set hive.groupby.orderby.position.alias=true;

–空值查询
null排序:升序默认是排在最前面
用降序排在最后面

按照奖金排序
select empno,ename,sal,comm from emp;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值