Hive元数据说明与应用

一、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
    复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享