Hive元数据管理(2)

在上节的内容讲述了Hive的元数据都有哪些重要的表,这些表中都有哪些字段,现在我们将系统的看一下他们的组成结构

在老师的某个生产故障背景下: CDH集群版本为5.2,Yarn出现了Bug,这个Bug在CDH5.3的版本下修复了,就没有多想就将Yarn组件升级到5.3,这时候出现了问题,由于5.3和5.2最后的Thrift协议发生了变化,除了删除Hive表以外的其他功能都正常,升级整个集群不可能,只能采取曲线救国的策略,删除指定表在Hive中的元数据,来达到删除表的效果。

  1. 根据表名和库名查询得出TBL_ID、SD_ID、PART_ID、CD_ID、SERDE_ID

    SELECT
    t.TBL_ID,t.SD_ID,p.PART_ID,s.CD_ID,s.SERDE_ID
    FROM
    (SELECT
    tt.TBL_ID,tt.SD_ID
    FROM
    tbls tt,
    dbs d
    WHERE
    d.DB_ID = tt.DB_ID
    AND
    d.`NAME` = 'DATABASE_NAME'
    AND
    tt.TBL_NAME = 'TABLE_NAME'
    ) t
    LEFT JOIN sds s ON t.sd_id = s.SD_ID
    LEFT JOIN `partitions` p on t.TBL_ID=p.TBL_ID
  2. 按照顺序依次执行删除数据语句(要先删除子表数据)

    • 删除partition相关的(假设有分区):

      # 子表partition_params
      delete from partition_params where PART_ID=
      # 子表partition_key_vals
      delete from partition_key_vals where PART_ID=
      # 子表part_privs,part_col_stats,part_col_privs
      # 一般没有数据,如有则需要删除,否则因为外键关系无法删除对应数据
      part_privs,part_col_stats,part_col_privs
      # 主表partitions
      delete from partitions where PART_ID=
    • 删除tbls相关的

      # 子表table_params
      delete from table_params where TBL_ID=16
      # 子表partition_keys
      delete from partition_keys where TBL_ID=16
      # 一般没有数据,如有则需要删除,否则因为外键关系无法删除对应数据
      tbl_col_privs,tbl_privs,tab_col_stats,index_params,idxs的原理同上(注意idxs是index_params的主表)
      # 主表tbls
      delete from tbls where TBL_ID=16
    • 删除sds相关

      # 一般没有数据,如有则需要删除,否则因为外键关系无法删除对应数据
      bucketing_cols,skewed_string_list_values,skewed_col_names,skewed_values
      # 子表 sd_params
      delete from sd_params where SD_ID=16
      # 主表
      delete from sds where SD_ID=16
    • 删除cds相关

      # 只有两张表
      delete from columns_v2 where CD_ID=21
      delete from cds where CD_ID=21
    • 删除serdes相关

      # 只有两张表
      delete from serde_params where SERDE_ID=16
      delete from serdes where SERDE_ID=16
  3. 使用jdbc改写,只需要在外部传入数据库名和表名即可,打入jar包使用

Author: Tunan
Link: http://yerias.github.io/2018/11/16/hive/16/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.