天天看点

【Hive】Hive MetaStore 3.1.x 元数据管理库表结构介绍及特色功能

本文以hive metastore 3.1.1000中的库表结构进行分析

hive metastore介绍

Hive Metastore(HMS)是一项单独的服务,不是Hive的一部分,甚至不必位于同一集群上。

hive metastore 用于管理hive的元数据并提供服务。这里的元数据包括:数据库、表、表的模式、目录、分区、索引以及命名空间等。

为数据库创建的目录一般在hive数据仓库目录下。

在hadoop中的位置

Hive metastore Service (HMS) 将Hive表、分区等的元数据存储在关系数据库中,并通过metastore服务API提供给客户端(包括Hive)访问这些信息

【Hive】Hive MetaStore 3.1.x 元数据管理库表结构介绍及特色功能

相关的配置

metastore可以存储在JPOX支持的任何数据库中。RDBMS的位置和类型可以由两个变量javax.jdo.option.ConnectionURL和javax.jdo.option.ConnectionDriverName控制。目前支持MySQL、PostgreSQL两种

在hive中,默认情况下新建的数据库以及表都位于HDFS的hive.metastore.warehouse.dir路径下

属性 描述 默认值
hive.metastore.warehouse.dir 指定hive表在hdfs上的存储路径 /user/hive/warehouse
javax.jdo.option.ConnectionURL 配置元数据的连接URL
javax.jdo.option.ConnectionUserName 元数据库连接用户名
javax.jdo.option.ConnectionPassword 元数据库连接密码
<property>
      <name>hive.metastore.warehouse.dir</name>
      <value>/warehouse/tablespace/managed/hive</value>
    </property>
 <property>
      <name>javax.jdo.option.ConnectionDriverName</name>
      <value>com.mysql.jdbc.Driver</value>
    </property>
    
    <property>
      <name>javax.jdo.option.ConnectionURL</name>
      <value>jdbc:mysql://bigdata01:3306/metastore</value>
    </property>
    
    <property>
      <name>javax.jdo.option.ConnectionUserName</name>
      <value>metastore</value>
    </property>
           

如何访问元数据库中的表

首先进入mysql,然后选择使用所创建的元数据库metastore

通过show tables可以看到共用75张表

【Hive】Hive MetaStore 3.1.x 元数据管理库表结构介绍及特色功能

数据库表结构

database

数据库相关的表详见下图

  • dbs: 数据库的相关信息,存储数据库的名称、存储位置、所属的Catalog
    • DB_ID为其主键,同时也是funcs、db_privs、database_params、tbls的外键。
    • 一般来说,在hive metastore初始化时会自动创建一个名叫default的库,随后通过业务发展以及数据治理等需求,可进行不同业务域库的划分。
  • ctlgs: Catalog的信息,存储Catalog的名称、内部表存储的根目录LOCATION_URL
  • db_privs: 表记录该DB下的权限记录信息。目前的权限管理通常集成开源的类似于sentry、range等成熟的权限框架。
  • database_params: 记录DB的一些扩展信息,便于进行特殊属性的扩展,comment, owner, lastaccesstime, readtime
  • funcs: 存储自定义函数UDF的基本信息,一个UDF只能对应一个库下的表,
  • func_ru: 存储UDF的类型以及执行的路径
    【Hive】Hive MetaStore 3.1.x 元数据管理库表结构介绍及特色功能

table

数据表相关的表详见下图

  • tbls表: 记录了table的一些基本信息,包括表名、类型、创建时间以及SD_ID等信息。
    • TBL_ID是tbls的主键,同时也是table_params、tbl_col_privs、idxs、tbl_privs、partitions、partition_keys、tab_col_stats表的外键。
    • 每个表都对应唯一的DB_ID,取决于你在哪个db下创建的表。在创建内部表写入meta的同时,也会创建相应的物理路径。同时会在sds表中加入DDL时设置的input output、表的location以及SERDE信息
  • tbl_privs、tbl_col_privs: 记录该hive表的表及列权限认证信息。
  • partitions: 记录表的DDL分区的信息
  • partition_keys: 记录表的分区列信息
  • idxs: 表索引信息
  • sds: 存储表的输入、输出格式、存储位置 及SERDE信息
    • 每个SDS对应一个CID(一个CID表示具体的column list信息)
    • 一般的无partition表是一个SDS
    • partition表是一个partition一个SDS
  • columns_v2: 列的基本信息
--查询表信息
select * from from tbls where TBL_NAME = 't2'
--查询数据的输入输出格式、存储位置等信息
select s.* from tbls t,sds s where t.SD_ID=s.SD_ID and t.TBL_NAME = 't2'
--查询表的属性信息
select p.* from tbls t,table_params p where t.TBL_ID=p.TBL_ID and t.TBL_NAME = 't2'
--查询表的分区列
select p.* from tbls t,partition_keys p where t.TBL_ID=p.TBL_ID and t.TBL_NAME = 't2'
           
