Hive支持标准SQL,同时又有自己的特点,属于方言版SQL。Hive的ddl主要包含对于数据库和表的查询、创建和删除。dml包含数据查询和插入,其中插入有load和insert两种方式,针对于4种表的特点有不同的插入方式。
一、ddl : data define language
库:
创建库:create database dname;
切换库:use dname;
查询库列表:show database; show database like 'dname*';
查询正在使用的库:select current_database();
查询库的详细信息:desc database dname;
删除库:drop database dname [cascade]; # 若库中有表存在,需要添加cascade
表:
1. 创建
Hive表的创建共有三种方式:create、CTAS、like
1)create
create [external] table [if not exists] tname(col_name data_type)
[partitioned by (col_name data_type)]
[(clustered by (col_name, col_name, ...))
[sorted by (col_name [ASC | DESC], ...)] into num_buckets buckets]
[row format row_format]
[location hdfs_path]
[解析]:
1)[external]:外部表关键字。不加默认创建内部表(又名管理表)
若数据已经存储在HDFS上,需要使用Hive去做数据分析,并且该数据还可能使用其它
数据引擎做计算,此时应该选择外部表。
2)[partitioned by (col_name data_type)]:
partitioned by 创建分区表关键字。后边的分区字段可以是一个或多个。
[注意] 分区字段不可以出现在建表字段中。Hive中每个分区以文件夹的形式单独存放在表
文件夹的目录下,分区以字段的形式存放在表结构中,但该字段不存放实际内容,
仅仅是分区的表示。
3)[(clustered by (col_name, col_name, ...))
clustered by 创建分桶表关键字。分桶字段可以一个或多个。
[注意] 分桶字段必须是建表字段中的某个字段。
[sorted by (col_name [ASC | DESC], ...)] 指定桶中排序规则
into num_buckets buckets] 分桶个数。Hive采用对列值Hash,然后对桶的个数求余的方
式确定该条记录存放在哪个桶中。
4)[row format row_format]:指定分隔符
列分隔符:fields terminated by ','
行分隔符:lines terminated by '\n' # 一般不需要指定
元素分隔符:items terminated by '\t' # 通常字段中存在map、array等复杂结构时使用
5)[location hdfs_path]:指定Hive当前所建表的数据存储路径(HDFS上的路径)
若指定location,则相当于将该数据与Hive表做了关联。若不指定location,则会将该数
据移动至Hive表的创建目录中。通常情况下,若需要指定location,则创建外部表。内部表最
好不要指定存储路径。
2)CTAS
将另一个表中查询的数据保存到新建的表中。
Create Table tname As Select ... from ...
3)like
复制表。只复制表结构,不复制表中的数据。
create table tname like old_tname;
2. 查看
查看表列表:show tables; show tables in db; show table like '*';
查看建表语句:show create table tname;
查看表详细信息:desc [extended / formatted] tname;
查看表的分区信息:show partitions tname;
3. 修改
修改表名称:alter table tname rename to new_tname;
修改表字段:alter table tname add columns (col_name, col_type) # 添加列
alter table tname change col_name new_col_name col_type; # 修改列
修改分区:p代表分区字段
alter table tname add partition(p='aa') partition(p='bb')... [location '/user/hive/ptn'] # 添加分区 [可以指定分区路径]
alter table tname drop partition(p='aa') # 删除分区
4. 删除
清空表:truncate table tname;
删除表:drop table tname [cascade];
视图:
1. Hive中只有逻辑视图,没有物化视图
2. Hive中的视图仅仅相当于一条查询语句的快捷方式
3. Hive中的视图只支持查询,在执行查询时才开始执行视图对应的那些子查询
4. 视图会将自己代表的SQL语句存储在元数据库中
1. 创建视图:create virw view_name as select ...;
2. 查看视图:show tables; desc view_name;
3. 删除视图:drop view view_name;