一、Hive数据存储
1、底层数据
底层数据存储在分布式存储(HDFS)中。
2、元数据
元数据信息维护在MetaStore。
Hive默认使用的元数据存储数据库是Derby,Derby不支持多个客户端同时访问,所以需要对Derby进行替换,一般常用MySQL替换Derby。
二、Hive相关元数据表
1、Hive版本表
(1) version表
字段 | 含义 |
---|---|
VER_ID | id主键 |
SCHEMA_VERSION | Hive 版本 |
VERSION_COMMENT | 版本说明 |
2、数据库表
(1) DBS表
字段 | 含义 |
---|---|
DB_ID | 数据库ID |
DESC | 数据库描述 |
DB_LOCATION_URI | 数据库HDFS路径 |
NAME | Hive数据库名 |
OWNER_NAME | Hive数据库所有者用户名 |
OWNER_TYPE | Hive所有者角色 |
3、表和视图表
(1) TBLS表
字段 | 含义 |
---|---|
TBL_ID | 表ID |
CREATE_TIME | 创建时间 |
DB_ID | 数据库ID |
LAST_ACCESS_TIME | 上次访问时间 |
OWNER | 所有者 |
RETENTION | 保留字段 |
SD_ID | 序列化配置信息 |
TBL_NAME | 表名 |
TBL_TYPE | 表类型 |
VIEW_EXPANDED_TEXT | 视图的详细HQL |
VIEW_ORIGINAL_TEXT | 视图的原始HQL |
(2) TTABLE_PARAMS表
字段 | 含义 |
---|---|
TBL_ID | 表ID |
PARAM_KEY | 表属性名 |
PARAM_VALUE | 表属性值 |
4、文件存储表
(1) SDS表
字段 | 含义 |
---|---|
SD_ID | 存储信息ID |
CD_ID | 字段信息ID |
INPUT_FORMAT | 文件输入格式 |
IS_COMPRESSED | 是否压缩 |
IS_STOREDASSUBDIRECTORIES | 是否以子目录存储 |
LOCATION | HDFS路径 |
NUM_BUCKETS | 分桶 |
OUTPUT_FORMAT | 文件输出格式 |
SERDE_ID | 序列化类ID |
(2) SERDES表
字段 | 含义 |
---|---|
SERDE_ID | 序列化类配置ID |
NAME | 序列化类别名 |
SLIB | 序列化类 |
(3) SERDE_PARAMS表
字段 | 含义 |
---|---|
SERDE_ID | 序列化类配置ID |
PARAM_KEY | 属性名 |
PARAM_VALUE | 属性值 |
5、字段表
(1) COLUMNS_V2表
字段 | 含义 |
---|---|
CD_ID | 字段信息ID |
COMMENT | 字段注释 |
COLUMN_NAME | 字段名 |
TYPE_NAME | 字段类型 |
INTEGER_IDX | 字段顺序 |
6、分区表
(1) PARTITIONS表
字段 | 含义 |
---|---|
PART_ID | 分区ID |
CREATE_TIME | 分区创建时间 |
LAST_ACCESS_TIME | 最后一次访问时间 |
PART_NAME | 分区名 |
SD_ID | 分区存储ID |
TBL_ID | 表ID |
(2) PARTITION_KEYS表
字段 | 含义 |
---|---|
TBL_ID | 表ID |
PKEY_COMMENT | 分区字段名说明 |
PKEY_NAME | 分区字段名 |
PKEY_TYPE | 分区字段类型 |
INTEGER_IDX | 分区字段顺序 |
(3) PARTITION_KEY_VALS表
字段 | 含义 |
---|---|
PART_ID | 分区ID |
PART_KEY_VAL | 分区字段值 |
INTEGER_IDX | 分区字段顺序 |
(4) PARTITION_PARAMS表
字段 | 含义 |
---|---|
PART_ID | 分区ID |
PARAM_KEY | 分区属性名 |
PARAM_VALUE | 分区属性值 |
三、应用
1、根据传入的tablename删除元数据所有信息
(1) 存储过程:
存储过程名字为t1,输入为tbl_id
DELIMITER // drop procedure if exists t1; create procedure t1 ( in tbinput int) begin declare v_sd_id int ; declare v_part_id int ; declare v_cd_id int ; declare v_serde_id int ; select tbinput; select SD_ID into v_sd_id from tbls where TBL_ID = tbinput; select part_id into v_part_id from partitions where tbl_id = tbinput; select cd_id , serde_id into v_cd_id,v_serde_id from sds where sd_id = v_sd_id; select v_sd_id,v_part_id,v_cd_id,v_serde_id; if v_part_id is not null then delete from partition_params where part_id = v_part_id; delete from partition_key_vals where part_id = v_part_id; end if; delete from serdes where serde_id = v_serde_id; delete from serde_params where serde_id = v_serde_id; delete from columns_v2 where cd_id = v_cd_id; delete from sds where sd_id = v_sd_id; delete from partitions where tbl_id = tbinput; delete from partition_keys where tbl_id = tbinput; delete from table_params where tbl_id = tbinput; delete from tbls where tbl_id = tbinput; end ; // delimiter ; mysql> call t1(tbl_id);
(2) shell封装:
hive_mysql_delete.sh #!/bin/bash source /usr/local/mysql/.bash_profile mysql -uroot -p密码 hive数据库 -e " SET FOREIGN_KEY_CHECKS = 0; call t1(tbl_id); SET FOREIGN_KEY_CHECKS = 1; quit" >> /tmp/mysql_delete.log
作者:YBCarry_段松啓
链接:https://juejin.cn/post/7009329042746769415
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