Hive从入门到放弃——Hive元数据简介(六)

元数据概念

  在之前安装Hive的博客Hive从入门到放弃——Hive安装和基本使用(二),提到了有一步骤是初始化Hive,其实就是把Hive的元数据表创建部署在一个叫hive的MySQL库里,那么什么是元数据呢?
  元数据(Metadata),又称中介数据、中继数据,为描述数据的数据(data about data),主要是描述数据属性(property)的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。
  解释解释就是你在Hive内建的库,建的表,表有哪些字段,字段类型是什么,用的什么序列化,表建了什么分区等等,这些描述Hive内数据库、表、分区、字段等对象的数据,就是Hive的元数据,细心的你可能觉得好像遇到过这些玩意,没错,一般常见的关系型数据库如SQL Server,MySQL会在自己实力本身建一个类似于sys的库和表来存这些描述库或者表的数据,但是Hive本身没有这样的库,而且经常涉及元数据本身的增删查改,还要支持多人同时多事务的增删查改这些配置元数据信息,Hive本身存这样的库不适合,所以选用了能较好支持的MySQL作为元数据库,当然Oracle和SQL Server也是可以作为选择的,但是因为MySQL免费嘛,所以用的多。

元数据表E-R图

  可以自己登录到自己Hive元数据库hive内,查看一下元数据表和E-R图,hive-2.3.5版本有57张元数据表,当然也不是所有的表都能关联到整个元数据的E-R图内,也有游离在外面的独立的表的,有些是Hive预留的,等着你去开发实践,如果你要修改Hive源码,那么必须要要对这些Hive元数据表滚瓜烂熟。
在这里插入图片描述

图1 查看Hive元数据表的E-R图

  纵然整个E-R图,确实有点大,截图截不全,但是最重要的是两个表是表SDS(Hive序列化反序列化表)和表TBLS(Hive表描述),这两个表贯穿了整个E-R图,详细我们在下文会具体说明。

在这里插入图片描述

图2 Hive元数据表的E-R图节选

常用元数据表简介

Hive版本相关的表

  • VERSION 查看版本信息,结构相对简单,但是很重要,缺失会在启动Hive连接时触发异常table ‘hive.version’ doesn’t exist,表结构数据字典如表1。
表1 VERSION数据字段
字段名类型是否为空约束描述样例数据
VER_IDbigint(20)N主键版本主键id1
SCHEMA_VERSIONvarchar(127)N-Hive版本2.3.0
VERSION_COMMENTvarchar(255)Y-Hive版本说明idHive release version 2.3.0

Hive数据库相关的表

  • DBS 查看所有数据库的信息,表结构数据字典如表2;
表2 DBS数据字段
字段名类型是否为空约束描述样例数据
DB_IDbigint(20)N主键数据库主键id1
DESCvarchar(4000)Y-数据库描述数据仓库
DB_LOCATION_URIvarchar(4000)N-数据库hdfs位置hdfs://dw-test-cluster-007/hive/warehouse
NAMEvarchar(128)Y-数据库名字dw
OWNER_NAMEvarchar(128)Y-数据库属主(即谁的库)hadoop
OWNER_TYPEvarchar(10)Y-数据库类型ROLE或USER
  • DATABASE_PARAMS 存储数据库的属性相关参数,对应CREATE DATABASE时候用WITH DBPROPERTIES (property_name=property_value, …)指定的参数,具体如表3;
表3 DATABASE_PARAMS数据字段
字段名类型是否为空约束描述样例数据
DB_IDbigint(20)N主键数据库主键id1
PARAM_KEYvarchar(180)N-数据库属性参数名creater或date或edited-by
PARAM_VALUEvarchar(4000)Y-数据库属性参数值rowyet或20200520

Hive表和视图相关的表

  • TBLS 划重点,重中之重,记录Hive表,视图和索引等基本信息描述,表结构字典如表4;
表4 TBLS数据字段
字段名类型是否为空约束描述样例数据
TBL_IDbigint(20)N主键数据库主键id1
CREATE_TIMEint(11)N-创建时间(时间戳)1570604212
DB_IDbigint(20)YDBS表外键数据库ID1
LAST_ACCESS_TIMEint(11)N-最后一次访问时间(时间戳)1570604212
OWNERvarchar(767)Y-表属主rowyet
RETENTIONint(11)N-表保留字段0
SD_IDbigint(20)YSDS表外键序列化表ID1,对应SDS表的SD_ID=1
TBL_NAMEvarchar(256)Y-表名ods_rs_basic_area_txt
TBL_TYPEvarchar(128)Y-表类型(内部表,外部表)MANAGED_TABLE
VIEW_EXPANDED_TEXTmediumtextY-视图的详细HQL语句select * from dw.ods_rs_basic_area_txt
VIEW_ORIGINAL_TEXTmediumtextY-视图的原始HQL语句select * from ods_rs_basic_area_txt
IS_REWRITE_ENABLEDbit(1)N-是否重写0
  • TABLE_PARAMS 表相关属性参数,对应Hive建表语句中的TBLPROPERTIES ( 'parquet.compression'='snappy', 'spark.sql.create.version'='2.2 or prior', 'spark.sql.sources.schema.numPartCols'='3', 'transient_lastDdlTime'='1590565081')以及表的comment的属性描述,具体表结构字典如表5,
