Hive--->DDL语句
查询数据库
显示数据库
- 显示数据库:
show databases;
- 过滤显示查询的数据库:
show database linke 'db_hive';
查看数据库详情
- 显示数据库信息:
desc database db_hive;
- 显示数据库详细信息:
desc database extended db_hive;
- 切换当前数据库:
use db_hibe;
修改数据库
- 可以使用alter database命令为某个数据库的dbproperties设置键值对属性,来描述这个数据库属性信息:
alter database db_hive set dbproperties('createtimr'='2020-11-29');
- 查看修改结果*
desc database extended db_hive;
删除数据库
- 删除空数据库:
drop database db_hive;
- 删除的数据库不为空,强制删除:*
drop darabase db_hive cascade;
创建表
建表语句
语句使用
CREATE [EXTERNAL] TABLE [IF NOT EXIST] 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],...)] INFO num_buckets BUCKETS]
[ROW FORMAT row_format]
[STORED AS file_format]
[LOCATION hdfs_path]
字段解释
-
CREATE TABLE创建一个指定名字的表,如果名字相同抛出异常,用户可以使用IF NOT EXIST来忽略异常
-
EXTERNAL关键字可以创建一个外部表,在建表的同时指定一个实际数据的路径(LOCATION),hive在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据
-
COMMENT是为表和列添加注释
-
PARTITIONED BY是分区表
-
CLUSTERED BY 是建分桶
-
SORTED BY不常用
-
STORED AS 指定存储文件类型
-
LOCATION指定表在HDFS上的存储位置
-
LIKE允许复制现有的表结构但是不复制数据
建表时的分隔符设置
字段分隔符
- 在我们的数据分布是如下情况是可以使用字段分隔符来进行分割
字段
张三,男,19
create table StuInfo(
name string,
gender string,
age int
)
row format delimited fields terminated by ',';
集合分隔符
字段
中国,北京:上海:广州:深圳
create table city(
country string,
city string
)
row format delimited fields terminated by ','
collection items by ':';
KV分隔符
字段
张三,唱歌:非常喜欢-跳舞:喜欢-游泳:一般般
create table student
(id int,name string,
hobby map<string,string>
)
row format delimited fields terminated by ‘,’
collection items terminated ‘-’
map keys terminated by ‘;’;
hive中外部表和内部表的区别
- 创建外部表
create external table if not exists default.dept(
deptno int,
dname string,
loc int
)
row format delimited fields terminated by '\t'
location '/test';
- 区别:外部表表被删除了但是元数据不会被删除,和内部表不一样,并且只要外部表的数据和元数据只要存在一个就算表没有了也可以读取(使用select语句),数据和元数据俩者关联不大
内外部表的转换
- 查询表的类型:
desc formatted test;
- 修改内部表为外部表:
alter table test set tblproperties("EXTERNAL'='TRUE');
- 修改外部表为内部表:
alter table test set tblproperties("EXTERNAL'='FALSE');
- 注意:修改时时区分大小写的,不要写成小写的,是大写的
修改删除表
- 表的重命名:
ALTER TABLE TABLE_NAME RENAME TO NEW TABLE_NAME
- 添加列:
alter table table_name add columns(id int);
- 更新表:
alter table table_name change column id desc int;
- 替换列:
alter table table_name replace columns(no string,name string,loc string);
- 删除表:
drop table table_name;