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;