表5 TABLE_PARAMS数据字段
字段名类型是否为空约束描述样例数据
DB_IDbigint(20)N主键数据库主键id1
PARAM_KEYvarchar(256)N-表属性参数名comment 或 parquet.compression或transient_lastDdlTime等
PARAM_VALUEmediumtextY-表属性参数值ods describe表 或 snappy 或 1571225030
  • TBL_PRIVS 记录Hive表、视图授权情况,具体如表6;
表6 TBL_PRIVS数据字段
字段名类型是否为空约束描述样例数据
TBL_GRANT_IDbigint(20)N主键授权表主键id1
CREATE_TIMEint(11)N-创建时间(时间戳)1570604212
GRANT_OPTIONsmallint(6)N-权限可选项0
GRANTORvarchar(128)Y-授权执行用户hadoop
GRANTOR_TYPEvarchar(128)Y-授权用户类型USER
PRINCIPAL_NAMEvarchar(128)Y-被授权用户hadoop
PRINCIPAL_TYPEvarchar(128)Y-被授权用户类型USER
TBL_PRIVvarchar(128)Y-授予权限SELECT 或 UPDATE 或 DELETE 或INSERT
TBL_IDbigint(20)YTBLS表外键TBLS表的TBL_ID1 对应TBLS的TBL_ID=1

Hive序列化和反序列化相关的表

  • SDS 保存表指定文件的存储相关的信息,如输入、输出格式,是否压缩,文件存储在hdfs上的位置等,数据字典具体如表7;
