数仓模型HIVE业务元数据治理:专题构建方案
Posted 小基基o_O
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数仓模型HIVE业务元数据治理:专题构建方案相关的知识,希望对你有一定的参考价值。
文章目录
概述
库的划分
- 在数据仓库中,用不同的库来存储不同业务的数据,期望做到不同库的表之间不会有关联
- 一家公司可能有多个业务系统,例如:HR系统、商业系统……
对此,建立商业库dw01_biz
和HR库dw02_hr
,期望dw01_biz.表
和dw02_hr.表
不会JOIN
到一起
专题
- 专题是指针对某个特定对象而特别收集制作而成的一种集中作品
这个对象可以是具体的某个人物或者某个事物,也可以是某个抽象的范围或者领域 - 在数据仓库,当同一个库中的表过多时,就需要对表进行归类
而这个归类是抽象的、逻辑的,默认情况下不是物理的 - 数仓分层可理解为:按照有序的计算流程,对表进行归类
例如ODS=>DWD=>DWS=>ADS是有序的计算流程,分层名可添加到表名中,例如ods_user
- 数仓的英文概念说到,Data warehouse is subject-oriented
就是说,数据仓库是面向专题的 - 专题划分:依据(子)业务流程,将数据划分到不同的区域
专题的划分可以 多维度(按业务、按部门)、多层级(一级部门、二级部门)
通常,1个表属于1个专题 - 一些文章提及数据域、主题、主题域等概念,在我看来 它们和专题差别不大,都属于业务元数据
如果说数仓分层是横向划分,那么专题就是纵向划分
商业专题 | 业务过程 | 命名参考 |
---|---|---|
交易 | 加购、下单、取消订单、支付成功、退单、退款成功 | trade |
流量 | 页面浏览、启动应用、动作、曝光、错误 | traffic |
用户 | 注册、登录 | user |
互动 | 收藏、评价 | interaction |
优惠 | 优惠券领取、优惠券使用(下单)、优惠券使用(支付)、满减活动 | discount |
商品 | 上架、下架 | goods |
物流 | 库存、出货、进货 | logistics |
广告 | advertising | |
…… | ||
其它 | others |
构建专题
- 分层和专题都是逻辑上对表进行归类,是抽象的,默认情况不是物理的
- 分层(相对地)脱离业务,有(相对)统一的标准,是稳定的、少变的
因此分层可作为表名的一部分
分层还能手动设计为物理意义上的划分(例如建表时指定LOCATION
) - 专题的设计跟业务挂钩,不同的公司有不同的业务,没有统一的标准
对同一业务,不同的人有不同的理解
业务和需求是多变的
因此专题是不稳定的、多变的
因此专题不适合作为表名的一部分,不适合进行物理意义上的划分 - 对于由HIVE构建的数仓,可借助
TBLPROPERTIES
来构建专题
下面以category
单词构建专题,附加到HIVE表属性,也可以用其它单词,如:subject
HIVE建表时,添加专题
TBLPROPERTIES('category1'='类别1','category2'='类别2')
HIVE建表后,补充专题
ALTER TABLE 表 SET TBLPROPERTIES('category1'='类别1');
ALTER TABLE 表 SET TBLPROPERTIES('category2'='类别2');
专题展示
表信息
SELECT
t.`TBL_NAME` AS `表名`
,c.`PARAM_VALUE` AS `表注释`
,c1.`PARAM_VALUE` AS `一级分类`
,c2.`PARAM_VALUE` AS `二级分类`
FROM (SELECT `DB_ID` FROM `DBS` WHERE `NAME`='库名')b
LEFT JOIN(SELECT `DB_ID`,`TBL_ID`,`TBL_NAME` FROM `TBLS` WHERE `TBL_TYPE`='EXTERNAL_TABLE')t ON b.`DB_ID`=t.`DB_ID`
LEFT JOIN(
SELECT `TBL_ID`,`PARAM_VALUE`
FROM `TABLE_PARAMS`
WHERE `PARAM_KEY`='comment'
)c ON t.`TBL_ID`=c.`TBL_ID`
LEFT JOIN(
SELECT `TBL_ID`,`PARAM_VALUE`
FROM `TABLE_PARAMS`
WHERE `PARAM_KEY`='category1'
)c1 ON t.`TBL_ID`=c1.`TBL_ID`
LEFT JOIN(
SELECT `TBL_ID`,`PARAM_VALUE`
FROM `TABLE_PARAMS`
WHERE `PARAM_KEY`='category2'
)c2 ON t.`TBL_ID`=c2.`TBL_ID`;
字段信息
SELECT
t.`TBL_NAME` AS `表名`
,c.`COL_NAME` AS `字段名`
,c.`COL_COMMENT` AS `字段注释`
,c.`DATA_TYPE` AS `数据类型`
,c.`COL_TYPE` AS `字段类型`
-- 库
FROM (SELECT `DB_ID` FROM `DBS` WHERE `NAME`='库名') b
-- 表
INNER JOIN (SELECT `DB_ID`,`TBL_ID`,`TBL_NAME` FROM `TBLS` WHERE `TBL_TYPE`='EXTERNAL_TABLE'
) t ON b.`DB_ID`=t.`DB_ID`
-- 字段注释
LEFT JOIN((
-- 分区注释
SELECT
`TBL_ID`, -- 表ID
`PKEY_NAME` `COL_NAME`, -- 分区名
`PKEY_COMMENT` `COL_COMMENT`, -- 分区注释
`PKEY_TYPE` `DATA_TYPE`, -- 数据类型
'partition' `COL_TYPE` -- 类型
FROM `PARTITION_KEYS`
)UNION ALL(
-- 列注释
SELECT
t.`TBL_ID` `TBL_ID`, -- 表ID
c.`COLUMN_NAME` `COL_NAME`, -- 字段名
c.`COMMENT` `COL_COMMENT`, -- 字段注释
c.`TYPE_NAME` `DATA_TYPE`, -- 字段的数据类型
'column' `COL_TYPE` -- 类型
FROM (
SELECT b.`TBL_ID`,s.`CD_ID` FROM `TBLS`b
INNER JOIN `SDS`s ON s.`SD_ID`=b.`SD_ID`
)t
LEFT JOIN `COLUMNS_V2`c ON t.`CD_ID`=c.`CD_ID`
))c ON t.`TBL_ID`=c.`TBL_ID`;
Superset可视化效果
以上是关于数仓模型HIVE业务元数据治理:专题构建方案的主要内容,如果未能解决你的问题,请参考以下文章