这篇文章主要介绍了怎么从MySQL数据库中删除Hive元数据,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
Hive上所有元数据均保存在RDBMS中,所以删除RDBMS中的Hive的元数据,不会影响HDFS上的数据。目前针对MySQL数据库进行分析。
Hive在MySQL数据库中的相关元数据的关系图:
解决办法:先MySQL的库中建个存储过程P_TBL_DATA_DEL后,执行该存储过程就可以了。
存储过程脚本:
DELIMITER $$
DROP PROCEDURE IF EXISTS P_TBL_DATA_DEL$$
CREATE PROCEDURE P_TBL_DATA_DEL(
i_tbl_id int -- 表ID
,outo_outcode integer -- 输出代码
,outo_outmsg varchar(500) -- 输出信息
)
COMMENT '从MySQL数据库中删除Hive元数据'
label_pro:
BEGIN
-- =========================== 声明变量 ===========================
-- 自定义变量
DECLARE v_sd_id int ; -- 存储配置ID SDS: 该表保存文件存储的基本信息
DECLARE v_part_id int ; -- 分区ID PARTITIONS:该表存储表分区的基本信息
DECLARE v_cd_id int ; -- 表字段信息ID COLUMNS_V2:该表存储表对应的字段信息
DECLARE v_serde_id int ; -- 序列化类配置ID SERDES:该表存储序列化使用的类信息
DECLARE v_tbl_id int ; -- 表ID 用于接收输入参数
-- =========================== 声明异常 ===========================
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
ROLLBACK;
-- 发生异常后的返回值
set o_outcode =-1;
set o_outmsg ='failure';
end ;
-- =========================== 变量初始化 ===========================
-- 判断输入的表ID是否为NULL,并进行赋值
IF i_tbl_id IS NOT NULL then
SET v_tbl_id = i_tbl_id ;
ELSE -- 否则默认赋值0
SET v_tbl_id = 0 ;
END IF ;
-- =========================== 业务处理 ===========================
-- START TRANSACTION;
-- todo begin
-- 根据表ID获取 存储配置ID(SDS.SD_ID)
select
SD_ID
into
v_sd_id
from tbls
where TBL_ID = v_tbl_id
;
-- 根据表ID获取 分区ID(PARTITIONS.part_id)
select
part_id
into
v_part_id
from partitions
where tbl_id = v_tbl_id
;
-- 根据存储配置ID(SDS.SD_ID)获取 表字段信息ID(COLUMNS_V2.cd_id)和序列化类配置ID(SERDES.serde_id)
select
cd_id
,serde_id
into
v_cd_id
,v_serde_id
from sds
where sd_id = v_sd_id
;
-- 删除表属性信息数据
delete from table_params where tbl_id = v_tbl_id;
-- 删除表信息数据
delete from tbls where tbl_id = v_tbl_id;
-- 删除文件存储的基本信息数据
delete from sds where sd_id = v_sd_id;
-- 删除存储序列化属性信息数据
delete from serde_params where serde_id = v_serde_id;
-- 删除存储序列化使用的类信息数据
delete from serdes where serde_id = v_serde_id;
-- 删除表的字段信息数据
delete from columns_v2 where cd_id = v_cd_id;
-- 判断是否v_part_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 partitions where tbl_id = v_tbl_id;
-- 删除分区字段信息数据
delete from partition_keys where tbl_id = v_tbl_id;
-- todo end
-- COMMIT;
-- 处理成功后的返回值
set o_outcode =0;
set o_outmsg = 'succe' ;
END
$$
DELIMITER ;
感谢你能够认真阅读完这篇文章,希望小编分享的“怎么从MySQL数据库中删除Hive元数据”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网行业资讯频道,更多相关知识等着你来学习!