Hive元数据表结构详解

10 篇文章 6 订阅

概述

我们知道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_IDSCHEMA_VERSIONVERSION_COMMENT
ID主键Hive版本版本说明
10.12.0Set 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_IDDESCDB_LOCATION_URINAMEOWNER_NAMEOWNER_TYPE
1Default Hive databasehdfs://192.168.137.130:9000/user/hive/warehousedefaultpublicROLE
6NULLhdfs://192.168.137.130:9000/user/hive/warehouse/hive.dbhivehadoopUSER
  • select * from database_params;
    该表存储数据库的相关参数,在CREATE DATABASE时候用
    WITH DBPROPERTIES (property_name=property_value, …)指定的参数。
元数据表字段说明示例数据
DB_ID数据库ID2
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_IDCREATE_TIMEDB_ID LAST_ACCESS_TIMEOWNERRETENTIONSD_IDTBL_NAMETBL_TYPEVIEW_EXPANDED_TEXTVIEW_ORIGINAL_TEXT
1151994417060hadoop01page_viewsMANAGED_TABLENULLNULL
2151994431360hadoop02page_views_bzip2MANAGED_TABLENULLNULL
3151994481960hadoop03page_views_snappyMANAGED_TABLENULLNULL
  • select * from table_params;
    该表存储表/视图的属性信息。
表ID(对应TBLS的tbl_id)属性名属性值
TBL_IDPARAM_KEYPARAM_VALUE
1COLUMN_STATS_ACCURATEtrue
1numFiles1
1numRows0
1rawDataSize0
1totalSize19014993
1transient_lastDdlTime1519944212
2COLUMN_STATS_ACCURATEtrue
2numFiles1
2numRows100000
2rawDataSize18914993
2totalSize3814674
2transient_lastDdlTime1519944314
  • 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_IDCD_IDINPUT_FORMATIS_COMPRESSEDIS_STOREDASSUBDIRECTORIESLOCATIONNUM_BUCKETSOUTPUT_FORMATSERDE_ID
