Hive中的元数据信息默认是存储在derby中的,但是derby是单session的,一般都会修改成mysql。
在mysql中的metastore库中存放着hive所有元数据信息的表(如下图)。本文将分别介绍他们各自的用途。
VERSION表
存储Hive版本的元数据表,如果该表出现问题,根本进入不了Hive-Cli,会报错”Table ‘hive.version’ doesn’t exist”。
| VER_ID | SCHEMA_VERSION | VERSION_COMMENT |
| id | hive版本 | 版本说明 |
Hive数据库相关的元数据表(DBS、DATABASE_PARAMS)
DBS表:
| DB_ID | DESC | DB_LOCATION_URI | NAME | OWNER_NAME | OWNER_TYPE |
| id | 数据库描述 | 数据库HDFS路径 | 数据库名 | 数据库所有者用户名 | 所有者角色 |
DATABASE_PARAMS表
该表存储数据库的相关参数,在CREATE DATABASE时候用WITH DBPROPERTIES (property_name=property_value, …)指定的参数。
| DB_ID | PARAM_KEY | PARAM_VALUE |
| id | 参数名 | 参数值 |
DBS和DATABASE_PARAMS这两张表通过DB_ID字段关联。
Hive表和视图相关的元数据表(TBLS、TABLE_PARAMS、TBL_PRIVS)
这三张表通过TBL_ID关联。
TBLS
该表中存储Hive表、视图、索引表的基本信息。
| TBL_ID | CREATE_TIME | DB_ID | LAST_ACCESS_TIME | OWNER | RETENTION | SD_ID | TBL_NAME | TBL_TYPE | VIEW_EXPANDED_TEXT | VIEW_ORIGINAL_TEXT |
| id | 创建时间 | 对应dbs中的DB_ID | 上次访问时间 | 所有者 | 保留字段 | 序列化配置信息,对应SDS表中的SD_ID | 表名 | 表类型 | 视图的详细HQL语句 | 视图的原始HQL语句 |
TABLE_PARAMS
该表存储表/视图的属性信息。
| TBL_ID | PARAM_KEY | PARAM_VALUE |
| id | 参数名 | 参数值 |
TBL_PRIVS
该表存储表/视图的授权信息
| TBL_GRANT_ID | CREATE_TIME | GRANT_OPTION | GRANTOR | GRANTOR_TYPE | PRINCIPAL_NAME | PRINCIPAL_TYPE | TBL_PRIV | TBL_ID |
| id | 授权时间 | 0 | 授权执行用户 | 授权者类型 | 被授权用户 | 被授权用户类型 | 权限 | 表ID |
Hive文件存储信息相关的元数据表(SDS、SD_PARAMS、SERDES、SERDE_PARAMS)
由于HDFS支持的文件格式很多,而建Hive表时候也可以指定各种文件格式,Hive在将HQL解析成MapReduce时候,需要知道去哪里,使用哪种格式去读写HDFS文件,而这些信息就保存在这几张表中。
SDS
该表保存文件存储的基本信息,如INPUT_FORMAT、OUTPUT_FORMAT、是否压缩等。
TBLS表中的SD_ID与该表关联,可以获取Hive表的存储信息。
| SD_ID | CD_ID | INPUT_FORMAT | IS_COMPRESSED | IS_STOREDASSUBDIRECTORIES | LOCATION | NUM_BUCKETS | OUTPUT_FORMAT | SERDE_ID |
| id | id | 文件输入格式 | 是否压缩 | 是否以子目录存储 | 路径 | 分桶数 | 文件输出格式 | 序列化类 |
SD_PARAMS
该表存储Hive存储的属性信息,在创建表时候使用STORED BY ‘storage.handler.class.name’ [WITH SERDEPROPERTIES (…)指定。
| SD_ID | PARAM_KEY | PARAM_VALUE |
| id | 参数名 | 参数值 |
SERDES
该表存储序列化使用的类信息
| SERDE_ID | NAME | SLIB |
| id | 序列化类别名 | 序列化类 |
SERDE_PARAMS
该表存储序列化的一些属性、格式信息,比如:行、列分隔符
| SERDE_ID | PARAM_KEY | SLIB |
| id | 属性名 | 属性值 |
Hive表字段相关的元数据表(COLUMNS_V2)
COLUMNS_V2
该表存储表对应的字段信息。
| CD_ID | COMMENT | COLUMN_NAME | TYPE_NAME | INTEGER_IDX |
| id | 字段注释 | 字段名 | 字段类型 | 字段顺序 |
Hive表分区相关的元数据表(PARTITIONS、PARTITION_KEYS、PARTITION_KEY_VALS、PARTITION_PARAMS)
PARTITIONS
该表存储表分区的基本信息。
| PART_ID | CREATE_TIME | LAST_ACCESS_TIME | PART_NAME | SD_ID | TBL_ID |
| id | 分区创建时间 | 最后一次访问时间 | 分区名 | 分区存储ID | 表ID |
PARTITION_KEYS
该表存储分区的字段信息。
| TBL_ID | PKEY_COMMENT | PKEY_NAME | PKEY_TYPE | INTEGER_IDX |
| id | 分区字段说明 | 分区字段名 | 分区字段类型 | 分区字段顺序 |
PARTITION_KEY_VALS
该表存储分区字段值。
| PART_ID | PART_KEY_VAL | INTEGER_IDX |
| id | 分区字段值 | 分区字段值顺序 |
PARTITION_PARAMS
该表存储分区的属性信息。
| PART_ID | PARAM_KEY | PARAM_VALUE |
| id | 分区属性名 | 分区属性值 |
其他不常用的表
| 表名 | 作用 |
| DB_PRIVS | 数据库权限信息表。通过GRANT语句对数据库授权后,将会在这里存储。 |
| IDXS | 索引表,存储Hive索引相关的元数据 |
| INDEX_PARAMS | 索引相关的属性信息 |
| TAB_COL_STATS | 表字段的统计信息。使用ANALYZE语句对表字段分析后记录在这里 |
| TBL_COL_PRIVS | 表字段的授权信息 |
| PART_PRIVS | 分区的授权信息 |
| PART_COL_STATS | 分区字段的统计信息 |
| PART_COL_PRIVS | 分区字段的权限信息 |
| FUNCS | 用户注册的函数信息 |
| FUNC_RU | 用户注册函数的资源信息 |
关系图: