DDL数据定义
CREATE DATAbase [IF NOT EXISTS] database_name [COMMENT database_comment] [LOCATION hdfs_path] [WITH DBPROPERTIES (property_name=property_value, ...)];
在hive中创建一个数据库 默认路径是在/user/hive/warehouse/…
路径下的 当让可以通过 location进行更改
例子:
hive (default)> create database db_hive2 location '/db_hive2.db';
数据库显示
hive> desc database db_hive; OK db_hive hdfs://hadoop102:9820/user/hive/warehouse/db_hive.db rootUSER
显示详情信息的话可以加入extended关键字~
hive> desc database extended db_hive;
切换数据库
这个就不用过多赘述了吧
use databaseName;
修改数据库
alter database DatabaseName set dbproperties(createtime="2023-02-12");
这时候就可以通过详情信息查询了
desc database extended DatabaseName
删除数据库
drop database DatabaseName;
不过前面最好加个if exists判断是否存在
drop database if exists DatabaseName;
tip:如果数据库中有表 则无法删除 需要加入cascade关键字 来进行层级删除
drop database if exists DatabaseName cascade;
管理表
默认所有创建的表都是管理表 这种表由Hive进行控制数据的整个生命周期 通俗来说就是当管理表删除某些数据时会在hdfs中也删除 然后你就找不到这条数据了~ 因此管理表不适合与其他工具一起使用 这时候就需要外部表
外部表
需要使用EXTERNAL关键字 举个例子
create external table test(id string);
酱紫一个外部表就创建好了 那么外部表有什么作用呢
简单来说就是当你删除数据时 只会删除metastore中的元数据不会删除hdfs中的数据 也就是说你仍让可以在hdfs中查到该数据 再者你也可以通过当时的建表语句建表 然后进行查询 你会发现查询时数据仍然存在!!!
内外部表相互转换
当你创建表时忘记将表设置为外部表时该咋办呢 很简单和修改表类似 只不过dbproperties改为tblproperties就可以了 同时设置EXTERNAL属性 切记!属性名要为大写!
来个例子
首先查询表的类型
desc formatted test; Table Type: MANAGED_TABLE
alter table test set tblproperties("EXTERNAL"="TRUE");
反之若想将外部表该为内部表(管理表)只需要将True改为False
建表时指定分割符
先来几个英语单词
fields : 字段
terminated : 终止
create table test2(id int,name string) row format delimited fields terminated by "t";
上述sql表示两个 字段之间用tab键分离 那有同学问了 如果不是按照tab键呢 按照“,” 比如我通过hadoop fs -put提交呢?
那么有可能是Null 因为当一个文件中如果没有tab分开
它默认就是一个长度为一的数组 且定义的一个类型为int类型
一些乱七八糟的东西可能就无法进行转换 所以就有可能是null
修改&&删除表
删除表
drop table table_name;
重命名表
alter table table_name rename to new_table_name;
修改字段及属性
alter table table_name replace columns (new_field,column_type);
注意使用replace 是针对整张表进行操作 也就是说通过replace可以完成增删改的操作
alter table table_name change old_column_name new_column_name column_type
而通过change则是对当前列而言
增加列
alter table table_name add columns (column_name,column_type);
无需赘述了吧~
tip:这些操作都是对元数据进行操作 不会对hdfs问价进行修改的!
好了 这篇文章就水到这里了



