概述

我们知道Apache Hive 是构建在Apache Hadoop之上的数据仓库。有助于对大型的数据集进行读、写和管理。这也是官网介绍的第一句话,虽然简短但是却能提炼出很多东西,大家可以去细细品味下。该篇博客不做过多讲述。本文我们介绍Hive的原数据表,他默认是存储再derby中的,但是我们一般会修改会mysql。作者使用的也是mysql进行的管理。

Hive元数据表结构

  • hive-site.xml
<property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:mysql://localhost:3306/basic01?createDatabaseIfNotExist=true</value>
</property>
<property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
</property>
  • 通过mysql查看basic01数据库
show tables;
+---------------------------+
| Tables_in_basic01         |
+---------------------------+
| bucketing_cols            |
| cds                       |
| columns_v2                |
| database_params           |
| dbs                       |
| func_ru                   |
| funcs                     |
| global_privs              |
| idxs                      |
| index_params              |
| part_col_privs            |
| part_col_stats            |
| part_privs                |
| partition_key_vals        |
| partition_keys            |
| partition_params          |
| partitions                |
| roles                     |
| sd_params                 |
| sds                       |
| sequence_table            |
| serde_params              |
| serdes                    |
| skewed_col_names          |
| skewed_col_value_loc_map  |
| skewed_string_list        |
| skewed_string_list_values |
| skewed_values             |
| sort_cols                 |
| tab_col_stats             |
| table_params              |
| tbl_col_privs             |
| tbl_privs                 |
| tbls                      |
| version                   |
+---------------------------+

下面我们就一个一个讲解看看其中到底是什么关系。

version(存储Hive版本的元数据表)

VER_ID

SCHEMA_VERSION

VERSION_COMMENT

ID主键

Hive版本

版本说明

1

0.12.0

Set by MetaStore hadoop@192.168.137.130

如果该表出现问题,根本进入不了Hive-Cli。比如该表不存在,当启动Hive-Cli时候,就会报错”Table ‘hive.version’ doesn’t exist”。

Hive数据库相关的元数据表(DBS、DATABASE_PARAMS)
  • select * from dbs
    该表存储Hive中所有数据库的基本信息,字段如下:

数据库ID

数据库描述

数据库HDFS路径

数据库名

数据库所有者用户名

所有者角色

DB_ID

DESC

DB_LOCATION_URI

NAME

OWNER_NAME

OWNER_TYPE

1

Default Hive database

hdfs://192.168.137.130:9000/user/hive/warehouse

default

public

ROLE

6

NULL

hdfs://192.168.137.130:9000/user/hive/warehouse/hive.db

hive

hadoop

USER

  • select * from database_params;
    该表存储数据库的相关参数,在CREATE DATABASE时候用
    WITH DBPROPERTIES (property_name=property_value, …)指定的参数。

元数据表字段

说明

示例数据

DB_ID

数据库ID

2

PARAM_KEY

参数名

createdby

PARAM_VALUE

参数值

lxw1234

Hive表和视图相关的元数据表

主要有TBLS、TABLE_PARAMS、TBL_PRIVS,这三张表通过TBL_ID关联。

  • select * from tbls;
    该表中存储Hive表、视图、索引表的基本信息。

表ID

创建时间

数据库ID

上次访问时间

所有者

保留字段

序列化配置信息( 对应SDS表中的SD_ID)

表名

表类型

视图的详细HQL语句

视图的原始HQL语句

TBL_ID

CREATE_TIME

DB_ID

LAST_ACCESS_TIME

OWNER

RETENTION

SD_ID

TBL_NAME

TBL_TYPE

VIEW_EXPANDED_TEXT

VIEW_ORIGINAL_TEXT

1

1519944170

6

0

hadoop

0

1

page_views

MANAGED_TABLE

NULL

NULL

2

1519944313

6

0

hadoop

0

2

page_views_bzip2

MANAGED_TABLE

NULL

NULL

3

1519944819

6

0

hadoop

0

3

page_views_snappy

MANAGED_TABLE

NULL

NULL

  • select * from table_params;
    该表存储表/视图的属性信息。

表ID(对应TBLS的tbl_id)

属性名

属性值

TBL_ID

PARAM_KEY

PARAM_VALUE

1

COLUMN_STATS_ACCURATE

true

1

numFiles

1

1

numRows

0

1

rawDataSize

0

1

totalSize

19014993

1

transient_lastDdlTime

1519944212

2

COLUMN_STATS_ACCURATE

true

2

numFiles

1

2

numRows

100000

2

rawDataSize

18914993

2

totalSize

3814674

2

transient_lastDdlTime

1519944314

  • TBL_PRIVS
    该表存储表/视图的授权信息
Hive文件存储信息相关的元数据表

主要涉及SDS、SD_PARAMS、SERDES、SERDE_PARAMS
由于HDFS支持的文件格式很多,而建Hive表时候也可以指定各种文件格式,Hive在将HQL解析成MapReduce时候,需要知道去哪里,使用哪种格式去读写HDFS文件,而这些信息就保存在这几张表中。

  • select * from sds;
    文件存储的基本信息:

存储信息ID(对应tbls表中的SD_ID )

字段信息ID(对应column_v2 的CD_ID)

文件输入格式

