一、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