1、把本地文件上传到hdfs:
2、统计表中dept_name个数
3、新建一个跟b一样的表结构的a表:
4、新建一个表,带分区:
(1)
分区查询:
(2)
5、表重命名:
6、修改列信息:
可修改列名,比如:
增加列:
7、通过查询语句向表中插入数据:
覆盖之前有的内容:
在之前内容后追加,不覆盖:
8、创建分区表:
有overwrite时,会把之前的表覆盖,没有时,表内容追加。
9、指定 多个输出文件夹目录:
#/home/kun/2016-5-7 的路径为hdfs上的路径,而非本地路径。
10、查询语句:
Array数组索引是基于0的,eg:
同时,提取出来的string数据类型的值将不再加引号。
为了引用Map元素,用户还可以使用Array的语法,但是使用的是键值,而表示整数索引,eg:
为了引用Struct中的一个元素,用户可以使用“点”符号,类似于前面提到的“表的别名.列名”,eg:
11、可以通过设置属性hive.map.aggr值为true来提高聚合的性能:
可提高执行效率。
12、limit子句用于限制返回的行数,在select最后加上limit 2 就表示 返回2行数据。
13、case... when... then...的使用:
14、比较float类型的数据时,如salary>20000.0 可以写成salary>cast(20000.0 as float)
否则会出现salary=20000.0的值也出现在>的范围里。
cast(value as type)是显示的类型转换。
补:将string类型转换为binary类型:
15、like和rlike:
16、group by 和 having:(group by 后有哪些列,表中就包含哪些列,其余列自动剔除。)
17、JOIN语句:on指明了2个表建立连接的条件
hive暂不支持on子句中的谓语动词间使用or只可使用and。
笛卡尔积Join:结果返回两张表行数的乘积条信息,比如左标5条信息,右表3条信息,结果就是15条信息
map-side Join 不仅可以减少reduce过程,有时还可以减少map过程的执行步骤,加快执行速度:
0.7版本后直接使用
就可以了,不用再加这个标记。
18、排序: hive中使用sort by 来替代order by
sort by 是对每一个reduce中数据进行单独排序,所以排序效率比较高,并非全局有序
正序:
倒序:
19、map分发给不同的reduce时,用distribute by 保证同一个时间的信息放在同一个reduce中:
distribute by 必须写在 sort by 前面才可正常执行。
如果distribute by和sort by操作的列是同一列,且排序为升序,可以使用cluster by:
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;