是否压缩

是否以子目录存储

HDFS路径

分桶数量

文件输出格式

序列化类ID

SD_ID

CD_ID

INPUT_FORMAT

IS_COMPRESSED

IS_STOREDASSUBDIRECTORIES

LOCATION

NUM_BUCKETS

OUTPUT_FORMAT

SERDE_ID

1

1

org.apache.hadoop.mapred.TextInputFormat

hdfs://192.168.137.130:9000/user/hive/warehouse/hive.db/page_views

-1

org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat

1

2

2

org.apache.hadoop.mapred.TextInputFormat

hdfs://192.168.137.130:9000/user/hive/warehouse/hive.db/page_views_bzip2

-1

org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat

2

3

3

org.apache.hadoop.mapred.TextInputFormat

hdfs://192.168.137.130:9000/user/hive/warehouse/hive.db/page_views_snappy

-1

org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat

3

21

21

org.apache.hadoop.mapred.TextInputFormat

hdfs://192.168.137.130:9000/user/hive/warehouse/hive.db/tt

-1

org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat

21

22

22

org.apache.hadoop.mapred.SequenceFileInputFormat

hdfs://192.168.137.130:9000/user/hive/warehouse/hive.db/page_views_seq

-1

org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat

22

23

23

org.apache.hadoop.hive.ql.io.RCFileInputFormat

hdfs://192.168.137.130:9000/user/hive/warehouse/hive.db/page_views_rcfile

-1

org.apache.hadoop.hive.ql.io.RCFileOutputFormat

23

24

24

org.apache.hadoop.hive.ql.io.orc.OrcInputFormat

hdfs://192.168.137.130:9000/user/hive/warehouse/hive.db/page_views_orc_zlib

-1

org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat

24

27

27

com.hadoop.mapred.DeprecatedLzoTextInputFormat

hdfs://192.168.137.130:9000/user/hive/warehouse/hive.db/page_views_lzo_index

-1

org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat

27

  • SD_PARAMS
    该表存储Hive存储的属性信息,在创建表时候使用
    STORED BY ‘storage.handler.class.name’ [WITH SERDEPROPERTIES (…)指定。
  • select * from serdes;
    该表存储序列化使用的类信息

序列化类配置ID(对应SDS的 SERDE_ID)

序列化类别名

序列化类

SERDE_ID

NAME

SLIB

1

NULL

org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe

2

NULL

org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe

3

NULL

org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe

21

NULL

org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe

22

NULL

org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe

23

NULL

org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe

24

NULL

org.apache.hadoop.hive.ql.io.orc.OrcSerde

  • select * from serde_params;
    该表存储序列化的一些属性、格式信息,比如:行、列分隔符

序列化类配置ID(对应SDS的 SERDE_ID)

属性名

属性值

SERDE_ID

PARAM_KEY

PARAM_VALUE

1

field.delim

1

serialization.format

2

field.delim

2

serialization.format

3

field.delim

3

serialization.format

21

field.delim

Hive表字段相关的元数据表
  • select * from columns_v2;
    表的字段信息

字段信息ID(对应SDS 表CD_ID)

字段注释

字段名

字段类型

字段顺序

CD_ID

COMMENT

COLUMN_NAME

TYPE_NAME

INTEGER_IDX

1

NULL

city_id

string

6

1

NULL

end_user_id

string

5

1

NULL

ip

string

4

1

NULL

referer

string

3

1

NULL

session_id

string

2

1

NULL

track_time

string

0

1

NULL

url

string

1

2

NULL

city_id

string

6

2

NULL

end_user_id

string

5

2

NULL

ip

string

4

2

NULL

referer

string

3

2

NULL

session_id

string

2

2

NULL

track_time

string

0

2

NULL

url

string

1

Hive表分区相关的元数据表

主要涉及PARTITIONS、PARTITION_KEYS、PARTITION_KEY_VALS、PARTITION_PARAMS

  • select * from partitions ;
    分区的基本信息

分区ID

分区创建时间

最后一次访问时间

分区名

分区存储ID

表ID

PART_ID

CREATE_TIME

LAST_ACCESS_TIME

PART_NAME

SD_ID

TBL_ID

1

1506226696

pt=2015-06-12

21

2

  • select * from partition_keys;
    分区的字段信息

元数据表字段

说明

示例数据

TBL_ID

表ID

2

PKEY_COMMENT

分区字段说明

PKEY_NAME

分区字段名

pt

PKEY_TYPE

分区字段类型

string

INTEGER_IDX

分区字段顺序

1

  • select * from partition_key_vals;
    该表存储分区字段值

元数据表字段

说明

示例数据

PART_ID

分区ID

2

PART_KEY_VAL

分区字段值

2015-06-12

INTEGER_IDX

分区字段值顺序

0

  • select * from partition_params;
    该表存储分区的属性信息。

元数据表字段

说明

示例数据

PART_ID

分区ID

2

PARAM_KEY

分区属性名

numFiles、numRows、rawDataSize、totalSize、transient_lastDdlTime

PARAM_VALUE

分区属性值

15、502195

其他不常用的元数据表

表明

作用

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

用户注册函数的资源信息

最后我们总结下他们之间的关系图:

hive元数据库查询表大小 hive查看元数据_matedata