目录
hive outline
数据库操作
select + as
这种语法效率非常低下(因为多次使用了union all)
select '安徽省' as province,
'合肥市' as city
union all
select '安徽省',
'芜湖市'
union all
select '安徽省',
'安庆市';
create + like
create table s1 like student;
with q1 as (
select s_id,
s_name,
s_sex
from student
where s_id = '07'
)
insert overwrite table s1
select *
from q1;
查看数据库的存储路径
desc database hive_test;
数据库在 HDFS 上的默认存储路径是/user/hive/warehouse/*.db
强制删除不为空数据库
drop database hive_test cascade;
表操作
查看表的类型(内部表、外部表)
desc formatted emp;
查看建表语句
show create table dept;
内部 外部表结构的转化
需求:将内部表转化为外部表
注意:
(‘EXTERNAL’=‘TRUE’)和(‘EXTERNAL’=‘FALSE’)为固定写法,区分大小写!
1.修改外部表emp为内部表(emp为表名)
alter table emp set tblproperties ('EXTERNAL'='FALSE');
2.修改内部表emp为外部表
alter table emp set tblproperties ('EXTERNAL'='TRUE');
删除表 drop
- 可以删除内部表,也可以删除外部表
- 外部表的原数据并没有删除,删除的是元数据
- 内部表的原数据、元数据都被删除
drop table [表名];
如果要删除外部表原数据和元数据
-- 先将外部表转换为内部表
ALTER [外部表名] SET TBLPROPERTIES('EXTERNAL'='FALSE') ;
-- 删除转换后的表
DROP TABLE [表名];
注意:
如果 hdfs 开启了回收站:
drop 删除的表数据是可以从回收站恢复的,表结构恢复不了,需要自己重新创建;
truncate 清空的表是不进回收站的,所以无法恢复 truncate 清空的表,所以 truncate 一定慎用
清除表数据 truncate
- truncate 只能清空内部表数据,不能清空外部表数据
- 清空表数据,表结构依然存在
truncate table emp;
注意:
- Truncate 只能删除内部表数据,不能删除外部表数据
- 清空表数据,表结构依然存在
更改表名
ALTER TABLE table_name RENAME TO new_table_name;
更改表属性
ALTER TABLE table_name SET TBLPROPERTIES (property_name = property_value, ... );
更改表注释
ALTER TABLE student SET TBLPROPERTIES ('comment' = "表注释");
更改表文件存储格式
该操作仅更改表元数据。现有数据的任何转换都必须在Hive之外进行
ALTER TABLE table_name SET FILEFORMAT file_format;
更改表的存储位置路径
ALTER TABLE table_name SET LOCATION "new location";
列操作
添加列
-- 使用ADD COLUMNS,您可以将新列添加到现有列的末尾但在分区列之前
alter table [表名] add columns([列名1] [类型],[列名2] [类型]);
修改列数据类型
只能高级转低级 例如 decimal 转 string,不能 string 转 decimal
alter table [表名] change column [旧列名] [新列名] [类型];
-- 示例
alter table order_info change column skuid skuid string;
修改或添加列注释
-- 语法
alter table table_name change column column_name column_name data_type comment 'new_comment';
-- 示例
alter table order_info change column skuid skuid string comment 'skuid的新备注';
修改的名称
alter table order_info change column old_skuid new_skuid string