# 1. 写删除脚本,一共需要删除10张表
[root@hadoop01 tmp]# vi delete_hive_table.sh
#! /bin/bash
mysql -ucindy -p123 hive -e"
delete FROM PARTITION_PARAMS WHERE PART_ID=$4;
delete FROM PARTITION_KEY_VALS WHERE PART_ID=$4;
delete FROM PARTITIONS WHERE TBL_ID=$1;
delete FROM PARTITION_KEYS WHERE TBL_ID=$1;
delete FROM TABLE_PARAMS WHERE TBL_ID=$1;
delete FROM TBLS WHERE TBL_ID=$1;
delete FROM SERDE_PARAMS WHERE SERDE_ID=$5;
delete FROM SERDES WHERE SERDE_ID=$5;
delete FROM SDS WHERE SD_ID=$2;
delete FROM COLUMNS_V2 WHERE CD_ID=$3;"
# 2. 给脚本添加可执行权限
[root@hadoop01 tmp]# chmod +x delete_hive_table.sh
# 3. 执行删除脚本,传入前面拿到的五个ID
[root@hadoop01 tmp]# ./delete_hive_table.sh 56 71 56 16 71
Hive 版本:hive-1.1.0-cdh5.7.0-bin
Hive 元数据的表结构
Hive在MySQL上的相关元数据表关系图:
1. 版本表
1.1 VERSION表,存储hive的版本
注意:VERSION表有且只能有一条数据,Hive-Clie才能正常进入。生产中应监控表数据条数,大于一则删除新进来的数据(crontab或者trigger)。
2. 数据库信息表
2.1 DBS表,存储Hive中所有数据库的基本信息。
2.2 DATABASE_PARAMS表,存储数据库的相关参数,在CREATE DATABASE时调用。
DBS和DATABASE_PARAMS这两张表通过DB_ID字段外键关联。
3. hive表和视图描述表
3.1 TBLS表,存储Hive表、视图、索引表的基本信息
3.2 TABLE_PARAMS表,存储表、视图的属性信息
numRows
EXTERNAL
3.3 TBL_PRIVS,存储表、视图的授权信息
这三张表通过TBL_ID关联。
4. 文件存储类型信息表
这些表主要跟hive文件存储类型相关,HDFS支持各种文件格式,hive建表的时候也可以指定文件格式。这样Hive在将HQL解析成MapReduce的时候,可以指定去哪里,使用哪种格式去读写HDFS文件。
4.1 SDS表 记录文件存储的基本信息,如输入格式、输出格式,是否压缩等。
4.2 SD_PARAMS表,记录hive存储的相关属性,在创建表时使用
4.3 SERDES表,记录存储序列号使用的类信息
4.4 SERDE_PARAMS表,记录序列化的一些属性和格式信息,比如行、分隔符等
5. 表字段信息表
5.1 COLUMNS_V2
6. 分区信息表
6.1 PARTITIONS,分区基本信息表
6.2 PARTITION_KEYS,分区字段信息表
6.3 PARTITION_KEY_VALS,分区字段值表
6.4 PARTITION_PARAMS,分区属性信息表
7. 其他不常用的表
DB_PRIVS:数据库权限信息表。通过GRANT语句对数据库授权后,将会在这里存储; IDXS: 索引表; INDEX_PARAMS:索引参数/属性表; TAB_COL_STATS:表字段的统计信息表。使用ANALYZE语句对标字段分析后记录在这里; TBL_COL_PRIVS:表字段的授权信息表; PART_PRIVS:分区授权信息表; PART_COL_STATS:分区字段的统计信息表; PART_COL_PRIVS:分区字段的权限信息表; FUNCS:用户注册的函数信息表; FUNCS_RU:用户注册函数的资源信息表。
8. 示例
8.1 Hive中新建一张表
建表语句执行雨后,metadaba发生了如下变化 TBLS
TABLE_PARAMS
SDS
SERDE_PARAMS
COLUMNS_V2
PARTITION_KEYS
8.2 再向刚建的表里导入数据
数据导入以后,下面的metadata会发生变化: PARTITIONS
SDS
注意:这里的存储和表的存储是不同的,因为每个分区也会有一个SD
PARTITION_KEY_VALS
PARTITION_PARAMS
8.3 通过删除metadata来删除hive中的表
第一步,查看要删除的表的基本信息,确定是一张分区表
第二步:根据表名字,通过查询TBLS表获得TBL_ID和SD_ID
第三步:拿SD_ID去SDS表里查询得到CD_ID和SERDE_ID
第四步:拿TBL_ID去PARTITIONS表里拿到PART_ID
这样一共得到了五个ID:
最后一步,删除表
删除完成以后,再去执行上面8.1和8.2步骤中的查询语句,依次检查,metadata里面已经没有刚创建表的任何数据了,删除完成。
参考:https://www.cnblogs.com/1130136248wlxk/articles/5517909.html