前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一文搞懂 Hive 元数据的表,数仓开发需要熟悉的,建议收藏

一文搞懂 Hive 元数据的表,数仓开发需要熟悉的,建议收藏

作者头像
大数据学习指南
发布2022-11-08 13:54:14
2K0
发布2022-11-08 13:54:14
举报
文章被收录于专栏:同名公众号:大数据学习指南

hive metastore ER 图

Hive 元数据是 Hive 管理数据的根本所在,其他系统接入 Hive 也是通过元数据服务的。本篇文章主要介绍 Hive 元数据表的基本信息,元数据服务放在下篇文章讲。这里我所说的元数据特指 Hive 元数据库的表。

在企业级数仓里面,Hive 元数据非常重要,尤其是在数据治理领域,通过 Hive 元数据,我们可以更好的治理数据,了解数据的方方面面。

下面我们就开始看一下核心的几个表,最后再给大家提供一段 SQL 去实践一下如何通过 Hive 的元数据获取 Hive 表的建表(DDL)语句。

1

表信息

TBLS

记录数据表的信息,可以作为左表,去关联表的其他信息。

TABLE_PARAMS

存储Hive表的属性信息,表结构如下,就三个字段。

每个表的信息基本上都有如下属性:

COLUMNS_V2

保存表的字段信息

2

分区信息

PARTITIONS

PARTITION_PARAMS

分区的参数

参数可选值:

PARTITION_KEYS

分区字段的名字,类型,顺序

PARTITION_KEY_VALS

分区字段的值

3

数据库信息

DBS

记录数据库的信息

4

版本信息

Version

该表只能有一条记录,保存了 Hive 的版本信息。

5

存储相关

SDS

此对象包含有关属于表的数据的物理存储的所有信息,数据表的存储描述。

SD_PARAMS

该表存储Hive存储的属性信息,在创建表时候使用. 通过STORED BY

6

序列化相关,存储格式

SERDES

记录序列化和反序列化信息

SERDES_PARAM

7

自定义函数

FUNCS

记录用户的自定义函数

8

如何从元数据获取DDL语句

sql 如下,可以从元数据种获取 Hive 建表语句,xxxx 替换成表名

代码语言:javascript
复制
select concat('create table ',t.tbl_name,' (\n',c.col_string,')',
  case pk.partition_string WHEN NULL then NULL ELSE concat('\npartition by (',pk.partition_string,')') end,
  case se.slib when null then null else concat('\nrow format serde\n''',se.slib,'''\n') end,
  case sep.serde_id when null then null else concat('WITH SERDEPROPERTIES (\n',sep.params,')\n') end,
  'stored as inputformat\n''',
  s.input_format,'''\noutputformat\n''',
  s.output_format,'\nlocation\n''',s.location,''';'
) as ddl_sql
from TBLS t left join (select tbl_id,group_concat(concat_ws(' ',pkey_name,pkey_type,concat("'",PKEY_COMMENT,"'"))) as partition_string from PARTITION_KEYS group by tbl_id order by integer_idx) pk on t.tbl_id = pk.tbl_id
left join DBS d on t.db_id = d.db_id
left join SDS s on t.sd_id = s.sd_id
left join SERDES se on s.serde_id = se.serde_id
left join (select serde_id,group_concat(concat_ws('=',concat('''',param_key,''''),concat('''',param_value,'''\n'))) params from SERDE_PARAMS group by serde_id) sep on se.serde_id = sep.serde_id
left join (select cd_id, group_concat(concat_ws(' ',column_name,type_name,"comment",concat("'",comment,"'")) separator ',\n') as col_string from COLUMNS_V2 group by cd_id order by integer_idx) c on s.cd_id = c.cd_id
WHERE t.TBL_NAME = 'xxxx'
-- and t.owner = ''
-- and d.name = ''
group by  d.name, t.owner,t.tbl_name;

建议收藏备忘,接下来我会分享更多实用的内容。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-10-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据学习指南 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • TBLS
    • TABLE_PARAMS
      • COLUMNS_V2
        • PARTITIONS
          • PARTITION_PARAMS
            • PARTITION_KEYS
              • PARTITION_KEY_VALS
                • DBS
                  • SD_PARAMS
                    • SERDES
                      • SERDES_PARAM
                      相关产品与服务
                      对象存储
                      对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档