DDL(数据定义语言)(Hive)

1 库的ddl

1.1 创建库的语法

create database [if not exists] database_name    		--[if not exists]增强代码的健壮性
[comment database_comment]								--库的注释当前库拿来干嘛的
[location hdfs_path]									--可以指定对应的hdfs路径
[with dbproperties(property_name=property_value),...]   --库的属性,几乎没什么用(鸡肋)

1.2 增

create database db_hive
comment 'this is my first db'
with dbproperties('type'='db','owner'='atguigu');

create database db_hive2
location '/db_hive2';

create database db_hive3
location '/dsadsadsad';

create database if not exists db_hive2
location '/db_hive2';

--在你不指定location的情况下 默认在你的hdfs/user/hive/warehouse/下创建一个以database_name.db名的文件夹 来当作库
--在你指定location的情况下 拿最后一级目录当作库的名字(最好做到见名知意)

1.3 查

--展示所有的数据库
show databases;
--模糊展示
show databases like 'db_hive*'
--描述数据库		--不会展示库的属性	dbproperties
desc database 库名
desc database db_hive;
--描述数据库详情  --会展示 库的属性 dbproperties parameters
desc database extended 库名;
desc database extended db_hive;

1.4 切换数据库

use 库名
use db_hive2;

1.5 改

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

alter database db_hive set dbproperties('dbtype'='db'); --修改原来的属性
alter database db_hive set dbproperties('createtime'='2021-09-24');	--增加原来的属性

1.6 删

drop database 库名
drop database db_hive2;

drop database if exists db_hive2; --加上 if exists 增加代码的健壮性

drop database db_hive cascase; --强制删除(当你的库下面有表的时候)慎用(只有你确定所有表都没有用的时候)

2 表的DDL

2.1 创建表的语法

create [external] table [if not exists] table_name --external 如果不加创建的表为内部表,加上后创建的表为外部表
[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 [asd|desc], ...)] into num_buckets buckets --桶内排序字段 分几个桶
[row format delimited]  --表的数据对应格式
[fields terminated by char]  --表所对应的hgfs路径
[tblproperties (property_name=property_value, ...)]  --表对应的属性 非常有用的
[as select_statement]  --更具查询结果来创建一张表 代表的所有结构和数据 唯独不带分隔符
[like table_name]  --模仿一张表 代表的结构不带数据 但是带分隔符

2.2 增

2.1.1 增加内部表(管理表)

内部表的含义:hive掌握着表的生命周期,当在Hive里删除表的时候,会一并把hdfs上的数据给删了,用的比较少  常用于 1.中间表 2.测试表
--内部表测试
create table student(id int,name string)
row format delimited fields terminated by '\t'
--默认分隔符测试
create table test2(id int,name string)
--根据查询结构创建一张表 它虽然会代表的结构和数据 但是分隔符不会带 会使用默认值
create table student2 as select * from student;

--根据查询结构创建一张表 创建一张相同分隔符的
creater table student3 row format delimited fields terminated by '\t' as select * from student;

--根据存在的表的结构来创建一张表 拿不到数据 --他的分隔符和模仿表是一样的
create table student4 like student;

2.1.2 增加外部表

外部表的含义:hive不掌握着表的数据生命周期,当在hive里删除表的时候,不会一并把hdfs上的数据给删了,只会删除元数据,除了上述内部表的情况 全是外部表
create external table if not exists dept(
deptno int,dname string,loc int
)
row format delimited fields terminated by '\t'
location '/company/dept';

create external table if not exist emp(
empno int,ename string,job string,mgr int,hiredate string,sal double,comm double,deptno int
)
row format delimited fields terminated by '\t'
location '/company/emp';

2.1.3 内部表和外部表相互转换

table type:				       external_table
table parameters: enternal     true
表是否为内部表还是外部表是由table parameters 里面的external属性来控制的 包括true和false都得大写
--内部表转换为外部表
alter table student4 set tblproperties('EXTERNAL'=''TRUE);
--外部表转化为内部表
alter table student4 set tblproperties('EXTERNAL'='FALSE');

2.3 查

--展示库下面所有表
show tables;
--描述表
desc student;
--描述表的详情
desc formatted student;

2.4 删

1 删除表
1.1 删除内部表
drop table student;
1.2 删除外部表
drop table dept;  --只能删除元数据 不能删除hdfs上的数据
1.3 清空表
truncate table student3;

清空外部表测试   --不能清空外部表
truncate table emp;  会报错

2.5 改

--该表名 会连同你的hdfs文件夹名字一起改掉
alter table student3 rename to student2;
--更新列 注意改的列的数据类型 只能由小往大改 或者不变
alter table table_name change [column] col_old_name col_new_name column_type [comment col_comment]
[first|after column_name]
create table student(id tinyint,name string) 
row format delimited fields terminated by '\t'
alter table student change column id id int;
alter table student change column id id tinyint;  --这是错的,不能往小的改
alter table student change column id id bigint;
alter table student change column id id bigint;
--增加列
alter table table_name add colcums(col_name data_type [comment col_comment], ...)
slter table stu2 add columns(weight double,hair bigint);
--替换列
alter table table_name replace columns(col_name data_type [comment col_comment], ...)
--替换之减少列 如果你想要替换的时候较少列 那么减少后的剩余部分 应该和之前的字段 满足类型的大小关系
alter table stu2 replace columns(id bigint,name string);
--替换之增加列 增加部分可以没有类型大小关系,如果有对应的部分则满足类型大小的对应关系
alter table stu2 replace columns(id bigint,name string,height double,hair bigint);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值