1、创建表的方式
1、普通方式:(默认字段分割符是ascii码的控制符\001,默认存储方式是textfile);
语法:create [external] table [if not exists] table_name( col_name data_type comment col_comment,...)
[comment table_comment] -- 表的描述
[partitioned by (col_name data_type,...)] -- 分区表(分区字段一定不要在表字段中出现)
[
clustered by(col_name) -- 指定分桶字段(分桶字段必须是表字段中的一部分)
[sorted by(col_name [ASC|DESC]),...] -- 是否分桶有序,如有序,则按照哪个字段排序
into num_buckets buckets -- 指定分桶个数
] 分桶
[row format delimited fields terminated by '\t' lines terminated by '\n'] -- 行列分隔符
[stored as file_format] -- file_format(textfile:普通的文本文件格式(默认);sequenceFIle:序列化文件;...)
[location hdfs_path] -- 创建表(不管内部表或外部表)的时候可以指定表的路径,不管是内部表还是外部 表,都可以指定hdfs的存储路径;最佳实战:如果一份数据已经存储在hdfs上,并且要被多个用户或客户端使用,最好创建外部表,反之创建内部表;如果不指定则存储在默认的目录默认的仓库中
[tblproperties (name=value)]
2、CTAS(CREATE TABLE AS SELECT);
create table page_view_ctas stored by rcfile
as
select * from page_view sort by viewTime,userid;
注意:创建的表不能是外部表、分区表、桶表;sql会执行MR作业。
3、LIKE(与ctas的区别,like只是拷贝表结构不复制表的数据,ctas拷贝结构和数据执行mr);
create table page_view_like like page_view;
2、例子
a、数据库和表相关操作(DDL)
1、库:
show databases; # 查看某个数据库
show databases like 'hive*';
use 数据库;# 进入某个数据库
select current_database(); # 查看当前使用的库
desc database [extended] 数据库;# 查询库的详细信息
desc database db_name;# 查询库的详细信息
drop database 数据库; # 删除数据库(前提:里面有表时删除不掉的)
drop database 数据库 restrict;//默认方式(不急连删除)
drop database 数据库 cascade;//级联删除一个非空的数据库
2、表:
show tables;# 展示所有表
desc table_name;# 显示表结构
desc extended table_name;# 显示表结构
desc formatted table_name;
show create table table_name; # 显示创建表的结构
show partitions 表名; show partitions 表名 partition(city="beijing"); # 查看hive表的分区
show functions; 查看hive函数列表
desc function function_name; 查看hive函数使用
desc function extended function_name; 查看hive函数使用
truncate table table_name; # 清空表数据
show tables in hive; # 查看库中表
drop table table_name; #删除表