11org.apache.hadoop.mapred.TextInputFormathdfs://192.168.137.130:9000/user/hive/warehouse/hive.db/page_views-1org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat1
22org.apache.hadoop.mapred.TextInputFormathdfs://192.168.137.130:9000/user/hive/warehouse/hive.db/page_views_bzip2-1org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat2
33org.apache.hadoop.mapred.TextInputFormathdfs://192.168.137.130:9000/user/hive/warehouse/hive.db/page_views_snappy-1org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat3
2121org.apache.hadoop.mapred.TextInputFormathdfs://192.168.137.130:9000/user/hive/warehouse/hive.db/tt-1org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat21
2222org.apache.hadoop.mapred.SequenceFileInputFormathdfs://192.168.137.130:9000/user/hive/warehouse/hive.db/page_views_seq-1org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat22
2323org.apache.hadoop.hive.ql.io.RCFileInputFormathdfs://192.168.137.130:9000/user/hive/warehouse/hive.db/page_views_rcfile-1org.apache.hadoop.hive.ql.io.RCFileOutputFormat23
2424org.apache.hadoop.hive.ql.io.orc.OrcInputFormathdfs://192.168.137.130:9000/user/hive/warehouse/hive.db/page_views_orc_zlib-1org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat24
2727com.hadoop.mapred.DeprecatedLzoTextInputFormathdfs://192.168.137.130:9000/user/hive/warehouse/hive.db/page_views_lzo_index-1org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat27
  • SD_PARAMS
    该表存储Hive存储的属性信息,在创建表时候使用
    STORED BY ‘storage.handler.class.name’ [WITH SERDEPROPERTIES (…)指定。

  • select * from serdes;
    该表存储序列化使用的类信息

序列化类配置ID(对应SDS的 SERDE_ID)序列化类别名序列化类
SERDE_ID NAMESLIB
1NULLorg.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
2NULLorg.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
3NULLorg.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
21NULLorg.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
22NULLorg.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
23NULLorg.apache.hadoop.hive.serde2.columnar.ColumnarSerDe
24NULLorg.apache.hadoop.hive.ql.io.orc.OrcSerde
  • select * from serde_params;
    该表存储序列化的一些属性、格式信息,比如:行、列分隔符
序列化类配置ID(对应SDS的 SERDE_ID)属性名属性值
SERDE_IDPARAM_KEYPARAM_VALUE
1field.delim
1serialization.format
2field.delim
2serialization.format
3field.delim
3serialization.format
21field.delim
Hive表字段相关的元数据表
  • select * from columns_v2;
    表的字段信息
字段信息ID(对应SDS 表CD_ID)字段注释字段名字段类型字段顺序
CD_IDCOMMENTCOLUMN_NAMETYPE_NAMEINTEGER_IDX
1NULLcity_idstring6
1NULLend_user_idstring5
1NULLipstring4
1NULLrefererstring3
1NULLsession_idstring2
1NULLtrack_timestring0
1NULLurlstring1
2NULLcity_idstring6
2NULLend_user_idstring5
2NULLipstring4
2NULLrefererstring3
2NULLsession_idstring2
2NULLtrack_timestring0
2NULLurlstring1
Hive表分区相关的元数据表

主要涉及PARTITIONS、PARTITION_KEYS、PARTITION_KEY_VALS、PARTITION_PARAMS

  • select * from partitions ;
    分区的基本信息
分区ID分区创建时间最后一次访问时间分区名分区存储ID表ID
PART_IDCREATE_TIMELAST_ACCESS_TIMEPART_NAMESD_IDTBL_ID
11506226696pt=2015-06-12212
  • select * from partition_keys;
    分区的字段信息
元数据表字段说明示例数据
TBL_ID表ID2
PKEY_COMMENT分区字段说明
PKEY_NAME分区字段名pt
PKEY_TYPE分区字段类型string
INTEGER_IDX分区字段顺序1
  • select * from partition_key_vals;
    该表存储分区字段值
元数据表字段说明示例数据
PART_ID分区ID2
PART_KEY_VAL分区字段值2015-06-12
INTEGER_IDX分区字段值顺序0
  • select * from partition_params;
    该表存储分区的属性信息。
元数据表字段说明示例数据
PART_ID分区ID2
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用户注册函数的资源信息

最后我们总结下他们之间的关系图:
这里写图片描述

  • 8
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Hive是一种基于Hadoop的数据仓库基础架构,用于处理大规模数据集,并以SQL语言进行查询和分析。Hive中的元数据是指数据的元信息,包括的名称、列名、数据类型、分区等。当我们在Hive中创建一个数据时,Hive会自动生成对应的元数据,同时也会生成创建的SQL语句。 元数据生成创建语句的过程大致如下: 1. 定义结构:在Hive中创建之前,需要定义结构,包括名、列名以及每列的数据类型。例如,我们可以使用CREATE TABLE语句定义一个结构,并指定列名和数据类型。 2. 生成元数据:当我们执行CREATE TABLE语句后,Hive会解析该语句,并根据结构生成对应的元数据元数据包含了的各种信息,如名、列名、列的数据类型、列的分区等。 3. 生成创建语句:Hive会根据生成的元数据,自动生成对应的创建语句。创建语句包括CREATE TABLE语句以及的各种属性和选项。例如,如果我们创建了一个包括ID和Name两列的Hive会生成类似于以下的创建语句: CREATE TABLE my_table ( ID INT, Name STRING ); 其中,my_table为名,ID和Name为列名,INT和STRING为对应的数据类型。 总之,Hive元数据生成创建语句的过程包括定义结构、生成元数据和生成创建语句。通过这个过程,我们可以方便地创建并管理的元信息,从而方便地对大规模数据集进行查询和分析。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值