Hive的数据查询
程序员文章站
2022-07-11 08:26:13
...
与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;
上一篇: hive数据查询导出
下一篇: HIVE数据查询