Hive 0.11 元数据表汇总


转自mango_song

1. Hive 0.11 元数据表汇总

1.1 概览

线上Hive 0.11 metastore包括39个表,可以分为以下几类 :

类别 表名 主键 描述
Database相关 DBS DB_ID 所有Hive数据库信息,包括HDFS数据目录、库名、备注等
  DBS_PARAMS
DB_ID,PARAM_KEY
Database的属性信息
TABLE相关 TBLS TBL_ID 所有Hive基本表信息,包括所属DB_ID,创建者,表名,创建方式等
  TABLE_PARAMS 
TBL_ID 
表级属性,文件大小,最后一次ddl时间等等 
  NUCLEUS_TABLES 
CLASS_NAME 
Hive元数据表和Hive中class类的对应关系(为什么该表是空呢?//todo) 
SDS数据存储相关 SDS SD_ID 所有Hive表、表分区所对应的HDFS数据目录和数据格式,包含序列化SERDE_ID 
  SD_PARAMS
SD_ID
SDS的附加信息
COLUMN相关 
CDS 
CD_ID 
只有一个字段CD_ID,记录Hive数据仓库中所有的CD_ID,和COLUMN_V2关联 
  COLUMN_V2 
CD_ID,COLUMN_NAME 
各hive表字段信息,包括列名,类型 
  SORT_COLS 
SD_ID,INTEGER_IDX 
Hive表创建时SORTED BY字段信息(字段名,sort类型,字段序号) 
PARTITION相关 
PARTITION_KEYS 
TBL_ID,PKEY_NAME 
hive分区表所采用的分区键(字段),包含TBL_ID、分区字段名、分区字段序号(INTEGER_IDX) 
  PARTITIONS 
PART_ID 
hive表分区信息,包含所属TBL_ID,分区名,如 log_date=2013-04-21 
  PARTITION_KEY_VALS 
PART_ID,INTEGER_IDX 
存储PART_ID分区,INTEGER_IDX分区字段的值(PART_KEY_VAL) 
  PARTITION_EVENTS
PART_NAME_ID
存储PARTITION上发生的操作?
  PARTITION_PARAMS
PART_ID
PARTITION的属性信息,如最后一次DDL时间(transisent_lastDdlTime)
  PARTITION_COL_STATS
CD_ID
PARTITION 上列级别的统计信息
SERDE序列化相关 
SERDES 
SERDE_ID 
hive序列化/反序列化使用到的类库信息,SLIB表示序列化采用的JAVA类 
  SERDE_PARAMS 
SERDE_ID,PARAM_KEY 
hive序列化/反序列化 采用的行分隔符等 
BUCKET桶相关 BUCKETING_COLS SD_ID 采用分桶技术的SDS
SKEW数据倾斜 SKEWED_COL_NAMES 
SD_ID,INTEGER_IDX  空表
  SKEWED_COL_VALUE_LOC_MAP 
SD_ID,STRING_LIST_ID_KID  空表
  SKEWED_STRING_LIST 
STRING_LIST_ID  空表 (只有STRING_LIST_ID一个字段)
  SKEWED_STRING_LIST_VALUES 
STRING_LIST_ID,INTEGER_IDX  空表
  SKEWED_VALUES 
SD_ID_OID,INTEGER_IDX   空表
PRIVS权限相关 GLOBAL_PRIVS 
USER_GRANT_ID 
  空表  (全局权限管理)
  DB_PRIVS 
DB_GRANT_ID    空表  (数据库级别的权限管理,数据库权限授予信息)
  TBL_PRIVS 
TBL_GRANT_ID    空表  (表级别的权限管理,表权限授予信息)
  TBL_COL_PRIVS 
TBL_COLUMN_GRANT_ID    空表  (表级别的权限管理,列权限授予信息)
  PART_PRIVS PART_GRANT_ID 
  空表  (PARTITION级别的权限管理,分区权限授予信息)
  PART_COL_PRIVS 
PART_COLUMN_GRANT_ID    空表  (PARTITION上列级别的权限管理,)
  ROLES 
ROLE_ID    空表  (角色表,记录所有的角色ROLE_ID、角色名、创建者、所有者)
  ROLES_MAP 
    空表  (角色管理表,记录所有的角色的授予信息)
其他  VERSIONS 
 VER_ID 存储当前Schema的版本(SCHEMA_VERSION),以0.11为例,SCHEMA_VERSION=0.13
  SEQUENCE_TABLE 
SEQUENCE_NAME 
存储SEQUENCE对象下一个可用的值(NEXT_VAL) 
  TYPES 
TYPES_ID 空表,含义未知 
  TYPE_FILEDS 
TYPE_ID FIELD_NMAE 
空表,含义未知
  IDXS    IDX_ID   空表,含义未知 
  INDEX_PARAMS
  IDX_ID,PARAM_KEY
  空表,IDXS的属性信息 
  TAB_COL_STATS  CD_ID 空表,COLUMN的统计信息,怀疑该表已被弃用 


2.各个表的含义

2.1 Database表:DBS

 描述  该表存储Hive Database的元数据信息,DB_ID是数据库ID,NAME是库名,DB_LOCATION_URI是数据库在HDFS中的位置,DESC为数据库的描述信息。

mysql> desc DBS;
+-----------------+---------------+------+-----+---------+-------+
| Field           | Type          | Null | Key | Default | Extra |
+-----------------+---------------+------+-----+---------+-------+
| DB_ID           | bigint(20)    | NO   | PRI | NULL    |       |
| DESC            | varchar(4000) | YES  |     | NULL    |       |
| DB_LOCATION_URI | varchar(4000) | NO   |     | NULL    |       |
| NAME            | varchar(128)  | YES  | UNI | NULL    |       |
+-----------------+---------------+------+-----+---------+-------+

  例子:acorn_3g数据库的信息如下,表示该库ID为81,路径为hdfs://YZSJHL19-42.opi.com/warehouse.test/acorn_3g.db

mysql> select * from DBS where NAME='acorn_3g';
+-------+------+-------------------------------------------------------+----------+
| DB_ID | DESC | DB_LOCATION_URI                                       | NAME     |
+-------+------+-------------------------------------------------------+----------+
|    81 | NULL | hdfs://YZSJHL19-42.opi.com/warehouse.test/acorn_3g.db | acorn_3g |
+-------+------+-------------------------------------------------------+----------+

2. 2 Table 表

描述:

  •          TBLS 存储Hive Table的元数据信息,每个表有唯一的TBL_ID
  •          SD_ID外键指向所属的Database,SD_IID关联SDS表的主键。 其中SDS存储列(CD_ID)等信息。TBLS.SD_ID关联SDS.SD_ID, SDS.SD_ID关联CDS.CD_ID,
  •          CDS.CD_ID关联COLUMNS_V2.CD_ID

例子:*acorn_3g.user_act表的信息:  TBL_ID为41231,TBL_TYPE为MANAGED_TABLE普通表(若值为EXTERNAL,表示外部表),DB_ID为81,表示隶属DB_ID=81的Database。

mysql> select * from TBLS where TBL_NAME='user_act' and DB_ID=81 \G
*************************** 1. row ***************************
            TBL_ID: 41231
       CREATE_TIME: 1366188055
             DB_ID: 81
  LAST_ACCESS_TIME: 0
             OWNER: xianbing.liu
         RETENTION: 0
             SD_ID: 263311
          TBL_NAME: user_act
          TBL_TYPE: MANAGED_TABLE
VIEW_EXPANDED_TEXT: NULL
VIEW_ORIGINAL_TEXT: NULL

2.3 SDS表(数据存储表)

描述:  

  •      SDS表保存了Hive数据仓库所有的HDFS数据文件信息,每个SD_ID唯一标记一个数据存储记录
  •      CD_ID关联COLUMN_V2.CD_ID,指定该数据的字段信息
  •      SERDE_ID关联SERDES.SERDE_ID,指定该数据的序列化信息(如是否是序列化表,DELIMITED字段等)

例子:

     根据SDS表找到acorn_3g.user_act表的CD_ID是263311, SERDE_ID是263301,默认存储位置为hdfs://YZSJHL19-42.opi.com/warehouse.test/acorn_3g.db/user_act

mysql> select * from SDS where SD_ID=263311 \G
*************************** 1. row ***************************
                    SD_ID: 263311
                    CD_ID: 263311
             INPUT_FORMAT: org.apache.hadoop.mapred.TextInputFormat
            IS_COMPRESSED:
                 LOCATION: hdfs://YZSJHL19-42.opi.com/warehouse.test/acorn_3g.db/user_act
              NUM_BUCKETS: -1
            OUTPUT_FORMAT: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
                 SERDE_ID: 263301
IS_STOREDASSUBDIRECTORIES: 

2.4 CDS 和 COLUMN_V2  (列信息)

CDS表

描述:

     该表只有一个字段CD_ID,永远存储整个Hive数据仓库中的CD_ID.

例子:

    可以看到acorn_3g.user_act表对应的CD_ID记录在CDS中

mysql> desc CDS;
+-------+------------+------+-----+---------+-------+
| Field | Type       | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| CD_ID | bigint(20) | NO   | PRI | NULL    |       |
+-------+------------+------+-----+---------+-------+
1 row in set (0.00 sec)

mysql> select * FROM CDS where CD_ID=263311;
+--------+
| CD_ID  |
+--------+
| 263311 |
+--------+
1 row in set (0.00 sec)
COLUMN_V2表

描述:

    该表存储了一个CD_ID对应的所有字段信息

例子:

    查看acorn_3g.user_act表的COLUMN信息;我们可以看到acorn_3g.user_act表有14个字段,COLUMN_NAME为字段名,TYPE_NAME为字段类型,INTEGER_IDX为字段序号

mysql> select * from COLUMNS_V2 where CD_ID=263311 order by  integer_idx;
+--------+---------+---------------+-----------+-------------+
| CD_ID  | COMMENT | COLUMN_NAME   | TYPE_NAME | INTEGER_IDX |
+--------+---------+---------------+-----------+-------------+
| 263311 | NULL    | id            | bigint    |           0 |
| 263311 | NULL    | action_id     | int       |           1 |
| 263311 | NULL    | user_id       | bigint    |           2 |
| 263311 | NULL    | request       | string    |           3 |
| 263311 | NULL    | visit_time    | string    |           4 |
| 263311 | NULL    | source_id     | int       |           5 |
| 263311 | NULL    | sess_id       | string    |           6 |
| 263311 | NULL    | mobile_number | string    |           7 |
| 263311 | NULL    | from_id       | string    |           8 |
| 263311 | NULL    | app_id        | string    |           9 |
| 263311 | NULL    | version       | string    |          10 |
| 263311 | NULL    | reg_type      | int       |          11 |
| 263311 | NULL    | uniqid        | string    |          12 |
| 263311 | NULL    | failure       | int       |          13 |
+--------+---------+---------------+-----------+-------------+

2.5 SERDES和SERDE_PARAMS  (序列化)

描述:

    SERDES存储了所有的序列化信息(SERDE_ID,SLIB),SLIB表示序列化所采用的Java

    SERDES_PARAMS 存储序列化具体的参数及值

例子:

    acorn_3g.user_act表对应的SERDE_ID=263301表示 采用hive默认序列化类org.apache.Hadoop.hive.serde2.lazy.LazySimpleSerDe , DELIMITED字符为'\t' (即创建表时指定的 ...DELIMITED BY '\t' ...)

mysql> select * FROM SERDES where SERDE_ID=263301;
+----------+------+----------------------------------------------------+
| SERDE_ID | NAME | SLIB                                               |
+----------+------+----------------------------------------------------+
|   263301 | NULL | org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe |
+----------+------+----------------------------------------------------+


mysql> select SERDE_ID,PARAM_KEY,REPLACE(PARAM_VALUE,'\t','\\t') from SERDE_PARAMS where SERDE_ID=263301;
+----------+----------------------+---------------------------------+
| SERDE_ID | PARAM_KEY            | REPLACE(PARAM_VALUE,'\t','\\t') |
+----------+----------------------+---------------------------------+
|   263301 | field.delim          | \t                              |
|   263301 | serialization.format | \t                              |
+----------+----------------------+---------------------------------+

2.6 PARTITIONS PARTITION_KEY 和 PARTITION_KEY_VALS  (分区)

PARTITION_KEYS

描述:

    PARTITION_KEYS 保存了所有分区表用于分区的字段

例子:

   通过PARTITION_KEYS查看acorn_3g.user_act的分区信息,可看到该表是一个分区表,分区字段为log_date,其中INTEGER_IDX为分区字段的序号,和分区字段一一对应

mysql> desc PARTITION_KEYS;
+--------------+---------------+------+-----+---------+-------+
| Field        | Type          | Null | Key | Default | Extra |
+--------------+---------------+------+-----+---------+-------+
| TBL_ID       | bigint(20)    | NO   | PRI | NULL    |       |
| PKEY_COMMENT | varchar(4000) | YES  |     | NULL    |       |
| PKEY_NAME    | varchar(128)  | NO   | PRI | NULL    |       |
| PKEY_TYPE    | varchar(767)  | NO   |     | NULL    |       |
| INTEGER_IDX  | int(11)       | NO   |     | NULL    |       |
+--------------+---------------+------+-----+---------+-------+


mysql> select * FROM PARTITION_KEYS WHERE TBL_ID=41231;
+--------+--------------+-----------+-----------+-------------+
| TBL_ID | PKEY_COMMENT | PKEY_NAME | PKEY_TYPE | INTEGER_IDX |
+--------+--------------+-----------+-----------+-------------+
|  41231 | NULL         | log_date  | string    |           0 |
+--------+--------------+-----------+-----------+-------------+

PARTITIONS

描述:

    PARTITIONS存储了Hive数据仓库总所有的分区信息,每个分区由PART_ID标识,其中TBL_ID为隶属的Table,SD_ID为隶属的SDS(见2.3)

例子:

   通过PARTITIONS表查看acorn_3g.user_act表的分区信息,如PART_ID为168301,名字为log_date=2013-03-01,SD_ID为231621

mysql> desc PARTITIONS;
+------------------+--------------+------+-----+---------+-------+
| Field            | Type         | Null | Key | Default | Extra |
+------------------+--------------+------+-----+---------+-------+
| PART_ID          | bigint(20)   | NO   | PRI | NULL    |       |
| CREATE_TIME      | int(11)      | NO   |     | NULL    |       |
| LAST_ACCESS_TIME | int(11)      | NO   |     | NULL    |       |
| PART_NAME        | varchar(767) | YES  | MUL | NULL    |       |
| SD_ID            | bigint(20)   | YES  | MUL | NULL    |       |
| TBL_ID           | bigint(20)   | YES  | MUL | NULL    |       |
+------------------+--------------+------+-----+---------+-------+


mysql> select * FROM PARTITIONS WHERE TBL_ID=41231 order by PART_NAME limit 5;
+---------+-------------+------------------+---------------------+--------+--------+
| PART_ID | CREATE_TIME | LAST_ACCESS_TIME | PART_NAME           | SD_ID  | TBL_ID |
+---------+-------------+------------------+---------------------+--------+--------+
|  168301 |  1366259946 |                0 | log_date=2013-03-01 | 231621 |  41231 |
|  168321 |  1366260063 |                0 | log_date=2013-03-02 | 231641 |  41231 |
|  168331 |  1366260176 |                0 | log_date=2013-03-03 | 231651 |  41231 |
|  168346 |  1366260298 |                0 | log_date=2013-03-04 | 231666 |  41231 |
|  168361 |  1366260398 |                0 | log_date=2013-03-05 | 231681 |  41231 |
+---------+-------------+------------------+---------------------+--------+--------+

PARTITION_KEY_VALS

描述:

    PARTITION_KEY_VALS 存储了PARTITION_KEY中描述的分区字段的值,通常配合PARTITIONS 和PARTITION_KEYS表使用。

例子:

    查看分区PART_ID=168301各分区字段的值,其中PARTITION_KEY_VALS存储了所有分区字段序号(INTEGER_IDX)和值(PART_KEY_VAL)间的对应关系。本例中acorn_3g.user_act PART_ID=168301分区log_date字段的值为‘2013-03-01’

mysql> select pk.PKEY_NAME,pk.PKEY_TYPE,pk.INTEGER_IDX,pkv.PART_KEY_VAL from PARTITION_KEYS pk,PARTITION_KEY_VALS pkv 
       where pk.INTEGER_IDX=pkv.INTEGER_IDX and pk.TBL_ID=41231 and  pkv.PART_ID=168301;
+-----------+-----------+-------------+--------------+
| PKEY_NAME | PKEY_TYPE | INTEGER_IDX | PART_KEY_VAL |
+-----------+-----------+-------------+--------------+
| log_date  | string    |           0 | 2013-03-01   |
+-----------+-----------+-------------+--------------+

2.7 BUCKET 相关表

描述

    BUCKETING_COLS表描述了所有采用了分桶技术的SDS,目前公司未用BUCKET,//TODO

mysql> desc BUCKETING_COLS;
+-----------------+--------------+------+-----+---------+-------+
| Field           | Type         | Null | Key | Default | Extra |
+-----------------+--------------+------+-----+---------+-------+
| SD_ID           | bigint(20)   | NO   | PRI | NULL    |       |
| BUCKET_COL_NAME | varchar(256) | YES  |     | NULL    |       |
| INTEGER_IDX     | int(11)      | NO   | PRI | NULL    |       |
+-----------------+--------------+------+-----+---------+-------+

2.8 PRIVS 权限管理相关表

TBL_PRIVS DB_PRIVS PART_PRIVS 等,目前Hive在权限管理方面远不及关系数据库,公司也未对权限进行统一管理。

2.9 SKEW 数据倾斜相关表

相比0.8版本,0.11元数据增加了数据倾斜相关的表 SKEWED_COL_NAMES  SKEWED_COL_VALUE_LOC_MAP  SKEWED_STRING_LIST SKEWED_STRING_LIST_VALUES SKEWED_VALUES ,这些高级特性还在测试阶段,目前公司没有用到。

2.3 其他

如VERSION 描述版本信息,这类表开发者不用太关心。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值