Hive-Cli
- 获取库信息
DESC DATABASE database
- 获取表信息
DESC FORMATTED database table
- 获取指定表下的字段
DESCRIBE table
MetaStore数据库
metastore服务一般使用mysql或者pg存储hive的元数据,通过jdbc方式查询数据库可获取元数据,其中下表为hive元数据的主要表信息。
表名 |
作用 |
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相关信息 |
HiveMetastore
通过hive-cli和访问元数据库方式通常称为为直连方式,Metastore服务亦可通过thrift网络方式获取元数据。Java可通过Apache 提供的HiveMetaStoreClient获取对应元数据。
数据库信息
public Database getDatabase(String name) throws TException {
return this.getDatabase(MetaStoreUtils.getDefaultCatalog(this.conf), name);
}
表信息
public Table getTable(String dbname, String name) throws TException {
return this.getTable(MetaStoreUtils.getDefaultCatalog(this.conf), dbname, name);
}
分区信息
public List<Partition> listPartitions(String catName, String db_name, String tbl_name, int max_parts) throws TException {
List<Partition> parts = this.client.get_partitions(MetaStoreUtils.prependCatalogToDbName(catName, db_name, this.conf), tbl_name, this.shrinkMaxtoShort(max_parts));
return this.deepCopyPartitions(this.filterHook.filterPartitions(parts));
}