本编文章主要介绍数据中台核心模块—元数据模块的一些建设经验分享,供大家一起交流学习。
一、什么是元数据
元数据可以简单理解为是数据的"数据",它描述了数据的特征,属性,来源和其他一些数据的基本信息,常用来管理和使用数据,在数据中台概念中,元数据主要包括业务元数据和中台元数据两部分。
二、元数据基本组成
数据中台中的元数据主要包括数据源
,数据库
,数据表
和元字段
四部分。
“数据源”,“数据库”,“数据表"和"字段"这4个名词相信大家都已经很熟悉了,不管是关系型数据库还是非关系型数据库都会包含这些基本信息,因此在这里就不做过多解释和说明。但眼尖的同学可能会发现图中引入了其他3个关键词"虚拟库”,“虚拟表”,“虚拟字段”,看到这,可能问题很多的小明就会发出灵魂三问:
-
什么是虚拟库,虚拟表和虚拟字段?
-
为什么要建设虚拟字段?
-
怎么建设和使用虚拟字段?
如果你也有这样的问题,那么就请跟继续往下看:
2.1 什么是虚拟库,虚拟表和虚拟字段?
数据中台的基本功能之一就是能够处理各种异构数据,这些数据可能是业务数据库数据,可能是埋点数据,也可能是日志数据。数据形式不同也必将导致采集这些数据的方式有所不同:对于业务数据库,可能倾向于CDC技术,而对于日志和埋点数据,可能更多的是考虑通过Kafka
的方式采集。因此,数据源的创建应该是包含多种多样的,在这里,我们将MySQL
,Oracle
等定义为常见数据源,而将Kafka
定义为虚拟数据源。
虚拟库和MySQL
中的数据库是一个概念,如果我们把Kafka
定义为虚拟数据源,那么虚拟库就是部分Topic
的集合,而每个具体的Topic
就是一张虚拟表,而Topic
中每条数据的所有字段,就是虚拟字段。
2.2 为什么要虚拟字段?
元数据贯穿数据中台所有模块,尤其在数据采集模块中使用最为复杂。举个例子,如果Kafka的某个Topic中数据需要接入到数仓中,Topic中有 a,b,c三个字段,而对应的数仓中的字段名为a,b,d,我们思考如下问题:
怎么准确接入这些字段?按照正常思路,我们可以采用字段名相等映射的方式将数据采集,那如果源字段名和目标字段名不一致,就会导致该字段不能被正常采集到数仓,所以为了避免出现因为字段名映射导致的问题,可以采用虚拟字段来做转换操作。
三、元数据基本设计流程
元数据主要包含3部分内容,每块内容都有自己的逻辑,下图是一个简单的设计流程图:
在元数据这里需要特殊说明以下几点:
- 元数据同步方式
元数据同步可以自动同步,也可以手动同步。自动同步每半个小时同步一次,如果源库表结构发生变更,那就保留最新的结构信息,如果没发生改变,则不做更新。
其次,如果能够自动获取到外部数据源中的基本信息(比如查询MySQL
的information_schema
数据库中tables
和columns
),可以采用JDBC
连接或者其他方式同步;如果是虚拟数据源类型,没办法做到自动同步,则只能通过手动方式变更(手动新增或删除字段映射关系)。
- 元数据同步级别
元数据同步可以是数据源级别的,也可以数据库级别的,也可以是表级别的,数据源同步每次会全量同步某个数据源下的所有库和表,数据库同步每次只会同步选定数据库下的所有表,数据表同步只会同步当前表的结构信息,粒度从大到小,同步的数据量也从多到少。在使用场景中,数据库级别的同步适用于表新增的场景,数据表级别的同步使用于表结构变更的场景。
- 字段元数据版本控制
在字段元数据设计过程中,保留版本概念,多次同步元数据时,保留同步的版本信息,在使用字段元数据时,根据版本号选择最新的。
四、总结
元数据设计与开发是数据中台开发的第一步,元数据结构设计好坏,会直接影响数据中台其他模块的使用方式,本编文章简单介绍了元数据设计的思路和注意事项,供大家参考。接下来,会为大家分享数据中台核心模块—数据采集的一些建设思路。
最后,如果你也喜欢数据中台,或正在开发数据中台,欢迎大家私信一起交流。