您好,登錄后才能下訂單哦!
這篇文章主要介紹了怎么從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
/*======================================================================
* 交 易 名 稱 : 從MySQL數據庫中刪除Hive元數據
* 功 能 概 述 :
* 輸 入 表 :
* 輸 出 表 :
*
* 文 件 名 稱 : P_TBL_DATA_DEL.sql
* 設 計 : 設計時間:
* 開 發 : wg 開發時間: 2018-07-31 15:06
*
* 測 試 代 碼 : call P_TBL_DATA_DEL(i_tbl_id,@o_outcode,@o_outmsg);
* select @o_outcode,@o_outmsg;
======================================================================*/
-- =========================== 聲明變量 ===========================
-- 自定義變量
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元數據”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。