1,hive cli 和 beeline
hive提供了很多种连接方式: cli //基于Apache thrift beeline //基于jdbc
2,查看hive服务与帮助
hive --service cli --help //查看hive cli帮助文档 hive --service cli //启动hive cli 同 hive hive --service hiveserver2 //启动hiveserver2服务器,使用jdbc连接 3,启动hiveserver2会出现两个端口号(可以使用 netstat -anop 查看):
10002 //hiveserver2 webui 10000 //hiveserver2 rpc 用来远程jdbc连接 4,hive beeline 客户端使用:
1),首先关闭hiveserver认证
//在hive conf目录下的hive-site.xml里面编辑
<property>
<name>hive.server2.enable.doAs</name>
<value>false</value>
</property>
2),启动hiceserver2服务器
hive --service hiveserver2
3),启动beeline客户端,直接连接hiveserver2,端口10000
beeline -u jdbc:hive2://localhost:10000
5,进入beeline的一些操作
!help //查看帮助
!close //关闭当前连接 如我们连接jdbc连接
!table ; //显示表
!sh clear ; //执行shell脚本命令
!quit ; //退出beeline终端
6,在beeline上执行聚合函数和高级查询
select count(*) from t1; //统计
select max(*) from t1; //最大值
select min(*) from t1; //最小值
select sum(*) form t1; //求和
select avg(*) from t1; //求平均值
select * from t1 order by id limit 5,5; //分页
select * from (select id,name from t1) a; //子查询或者叫嵌套查询
select name,case when id < 3 then 'small' case when id =3 then "true" else 'big'
//case when等价于java中if else/switch case
select count(*),sum(id) from t1 gourp by city having id >10; // (分组)group by加条件
7,hive一些补充
1)like和rlike区别
like和rlike一般用于模糊查询
(假如我们要从employees表中查找所有住址街道名称中含有单词Chicago和Ontario的雇员名称和街道信息)
like实例:
select name,address from employees
where address like '%Chicago%' OR address like '%Ontario%';
rlike实例:
select name,address from employees
where address rlike '.*(Chicago|Ontario).*';
我们看的出来rlike是like的强化版,支持java的正则表达式,更方便,简化代码
2)hive端聚合优化
hive.map.aggr=true; //默认是打开的,不过相当于没说吧
3) MR避免的条件
1,无条件查询(没有where子句)
2,有where语句,但只包含分区字段
3,让hive判断是否自动运行本地模式,默认是false
hive.exec.mode.local.auto=true