背景
当前七猫大数据在多云环境下的数据开发过程中,库表信息依赖各个云平台进行管理,缺乏统一的元数据查询工具入口,导致了寻表困难的问题。在早期的快速开发阶段,我们追求高效率,忽视了元数据的管理和维护,这给后续的数据治理带来了一定的"技术债务"。
为了解决这个问题,七猫大数据团队已经开始着手多云环境下的元数据管理解决方案。该解决方案旨在提供一个统一的元数据管理平台,使用户能够方便地查找和访问各个云平台中的库表信息。通过该平台,用户可以快速搜索和浏览库表的元数据,包括表结构、字段信息、数据来源等关键信息。这将大大简化数据开发过程中的寻表工作,提高开发效率和准确性。
痛点问题
技术问题:
- 各个云平台账号体系不统一
- 各个云平台对存储的元数据管理的方式不同
- 元数据的采集和更新需要尽可能实时
业务问题:
如果你是数据分析,数据产品或数据开发人员,可能会遇到以下问题:
- 不知道自己要找的数据在哪张表里。
- 找到了表,不清楚表里字段的注释和单位是什么。
- 写 SQL 查询数据的时候,不清楚分区字段是什么。
- 写好了 SQL 准备运行,发现数据已经归档无法查询。
- 不清楚计算口径,不太敢用。
- 想要修改某张表的数据口径,担心这一改动会不会影响其他数据表。
解决思路
针对以上提到的痛点问题,我们做了如下方式的解决尝试。
技术上的问题解决
- 各个云平台账号不一的问题。
云平台上我们申请了专用的子账号,设置好相应的数据读取权限,专门用于元数据的获取。避免使用临时账号或者个人账号来处理云上数据导致的问题。 - 各个云平台对各个元数据管理的方式不同。
各个云厂商有自己的元数据管理方式,比如阿里云的对于Hive的管理使用是数据湖构建(Data Lake Formation,DLF), 还有托管的MySQL、ClickHouse等存储的数据库。在技术上我们维护了数据源到平台之间的映射,通过统一暴露的数据源ID(CONN_UID)便可以找到对应数据源的相应链接方式,然后通过各个云平台提供的API,我们在其上做了增强应用到自己的元数据管理平台中。 - 元数据的采集和更新需要尽可能实时
对于这个问题,我们采用了T+1的更新方式,主要是考虑到实现的难度和性价比。对于T+0的更新方式需要捕获元数据的变更数据进行实时链路解析处理,实现起来架构较复杂且需求较少。当下我们T+1的数据处理方式能满足绝大部分的需求,如果未来用户的需求发生了变化,我们也可以修改采集数据的调度频率来支持。
业务上的问题解决:
- 由于没有元数据统一管理导致数据开发和业务方寻表难的问题。
通过引入元数据管理服务,我们解决了数据开发和业务方寻表难的问题。现在,用户可以通过元数据管理服务轻松查找和访问他们所需的数据表信息。元数据提供了数据表的详细描述、字段信息、数据来源等关键信息,使用户能够准确理解和使用数据表,节省了查找和理解数据的时间和精力。 - 数据表描述和数据口径缺失导致工作效率低下的问题。
元数据管理可以记录和存储数据表的描述信息,包括数据表的目的、业务含义、数据来源等。这些描述信息可以帮助用户了解数据表的含义和用途,并准确理解数据的含义和解释。数据口径是数据表的定义和解释,包括数据表的字段含义、数据类型、格式等。通过元数据管理,用户可以快速查找和理解数据表的描述和数据口径,提高数据的可理解性和正确使用。 - 分区键和分区类型不清楚的问题。
由于历史原因,在数仓建设的初期,没有进行规范化和统一的表分区键和分区类型的设计。这导致了在数仓中存在多种多样的分区键和分区类型的情况。这种混乱的分区设计给数据使用方带来了困扰和不便。
为了解决这个问题,我们在元数据管理系统中进行了标识。与此同时制定一套规范和准则,定义统一的分区键和分区类型的选择和使用方式。这样可以简化数据使用方的操作,提高查询效率,并降低数据维护的复杂性。
数据资产平台-元数据管理
数据资产平台架构整体设计
数据资产平台总的来说分为三层:存储层、应用层、接入层。元数据管理模块是数据资产平台的一部分,如下图所示。
元数据管理模块主要功能
元数据管理平台是一个统一接入、管理、加工数据,提升数据查询性能、产出数据洞察的系统。2023年Q3开始建设,目前有以下几个主要功能:
- 通过数据表的注释或者数据表的描述信息,搜索相关数据表;
- 找到数据之后,查看数据表的字段、字段注释、字段描述、责任人;
- 一键生成 SQL 示例,能够直接在 Superset 中运行,自动识别分区字段和分区格式;
- 一键生成的 Select SQL 中包含了数据表的所有字段,方便用户裁剪;
- 集成了数据生命周期管理的功能,可以按需定义数据表的归档周期和清理策略;
- 支持对数据表和字段补充业务描述信息,方便管理口径和业务描述;如果是研发人员,可以直接跳转到代码库查看代码;
元数据管理主要功能页面
- 元数据库
针对不同数据源,展示了其下所含数据库,通过数据库的“查看数据表”即可跳转到数据表列表页。
- 元数据表
元数据列表页展示对应平台下的所有表相关信息,包含了关键的库名,表名以及标签和负责人信息。通过查看查看详情
查看数据表的详细信息,如表基础信息,存储策略,列信息和分区信息。通过SQL
自动生成SQL查询语句,方便用户在数据查询时候直接使用。
- 数据表详情
数据表详情包含了库表信息,分区格式,负责人,存储位置,以及数据表创建时间和代码开发路径等信息。
- 表字段详情
表字段详情中展示了字段注释,如果之前有缺失的可以在标签中进行补充说明,进一步完善数据口径。
- 表分区详情
表分区展示了表当前存在的数据分区列表,方便用户查询指定分区的数据。
未来规划
尽管元数据管理服务的V1.0版本已经上线并开始使用,解决了从0到1的过程,但我们仍然面临着一些挑战,需要进一步改进,以使其能够从“能用”变为“好用”。
以下是目前平台存在的问题和改进方向:
- 查询和检索优化:目前平台在查询和检索元数据时还可以进一步优化。
- 提供简单易用的API:为了与其他部门合作,我们需要提供简单易用的API,以帮助他们获取元数据的能力。
- 扩展支持的数据源:目前平台支持的元数据源还比较有限,我们需要将来接入更多的数据源。
未来元数据管理主要规划如下:
- 全面支持数据表生命周期管理。
我们计划在未来版本中全面支持数据表的生命周期管理功能。这包括自动归档和自动清理功能,可以根据设定的规则和策略,自动将数据表归档到长期存储或进行定期清理,以优化存储资源的利用和数据表的管理效率。 - 提供统一数据查询入口。
我们计划提供一个统一的数据查询入口,使用户能够通过一个界面或API访问和查询各种数据源中的数据。这将简化用户的查询操作,提高查询效率,并提供一致的查询体验,无论数据存储在哪里。 - 支持元数据结合模型管理与指标管理的能力。
我们将进一步增强元数据管理与模型管理和指标管理的集成能力。通过将元数据与模型和指标关联起来,用户可以更好地理解和管理模型和指标的基础数据,提高模型的准确性和指标的可信度。这将为数据驱动的决策提供更强大的支持。 - 支持实时元数据字段更新同步。
我们将引入实时元数据字段更新同步功能,使用户能够及时获取和同步数据表字段的变化。当数据表结构发生变化时,用户可以立即得知并进行相应的调整和处理,以保证数据的准确性和一致性。
最后,我们将不断完善和提升元数据管理服务,以满足用户日益增长的需求。我们将持续关注用户反馈和市场动态,不断优化产品功能和性能,助力用户实现更好的数据管理和数据治理。