接下来,我们了解一下hive的数据定义语言
Hive作为一个“数据库”,在结构上积极向传统数据库看齐,也分数据库(Schema),每个数据库下面有各自的表组成。
1.Hive在HDFS上的默认存储路径
Hive的数据都是存储在HDFS上的,默认有一个根目录,在hive-site.xml中,由参数hive.metastore.warehouse.dir指定。默认值为/user/hive/warehouse。启动hive的时候,默认有一个default数据库,数据存储在warehouse里面。
CREATE DATABASES[IF NOT EXISTS]database name --指定库名
[COMMENT 'database_comment'] --指定库的描述信息
[LACATION hdfs_path] --指定在hdfs对应的目录
[WITH DBPREPERTIES('dbname'='mydb','createtime'='2023-04-25')]; --指定库的附属信息
1.显示所有的数据库
show databases;
2.模糊查询,就是想查询具体某一个数据库,但是只记得一部分了,可以这样做
show databases like 'my*';
3.查看数据库的相关信息
decs database db_name;
desc database [extended] db_name; --extended:可选,可查询数据库的信息中显示属性
4.切换使用数据库
use db_name;
5.修改数据库
用户可以使用alter databases命令来修改数据库的某一些信息。其中能够修改的信息包括dbproperties,location,owner user。需要注意的是:修改数据库location不会改变当前已有表的路径信息,而只是改变后续创建的新表的默认的父目录
alter database db_name set dbproperties('createtime'='2021-4-26');
alter database db_name set location hdfs_path;
alter database db_name set owner user user_name;
查看:desc database extended db_name;
6.删除数据库
注意所删除的数据库下面不能有表。
drop database db_name;
7.有表也强制删除
drop database db_name cascade;
8.if not exists | if exists
前面是创建库表的时候使用,后者删除的时候使用,由于判断hive是否有该数据库,如果没有则创建,如果有则删除。
create database if not exists db_name;
drop database if exists db_name;
首先在建表的时候必须先明确自己在那个库,如果不在自己想要的库,则需要use切换库。
1.普通建表
create [temporary][external] table [if not exists ]table_name
[(col_name data_type [comment col_comment],...)] 指定类名,列类型,列描述信息。
[comment table_comment] 指定表的描述信息
[partitioned by (col_name data_type [comment col_comment],....)]
[clustered by (col name,col name,...)]
[sored by(col_name[ASC |DESC],...)] into num_buckets buckets]
[row format delimited fields terminated by 分隔符] 指定每行数据中的每个元素分隔符
[collection items terminated by] 指定集合的元素分隔符
[map keys terminated by ] 指定map的kv分割符
[lines terminated by ] 指定行分隔符
[stored as file_format] 指定表数据的存储格式
[location hdfs_path] 指定表对应的hdfs目录
[telproperties (键值形式)]; 指定表的附属信息
其中:
[temporary] 临时表,该表当前会话可预见,会话结束表被删除
[external]表示创建外表,不加为内表
[patitioned] 指定分区表信息 分区是分目录
[clustered by] 指定分桶表
[stored as] 指定文件的格式,常用的格式有,textfile(默认值),sequence file,orc file,parquet file等等
2.create table as select(ctas) 建表
使用select查询语句返回的结果,直接建表,表的结构和查询语句的结构保持一致,且包含查询结构(只允许创建内部表)
create [temporary] table [if not exists ]table_name
[comment table_comment]
[row format]
[stored as]
[location hdfs_path]
[telproperties (键值形式)]
[as select_statement]
3.create table like 语法
改语法允许用户复刻一张已经存在的表结构,与上述的ctas语法不同,该语法创建出来的表不包含数据
create [temporary][external] table [if not exists]
[db.name]table_name
[like exist_table_name]
[row format]
[stored as]
[location hdfs_path]
[telproperties (键值形式)]
4.查看所有表
show tables [in database_name] [like i*]; --like 用于模糊查询
5.查看表结构
desc [extended | formatted] tb_name;
--extended: 展示详细的信息
--formatted:对详细的信息进行可视化展示
6.修改表名
alter table tb_name rename to new_tb_name; --只是修改表的元数据信息,不会改变数据
7.修改表的属性
alter table tb_name set tblproperties(property_name=property_value,...);
8.修改列信息
1.更新列,修改数据表中列的名称,描述,数据类型,或者列的位置,语法如下
alter table tb_name change[column]col_name col_new_name
col_type [comment col_comment][first|after column_name];
2.增加列 可以增加很多列,从最后添加
alter table tb_name add columns (col_name col_typr,...);
3.替换列 将表中所有的列全部替换,注意替换时,对应的列的类型不能够由大变小
alter table tb_name replace columns (col_name col_typr,...);
注意:以上只是修改了hive表的元数据信息,hdfs中存储的数据并没有改变
9.删除数据表
drop table【if exists】tb_name;
truncate table tb_name; 只对内部表有效