内部表与外部表之间的转化
alter table 表名 set dbproperties('EXTERNAL' = 'TRUE') -> 注意区分大小写这里必须为大写
修改表
重命名
alter table table_name rename to table_name1(新表的表名须不存在)
增加/修改/替换列信息
更新列
alter table table_name change col_old_name col_new_name column_type(修改列信息)->注意string不能再转换成其他类型
alter table table_name add/replace columns (col__name col_type)->替换是表示替换表中所有字段
DML数据操作
向表中装载数据(load)
1)语法
load data [local] inpath '数据的path' [overwrite] into table table_name
local:表示从本地加载数据到hive表,否则从HDFS加载数据到hive表
overwrite:表示覆盖已有数据,否则表示追加
insert查询导入(从将一张表中的查询结果导入另一张表)
insert into/overwrite[table] table_name select * from table_name1
as select(创建表并加载数据)
create table if not exists table_name ad select id,name from table_name1;
location(指定数据在hdfs的位置)
create table if not exists table_name (id string,name string) row format delimited fields terminated by '\t' location '/path';
truncate(清空表,只删hdfs上数据)->并不能清空外部表
truncate table table_name;
查询语句
select name,salary+/-/*//1000 from student;
常用函数
1)求总行数(count)
select count(*) [as] cnt(取别名) from table_name;
2)求最大值(max)
select max(sal) from table_name;
3)求最小值(min)
select min(sal) from table_name;
4)求总和(sum)
select sum(sal) from table_name;
5)求平均值(avg)
select avg(sal) from table_name;
比较运算符
操作符
A=B
A>B
A>=B
A<B
A<=B
A [not] between B and C [B,C]
实例:
select * from student where sal between 200 and 1000;
select * from student where sal is [not] null;
select * from student where sal in (1500,5000) and/or sal > 1000 ;(只能找到工资为1500或者5000的人)
Like
1)使用like运算选择类似的值
2)选择条件可以包含字符和数字:
% 代表零个或多个字符(任意个字符)
_ 代表一个字符
3) rlike字句
rlike字句是hive中这个功能的一个扩展,其可以通过java的正则表达式这个更强大的语言来指定匹配条件
select * from student where ename like 'A%' (ename 为a开头的)
select * from student where ename like '_A%'(第二个字母为a的)
select * from student where ename rlike [A](包含A的)
group by:一般和函数一起使用
//平均薪资大于2000的部门及部门平均薪资
select deptno,avg(sal) avg_sal from emp group by deptno having avg_sal > 2000; 这里不能用where,where后面不能用别名且where在group之前生效,having在group后生效
嵌套查询
select deptno,avg_sal from (select deptno,avg(sal) avg_sal from emp group by deptno)t1 where avg_sal>2000;
join连接
select
e.empno, 指明表时效率更高
e.ename,
from
emp e 使用表的别名可以简化查询
join
dept d
on e.deptno = d.deptno;