表7 SDS数据字段
字段名类型是否为空约束描述样例数据
SD_IDbigint(20)N主键主键id1
CD_IDbigint(20)YCDS表外键CDS表外键1
INPUT_FORMATvarchar(4000)Y-输入格式org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat
IS_COMPRESSEDbit(1)N-是否压缩0,1
IS_STOREDASSUBDIRECTORIESbit(1)N-是否以子目录存储0,1
LOCATIONvarchar(4000)Y-文件在HDFS的存储位置hdfs://dw-test-cluster-007/hive/warehouse/ods/compose_plan/kuma/ods_kuma_compose_plan/event_week=40/event_day=20191010/event_hour=00
NUM_BUCKETSint(11)N-分桶个数7
OUTPUT_FORMATvarchar(4000)Y-输出格式org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat
SERDE_IDbigint(20)YSERDES外键SERDES外键1
  • SD_PARAMS 存储SDS表的一些属性,由STORED BY ‘storage.handler.class.name’ [WITH SERDEPROPERTIES (…)指定,这个表不常见,我查询了下我的生产Hive元数据库,该目前是无记录的,说明这些属性实际用处不大,数据字典如表8;
表8 SD_PARAMS数据字段
字段名类型是否为空约束描述样例数据
SD_IDbigint(20)N主键表SDS主键id1
PARAM_KEYvarchar(256)N-表SDS属性参数名-
PARAM_VALUEmediumtextY-表SDS属性参数值-
  • SERDES 存储Hive表的序列化,反序列化调用的类,非常重要,具体数据结构如表9;
表9 SERDES数据字段
字段名类型是否为空约束描述样例数据
SERDE_IDbigint(20)N主键表SERDES主键id1
NAMEvarchar(128)Y-调用序列化类的别名-
SLIBvarchar(4000)Y-调用序列化的类org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe
  • SERDE_PARAMS 存储Hive序列化的一些属性,如文本格式的行列分隔符,二进制文件的序列化格式等,数据字典如表10;
    表10 SERDE_PARAMS数据字段
字段名类型是否为空约束描述样例数据
SERDE_IDbigint(20)N主键表SERDE_PARAMS主键id1
PARAM_KEYvarchar(256)N-表SERDE_PARAMS属性参数名field.delim 或 line.delim 或 serialization.format
PARAM_VALUEmediumtextY-表SERDE_PARAMS属性参数值 或 换行符 或 1

Hive表字段相关的表

  • COLUMNS_V2 存储字段相关的信息,很重要,数据字典如表11;
    表11 COLUMNS_V2数据字段
字段名类型是否为空约束描述样例数据
CD_IDbigint(20)N主键表COLUMNS_V2主键id1
COMMENTvarchar(256)Y-Hive表字段描述账号类型
COLUMN_NAMEvarchar(767)N-Hive表字段名称account_type
TYPE_NAMEmediumtextY-Hive表字段类型string
INTEGER_IDXint(11)N-Hive表字段顺序13

  扩展:元数据表内获取表字段的方法,可以通过上面图2的E-R图关系获得,表TBLS的字段SD_ID关联表SDS,然后表SDS的字段CD_ID关联表CDS,然后表CDS的字段CD_ID关联表COLUMNS_V2得到,可参看以下sql语句

select t1.TBL_NAME,t4.* 
from TBLS t1
inner join SDS t2 on t1.SD_ID=t2.SD_ID
inner join CDS t3 on t2.CD_ID=t3.CD_ID
inner join COLUMNS_V2 t4 on t3.CD_ID=t4.CD_ID
where TBL_NAME='ods_fso_tb_e_sales_publish'

  运行结果如图3

在这里插入图片描述

图3 元数据实现查看某表的字段

Hive表分区相关表

  • PARTITIONS 存储Hive表的分区信息,数据字典如表12;
    表12 PARTITIONS数据字段
字段名类型是否为空约束描述样例数据
PART_IDbigint(20)N主键表PARTITIONS主键id1
CREATE_TIMEint(11)N-分区创建时间1570775393
LAST_ACCESS_TIMEint(11)N-最后一次访问时间0
PART_NAMEvarchar(767)Y-分区名event_week=40/event_day=20191010/event_hour=00
SD_IDbigint(20)YSDS表外键分区存储ID62
TBL_IDbigint(20)YTBLS表外键表ID28

PARTITION_KEYS 存储Hive表的分区字段名字,类型,数据字典如表13;

表13 PARTITION_KEYS数据字段
字段名类型是否为空约束描述样例数据
TBL_IDbigint(20)N主键表COLUMNS_V2主键id1
PKEY_COMMENTvarchar(4000)Y-分区字段说明
PKEY_NAMEvarchar(128)N-分区字段名event_day
PKEY_TYPEvarchar(767)N-分区字段类型string
INTEGER_IDXint(11)NTBLS表外键分区字段顺序1
  • PARTITION_KEY_VALS 存储Hive表分区字段的值,数据字典如表14;
    表14 PARTITION_KEY_VALS数据字段
字段名类型是否为空约束描述样例数据
PART_IDbigint(20)N主键表PARTITION_KEY_VALS主键id1
PART_KEY_VALvarchar(256)Y-分区字段的值20191010
INTEGER_IDXint(11)N-分区字段顺序1
  • PARTITION_PARAMS 存储Hive表分区的属性,数据字典如表15;
    表15 PARTITION_PARAMS数据字段
字段名类型是否为空约束描述样例数据
PART_IDbigint(20)N主键表PARTITION_PARAMS主键id1
PARAM_KEYvarchar(256)N主键分区属性名numFiles 或 numRows
PARAM_VALUEvarchar(4000)Y主键分区属性值15 或 502195

  扩展:元数据表内获取表分区的方法,可以通过上面图2的E-R图关系获得,表TBLS的字段TBL_ID关联表PARTITIONS和表PARTITION_KEYS,然后表PARTITION_KEY_VALS的字段PART_ID关联表PARTITION_KEY_VALS,关联表PARTITION_PARAMS是为了取属性,可选,一般不用,可参看以下sql语句

select t1.TBL_NAME,t2.PKEY_COMMENT,t2.PKEY_NAME,t2.PKEY_TYPE,t2.INTEGER_IDX,t3.PART_NAME,t3.PART_ID 
 ,t4.PART_ID,t4.PART_KEY_VAL,t4.INTEGER_IDX-- ,t5.PARAM_KEY,t5.PARAM_VALUE
from TBLS t1
 inner join PARTITION_KEYS t2 on t1.TBL_ID=t2.TBL_ID
 inner join PARTITIONS t3 on t1.TBL_ID=t3.TBL_ID
 inner join PARTITION_KEY_VALS  t4 on t3.PART_ID=t4.PART_ID  and t2.INTEGER_IDX=t4.INTEGER_IDX
-- inner join PARTITION_PARAMS  t5 on t3.PART_ID=t5.PART_ID 
where t1.TBL_ID=28

  运行结果如图4
在这里插入图片描述

图4 元数据实现查看某表的分区信息

其他不常用元数据节选

  hive-2.3.5版本有57张元数据表,以上列出的是比较常用的一些,剩下的就不详细列举了,大家还是要学会利用图2的E-R图来盘清楚这些元数据表的关系,同时对于有修改Hive源码的小伙伴们,也是需要先理清楚这些元数据表的。

  • 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 用户注册函数的资源信息

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

╭⌒若隐_RowYet——大数据

谢谢小哥哥,小姐姐的巨款

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值