hive中对库和表的增删改查操作

1.1创建库

CREATE DATABASE [IF NOT EXISTS] database_name
[COMMENT database_comment]
[LOCATION hdfs_path]
[WITH DBPROPERTIES (property_name=property_value, ...)];

比如

create database test
comment "hive is very perfect!"
location "/test.ccc"
dbproperties("study hard"="much money");

1.2显示数据库 

show databases;

1.3显示数据库信息

desc database db_name;
或者
desc database extended db_name;

1.4切换数据库

use db_name;

1.5修改数据库

可以使用ALTER DATABASE命令为某个数据库的DBPROPERTIES设置键-值对属性值,来描述这个数据库的属性信息。数据库的其他元数据信息都是不可更改的,包括数据库名和数据库所在的目录位置。 

alter database db_hive set dbproperties('createtime'='20220825');

1.6删除数据库

drop database db_name;

如果数据库不为空,可以采用cascade命令,强制删除 

drop database db_name cascade;

2.1创建表

建表语法:

CREATE [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, ...) 
[SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS] 
[ROW FORMAT row_format] 
[STORED AS file_format] 
[LOCATION hdfs_path]
[TBLPROPERTIES (property_name=property_value, ...)]
[AS select_statement]

比如:

create table test
(id int comment "ID",name string comment "Name")
comment "Test table"
row format delimited fields terminated by "\t"
location "/test.bbb"
tblproperties("ha ha"="h h");

2.2 查看表

show tables;

2.3查看表的信息

desc table_name;
desc formatted table_name;

2.4修改表 

重命名表
alter table table_name_old rename to table_name_new;

修改一列
语法:ALTER TABLE table_name CHANGE [COLUMN] col_old_name col_new_name column_type [COMMENT col_comment] [FIRST|AFTER column_name]
如
alter table test change id id string;

添加一列或多列
语法:ALTER TABLE table_name ADD columns(column1_name datatype,column2_name datatype);
如:
alter table test add columns(class,string);

替换列(全部替换,把要保留的列写进去)
ALTER TABLE table_name REPLACE COLUMNS (col_name data_type [COMMENT col_comment], ...) 
如:
alter table test replace columns(id double,name string);

2.5删表 

drop table table_name;

 用查询结果建表

create table table_name as select * from table_name1;

3.内部表和外部表: hive对内部表的元数据和数据都具有管理权限,但对外部表的元数据有管理权限,对数据没有管理权限。(如果创建的时外部表,删表后数据还在。)

创建一张外部表
create external table test(id int,name string)
row format delimited fields terminated by "\t";
向表里传入数据:
load data local inpath "/opt/module/data/student.txt" into table test;

内外部表的转换 

alter table test set tblproperties("EXTERNAL"="TRUE"); //内转外
alter table test set tblproperties("EXTERNAL"="FALSE"); //外转内

4.分区表

hive中的表没有分区时,查找数据会全局扫描,当数据量大时会浪费时间,加上分区后不同区的表存储在不同的文件,访问时可以根据分区访问文件,节省时间。

//创建分区表
create table stu_par
(id int,name string)
partitioned by (class string)
row format delimited fields terminated by '\t';
//向表中插入数据
load data local inpath "/opt/module/data/student.txt" into table stu_par
partition (class="01");        //分区表一定要指定数据插入的分区
//插入数据后可以在hdfs上看到插入的数据文件在/user/hive/warehouse/stu_par/class=01下

查询分区表的分区

show partitions table_name;

如果提前准备了数据,但是hive中没有元数据,查询时还是不能访问,修复方式如下:

方式一:

alter table table_name add partition (分区名=值);

方式二:

msck repair table table_name;

 分区的增删改查

//增加一个分区
alter table table_name add partition(分区名="分区值");
//怎加多个分区(中间用空格隔开)
alter table table_name add partition(分区名="分区值") partition(分区名="分区值");
//删除分区
alter table table_name drop partition(分区名="分区值");
//删除多个分区(删除多个分区时中间用逗号隔开)
alter table table_name drop partition(分区名="分区值"),partition(分区名="分区值");
//查看分区
show partitions table_name;

 

 

 

 

 

 

你可能感兴趣的:(hive,数据库,hadoop)