hive命令实例

1、把本地文件上传到hdfs:
    load data local inpath '/home/kun/soft/xxx.data' into table t_order;

2、统计表中dept_name个数
   
select dept_name,count(1) from t group by dept_name;

3、新建一个跟b一样的表结构的a表:
   
create table a like b;

4、新建一个表,带分区:
(1)
create table employees(
name string,
salary float,
subordinates array<string>,
deductions map<string,float>,
address struct<street:string,city:string,state:string,zip:int>
)
partitioned by(country string,state string);


分区查询:
select * from employees where country = 'US' and state ='IL';

(2)
create table sal(
id int,
sname string,
salary float,
work string
)
partitioned by (ymd string)
row format delimited fields terminated by ','
;

5、表重命名:
  
 alter table employees rename to emp;

6、修改列信息:
   
alter table emp change column salary salary int;

    可修改列名,比如:
   
alter table emp change column salary sa int;

  增加列:
  
 alter table emp add columns (
    app_name string);

7、通过查询语句向表中插入数据:
   覆盖之前有的内容:
   
insert overwrite table t select * from t;

   在之前内容后追加,不覆盖:
   
insert into table t select * from t;


8、创建分区表:
   
create table stu(id int,sname string,age int,city string) partitioned by (ds string) row format
    delimited fields terminated by ',' stored as textfile;

    load data local inpath '/home/kun/data/salary.txt' overwrite into table sal partition(ymd='2016-5-8');

    有overwrite时,会把之前的表覆盖,没有时,表内容追加。
9、指定 多个输出文件夹目录:
   
from stu s
insert overwrite directory '/home/kun/2016-5-7'
 select * where s.ds = '2016-5-7'
insert overwrite directory '/home/kun/2016-6-6'
 select * where s.ds = '2016-6-6'
insert overwrite directory '/home/kun/data/2016-5-9'
 select * where s.ds = '2016-5-9';

  #/home/kun/2016-5-7 的路径为hdfs上的路径,而非本地路径。

10、查询语句:
    Array数组索引是基于0的,eg:
   
select name ,subordinates[0] from employee;

    同时,提取出来的string数据类型的值将不再加引号。
    为了引用Map元素,用户还可以使用Array的语法,但是使用的是键值,而表示整数索引,eg:
   
select name ,deductions["State Taxes"] from employee;

    为了引用Struct中的一个元素,用户可以使用“点”符号,类似于前面提到的“表的别名.列名”,eg:
  
 select name,address.city from employee;

11、可以通过设置属性hive.map.aggr值为true来提高聚合的性能:
   
set hive.map.aggr=true;

    可提高执行效率。

12、limit子句用于限制返回的行数,在select最后加上limit 2 就表示 返回2行数据。


13、case... when... then...的使用:
   
select sname,age,
case
when age<18 then 'to young'
when age>=18 and age<=25 then 'excellent'
when age>25 and age<=30 then 'better'
else 'a little older'
end as bracket from stu;


14、比较float类型的数据时,如salary>20000.0  可以写成salary>cast(20000.0 as float)
    否则会出现salary=20000.0的值也出现在>的范围里。
    cast(value as type)是显示的类型转换。
    补:将string类型转换为binary类型:
select (2.0*cast(cast(b as string)as double)) from src;


15、like和rlike:
    
select sname,work from stu s where s.work like '工作';

 select sname,work from stu s where s.work rlike '.*(工作|学习).*';

16、group by 和 having:(group by 后有哪些列,表中就包含哪些列,其余列自动剔除。)
   
select * from stu s where s.age>16 group by sname,work,age;
select * from stu s where s.age>16 group by sname,work,age having work like '工作';



17、JOIN语句:on指明了2个表建立连接的条件
   
select s.id,s.sname,s.age,a.salary from stu s join sal a on s.id = a.id;

       hive暂不支持on子句中的谓语动词间使用or只可使用and。
    笛卡尔积Join:结果返回两张表行数的乘积条信息,比如左标5条信息,右表3条信息,结果就是15条信息
   
select * from stu join sal;

    map-side Join 不仅可以减少reduce过程,有时还可以减少map过程的执行步骤,加快执行速度:
   
select /* +mapjoin(a) */ s.id,s.sname,s.age,a.salary from stu s join sal a on s.id = a.id;

      0.7版本后直接使用
   
set hive.auto.convert.join=true;

      就可以了,不用再加这个标记。

18、排序: hive中使用sort by 来替代order by
    sort by 是对每一个reduce中数据进行单独排序,所以排序效率比较高,并非全局有序
    正序:
   
select * from sal sort by salary;

    倒序:
   
select * from sal sort by salary desc;


19、map分发给不同的reduce时,用distribute by 保证同一个时间的信息放在同一个reduce中:
   
select * from sal distribute by sal.ymd sort by salary ;

    distribute by 必须写在 sort by 前面才可正常执行。
    如果distribute by和sort by操作的列是同一列,且排序为升序,可以使用cluster by:
   
select * from sal cluster by salary;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值