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

本文详细介绍了Hive Metastore 3.1.1000的元数据管理,包括数据库、表、分区、SDS等结构。Metastore作为独立服务,负责管理Hive的元数据,如数据库位置、配置、权限等,并存储在关系数据库中。此外,文章还探讨了元数据表的作用,如database、table、partitions和SDS,以及特色功能,如列变更后的兼容性处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

hive metastore介绍

Hive Metastore(HMS)是一项单独的服务,不是Hive的一部分,甚至不必位于同一集群上。
hive metastore 用于管理hive的元数据并提供服务。这里的元数据包括:数据库、表、表的模式、目录、分区、索引以及命名空间等。
为数据库创建的目录一般在hive数据仓库目录下。

hadoop中的位置

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

相关的配置

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张
在这里插入图片描述

数据库表结构

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的类型以及执行的路径
    在这里插入图片描述

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'

在这里插入图片描述

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)

在这里插入图片描述

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: 列的基本信息
    在这里插入图片描述

各表的作用

主要表的作用

表名作用
DBSdatabase信息
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相关信息

分类描述表的作用

在这里插入图片描述

特色功能

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

  • 变更前的分区的colum定义保持不变,依然可以按照原先的定义读取,
  • 变更后创建的分区采用新的column定义
  • 表的定义引用最新的column定义

在这里插入图片描述

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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值