【Hive】Hive MetaStore 3.1.x 元数据管理库表结构介绍及特色功能

Partitions

表分区信息相关的表详见下图

  • partitions: 记录表分区存储的元数据信息。
    • PART_ID为PARTITIONS表的主键,同时也是part_col_stats、part_privs、partition_key_vals 、 partition_params表的外键。
    • partitions表在metastore中是相当重要的表,关系到partition的元数据存取
  • partition_keys: 记录表的分区列信息
  • part_col_privs: 记录该hive表的表及列权限认证信息。
  • part_col_stats: 统计每个分区的基本统计信息,用于优化
  • partition_key_vals: 每个partitions对应的具体值
select p.* from tbls t,`partitions` p where t.TBL_ID=p.TBL_ID and t.TBL_NAME = 't2'

select * from partition_key_vals where PART_ID IN (790,794)
           
【Hive】Hive MetaStore 3.1.x 元数据管理库表结构介绍及特色功能

SDS

  • SDS:包含计算引擎运行时需要的input与output 、location路径以及序列化的class信息。
    • SD_ID为该表的主键,同时也是PARTITIONS、BUCKETING_COLS、SKEWD_COL_NAMES、SD_PARAMS、SORT_COLS、SKEWED_VALUES、IDXS的外键
    • 提供table/partition对应的文件系统路径location,以及对这个数据读取的InputFormat、是否压缩、是否是子文件夹存储、SerDe类(对应于SERDES表)
  • SD_PARAMS :为每个SDS的key-value参数
  • SERDES :每个SDS对应的存储的SerDer类,每个SDS记录一个SERDES表的记录
  • SERDE_PARAMS:SERDE的一些参数,主要是行分隔符、列分隔符、NULL字符串等等,可以每个SerDer自己定义
  • columns_v2: 列的基本信息
    【Hive】Hive MetaStore 3.1.x 元数据管理库表结构介绍及特色功能

各表的作用

主要表的作用

表名 作用
DBS database信息
DATABASE_PARAMS 数据库的相关参数
FUNCS 用户注册的函数信息
FUNC_RU 用户注册函数的资源信息
TBLS 存储Hive表、试图、索引表的基本信息
TABLE_PARAMS 表相关信息
TAB_COL_STATS
TBL_COL_PRIVS
TBL_PRIVS
IDXS 索引表,存储Hive索引相关的元数据
INDEX_PARAMS 索引相关的属性信息
BUCKETING_COLS 存储bucket字段信息,通过SD_ID与其他表关联
CDS 一个字段CD_ID,与SDS表关联
COLUMNS_V2 存储字段信息,通过CD_ID与其他表关联
PARTITIONS 分区记录,SD_ID,TBL_ID关联
PARTITION_KEYS 存储分区字段,TBL_ID关联
PARTITION_KEY_VALS 分区的值,通过PART_ID关联。与PARTITION_KEYS共用INTEGER_IDX来标示不同的分区字段
PARTITION_PARAMS 存储某分区相关信息,包括文件数,文件大小,记录条数等PART_ID关联
PART_COL_PRIVS 分区字段的权限信息
PART_COL_STATS 分区字段的统计信息
PART_PRIVS 分区的授权信息
SDS 存储对应文件的基本信息,如INPUT_FORMAT、OUTPUT_FORMAT、是否压缩等。TBLS表中的SD_ID与该表关联,可以获取Hive表的存储信息。
SD_PARAMS 该表存储Hive存储的属性信息
SORT_COLS 排序字段,通过SD_ID关联
SERDES 存储序列化反序列化使用的类
SERDE_PARAMS 序列化反序列化相关信息,通过SERDE_ID关联
SKEWED_COL_NAMES
SKEWED_COL_VALUE_LOC_MAP
SKEWED_STRING_LIST
SKEWED_STRING_LIST_VALUES
SKEWED_VALUES
GLOBAL_PRIVS 存储全局变量
ROLES 角色表,和GLOBAL_PRIVS配合
VERSION 存储hive的版本信息
SEQUENCE_TABLE 存储sqeuence相关信息

分类描述表的作用

【Hive】Hive MetaStore 3.1.x 元数据管理库表结构介绍及特色功能

特色功能

表的列信息发生变更后,则

  • 变更前的分区的colum定义保持不变,依然可以按照原先的定义读取,
  • 变更后创建的分区采用新的column定义
  • 表的定义引用最新的column定义
【Hive】Hive MetaStore 3.1.x 元数据管理库表结构介绍及特色功能
create table t1(tid int, tname string, age int);
alter table tl add columns(english int);
insert into t1 values(1,'test',2);
select * from t1 limit 1;


create table t2(id int,name string)partitioned by(gender string)row format delimited fields terminated by ',';
insert into table t2 partition(gender='M') values(1,'zhangsan');
select * from t2 limit 2;

alter table t2 add columns(english int);
insert into table t2 partition(gender='F') values(2,'lisi');
select * from t2 limit 2;

           

继续阅读