数据治理中的元数据采集(从Hive元数据库中获取ods层表的元数据信息)

最近在做的数据治理项目中有个业务需求是:从hive的元数据库中获取到贴源层(也就是ods层)下所有表的元数据信息,这里大致描述一下实现的过程。

一、前期准备知识: Hive元数据信息对应的MySQL数据库表

Hive 的元数据信息通常存储在关系型数据库中,常用MySQL数据库作为元数据库管理。Hive的元数据信息在MySQL数据中有57张表:
mysql> show tables;
±--------------------------+
| Tables_in_metastore_spark |
±--------------------------+
| AUX_TABLE |
| BUCKETING_COLS |
| CDS |
| COLUMNS_V2 |
| COMPACTION_QUEUE |
| COMPLETED_COMPACTIONS |
| COMPLETED_TXN_COMPONENTS |
| DATABASE_PARAMS |
| DBS |
| DB_PRIVS |
| DELEGATION_TOKENS |
| FUNCS |
| FUNC_RU |
| GLOBAL_PRIVS |
| HIVE_LOCKS |
| IDXS |
| INDEX_PARAMS |
| KEY_CONSTRAINTS |
| MASTER_KEYS |
| NEXT_COMPACTION_QUEUE_ID |
| NEXT_LOCK_ID |
| NEXT_TXN_ID |
| NOTIFICATION_LOG |
| NOTIFICATION_SEQUENCE |
| NUCLEUS_TABLES |
| PARTITIONS |
| PARTITION_EVENTS |
| PARTITION_KEYS |
| PARTITION_KEY_VALS |
| PARTITION_PARAMS |
| PART_COL_PRIVS |
| PART_COL_STATS |
| PART_PRIVS |
| ROLES |
| ROLE_MAP |
| SDS |
| SD_PARAMS |
| SEQUENCE_TABLE |
| SERDES |
| SERDE_PARAMS |
| SKEWED_COL_NAMES |
| SKEWED_COL_VALUE_LOC_MAP |
| SKEWED_STRING_LIST |
| SKEWED_STRING_LIST_VALUES |
| SKEWED_VALUES |
| SORT_COLS |
| TABLE_PARAMS |
| TAB_COL_STATS |
| TBLS |
| TBL_COL_PRIVS |
| TBL_PRIVS |
| TXNS |
| TXN_COMPONENTS |
| TYPES |
| TYPE_FIELDS |
| VERSION |
| WRITE_SET |
±--------------------------+
57 rows in set (0.00 sec)

详细对应的表信息可以参考:https://www.cnblogs.com/qingyunzong/p/8710356.html
这里我用到的有以下几个表:
1、TBLS
该表中存储Hive表、视图、索引表的基本信息。
元数据表字段 说明
TBL_ID 表ID
CREATE_TIME 创建时间
DB_ID 数据库ID
LAST_ACCESS_TIME 上次访问时间
OWNER 所有者
RETENTION 保留字段
SD_ID 序列化配置信息
TBL_NAME 表名
TBL_TYPE 表类型
VIEW_EXPANDED_TEXT 视图的详细HQL语句
VIEW_ORIGINAL_TEXT 视图的原始HQL语句

2、SDS
该表保存文件存储的基本信息,如INPUT_FORMAT、OUTPUT_FORMAT、是否压缩等。
TBLS表中的SD_ID与该表关联,可以获取Hive表的存储信息。
元数据表字段 说明 示例数据
SD_ID 存储信息ID
CD_ID 字段信息ID
INPUT_FORMAT 文件输入格式
IS_COMPRESSED 是否压缩
IS_STOREDASSUBDIRECTORIES 是否以子目录存储
LOCATION HDFS路径
NUM_BUCKETS 分桶数量
OUTPUT_FORMAT 文件输出格式
SERDE_ID 序列化类ID

3、COLUMNS_V2
该表存储表对应的字段信息。
元数据表字段 说明 示例数据
CD_ID 字段信息ID
COMMENT 字段注释
COLUMN_NAME 字段名
TYPE_NAME 字段类型
INTEGER_IDX 字段顺序

二、查询获取所需要的表的元数据信息

由于我们的数仓每一层都设有一个专门的库,这里假设ods层就是下图中查询到的hivespark库,其DB_ID为2
在这里插入图片描述
编写SQL语句查询ods库下所有表的元数据信息:

select
    t.DB_ID,
    t.TBL_NAME,
    c.COLUMN_NAME,
    c.TYPE_NAME,
    c.COMMENT,
    c.INTEGER_IDX
into outfile "/tmp/metadata.xls"
from TBLS t
join SDS s on s.SD_ID = t.SD_ID
join COLUMNS_V2 c on c.CD_ID = s.CD_ID
where t.DB_ID = 2
order by t.TBL_NAME,c.INTEGER_IDX;

这样就把ods层所有表的元数据信息都查询到并且导入到了目标文件: into outfile “/tmp/metadata.xls”
当然,如果是使用Navicat等工具的话可以直接对查询结果集进行手动导出,不需要使用 into outfile了

这样就实现了需求。

猜你喜欢

转载自blog.csdn.net/weixin_43230682/article/details/106170874