睿治

智能数据治理平台

睿治作为国内功能最全的数据治理产品之一,入选IDC企业数据治理实施部署指南。同时,在IDC发布的《中国数据治理市场份额,2022》报告中,蝉联数据治理解决方案市场份额第一。

自动化生成数据血缘关系研究与实践

时间:2023-10-19来源:亚洲首帅浏览数:209

各行业使用不同的数据库语言编写代码,一方面需要明确加工逻辑与业务逻辑的一致性,另一方面也增加了数据表字段加工带来的数据复杂性,这种复杂性会导致系统维护数据表字段关系过多,层级过深,进而难以追溯和定位数据表字段出现问题的根本原因。本文旨在研究一种自动化生成数据血缘关系方法,根据加工批量脚本中出现的数据表各个字段的语法分析结果,对数据表字段关系进行血缘分析,这样既可以实现对加工表字段进行来源表字段或目标表字段关系的存储,又可以降低对来源表字段和目标表字段追溯和定位的成本,同时,血缘分析算法与数据库加工批量存储、计算和查询逻辑松耦合,使得血缘分析算法具有可替换性、可更新性。


一、数据血缘分析概述

数据血缘分析可以对数据表字段间关系进行追溯,进而分析上下游加工表数据发生变化时的影响。在数据编织方面,也可以通过数据血缘分析将数据中大量有价值的信息有逻辑地提取和分析。然而,对于大量的后台加工批量脚本而言,数据库数据表及字段间血缘关系仍然需要通过研究算法和生产实践来进行捕获和验证,尤其对于涉及到作业调度管理的批量服务系统而言,自动化生成数据血缘关系则可以动态记录数据表及字段间血缘关系。目前针对业务查询后台加工批量系统而言,自动化生成数据血缘关系面临以下挑战。

一是后台加工批量数量大,血缘分析周期长。

二是表加工方式多样,一些表仅需要分析来源表字段关系,一些表则需要分析多个子查询多个关联表字段关系,还有一些表需要分析包含UNION关键字的加工表字段关系。

三是SQL代码中字段所属表不够具体,基于文本级别的血缘分析对于不写或漏写表别名的来源字段,无法定位该字段的来源表归属,进而无法进行血缘分析。

四是血缘分析需要验证数据表字段的真实存在性,但数据表被删除则无法进行验证。

五是血缘分析过程需保证不影响后台加工批量服务的连续性。


二、行业实践情况

针对数据血缘分析存在的这些难题,国内诸多行业企业设计并搭建数据血缘分析系统和平台,以解决数据规模大、数据质量差、数据检测难等问题。

在互联网行业,字节跳动在数据血缘建设过程中遇到了数据源种类多、数据处理逻辑复杂、数据规模大等问题,对此,其通过设计合理的数据血缘模型和优化方案实现了数据血缘的存储和导出,并提供了多种数据血缘的具体用例,例如数据质量监控、数据安全审计、数据价值评估等。

在物流行业,满帮集团采用了先采集后解析的方案,对各个计算引擎的SQL进行血缘解析,并使用图数据库进行血缘存储和检索。满帮集团使用数据血缘技术实现了全链路数据治理,提升了数据质量、数据安全和数据价值。

在银行业,微众银行为了对全局数据的来源及影响范围进行实时检测和深度分析,目前全行AIOps都已经接入NebulaGraph平台用于数据血缘治理。


三、相关技术

1.词法分析

词法分析是计算机科学中将字符序列转换为单词Token序列的过程,序列可以是关键字、标识符、运算符、标点符号等。词法分析阶段是编译过程的第一个阶段,从左到右逐个字符进行扫描,然后根据构词规则识别单词。单词可以直接匹配,也可以使用正则表达式进行定义后匹配。对于复杂单词序列,当定义好单词对应的正则表达式,就可以通过扫描并进行正则表达式匹配来获取程序中所有单词序列。数据库语言进行词法分析的流程示意如图1所示。

图1 数据库语言词法分析流程示意

2.语法分析

语法分析是编译过程的一个逻辑阶段。通过语法分析,程序代码段被解析成若干个语法分析树,树节点包含了所有单词序列的上下级关系。数据库语言语法分析按照分号划分代码段,每个代码段中的所有单词都会被解析并赋予类型,例如SELECT就是DML语言Keyword关键字,而字段名和表名则为Identifier。SQL语法分析过程样例如图2所示。

图2 SQL语法分析过程样例

3.血缘分析

(1)基于文本级的SQL血缘分析方法

基于文本级的SQL血缘分析方法依旧可以获得绝大部分的数据表字段关系,甚至可以设计出适用于绝大部分SQL语言的血缘分析方法,具有便捷性和高准确性。基于文本级的SQL血缘分析方法流程示意如图3所示。

图3 基于文本级的SQL血缘分析方法流程示意

(2)基于底层编译的SQL血缘分析方法

数据库系统根据SQL底层编译执行逻辑维护一系列血缘关系表,通过SQL程序编译逻辑直接获取表字段关系,具有高效性和高准确性。但因为数据库系统设计闭源,此方法并非主流的血缘分析方法。基于底层编译的SQL血缘分析方法流程示意图如图4所示。

图4 基于底层编译的SQL血缘分析方法流程示意

4.有向图

有向图是一幅具有方向性的图,每条方向的边都连接着一对有序的顶点。在血缘关系图中,有方向的边代表数据流向,与之对应的有序顶点分别代表了来源数据表或字段和目标数据表或字段。有向图和血缘关系有向图样例如图5所示。

图5 有向图和血缘关系有向图样例

其中图(a)为1到9节点构成的有向图,图(b)为数据血缘关系图,字母代表数据表或者数据表字段,其中A为来源表或来源字段,B到E为中间表或中间字段,F到I为目标表或目标字段,数据流向如箭头指向所示。


四、整体架构设计

本文提出的自动化生成数据血缘关系总体流程分为以下四个方面。

一是程序代码语法分析,根据后台加工批量脚本中存在的数据表及其各个字段的语法分析结果,将其中加工表间逻辑、字段加工方式等信息进行结构化存储。

二是数据表字段血缘分析,根据语法分析生成的结果将需要解析的数据表字段进行提取和计算拓扑关系后存储到有向图中。

三是血缘关系存储,将需要存储的数据表字段血缘关系按照图数据库存储方式写回元数据库中。

四是血缘分析调用,根据后台加工批量的调度逻辑,将需要血缘分析的数据表字段进行动态存储后,返回上层应用。

五是血缘关系可视化,通过构建前台可视化查询界面,大幅度提升开发人员查找加工表与上游表链路关系和上游数据表来源的效率。


1.程序代码语法分析

(1)设计词法分析表

语法分析通过词法分析将程序中出现的字母数字等符号组合的单词序列进行解析,构建单词序列和单词类型的“词法分析表”。对于关键字匹配,可直接通过字符串扫描得到程序代码中的关键字,例如AND、FROM、LIKE等。对于数字、标点符号和运算符而言,则需要通过正则表达式进行匹配。自主设计的词法分析表见表1。

表1 词法分析表

(2)切割存在关键字UNION的代码段

UNION关键字用于合并两个或多个SELECT语句的结果集,UNION内部的SELECT语句必须拥有相同数量的列,列也必须拥有相似的数据类型,同时每条SELECT语句中列的顺序必须相同。对于UNION ALL语法而言,UNION结果集中的列名总是等于UNION中第一个SELECT语句中的列名。基于以上概念,在血缘分析之前,可以根据UNION数量切割SQL代码段,拆分成若干个单一的代码段,以便进行语法分析。以UNION ALL语法的切割样例如图6所示。

图6 UNION ALL语法的切割样例

(3)自动填充加工字段所属表别名

无表别名字段的SQL代码样例如图7所示。

图7 无表别名字段的SQL代码样例

自动填充字段所属表别名需要处理两种情况,一是数据库数据表的字段表别名填充,二是子查询的字段表别名填充。数据库数据表的字段表别名填充只需要查询数据表的字段结构即可确定加工表字段所属数据表关系,而子查询的字段表别名填充则需要对子查询中的数据表进行别名映射,同样需要查询数据表的字段结构。如果子查询中包含子查询,则需要进行数据表递归映射,可构建对应的数据结构遍历所有数据表。由于子查询中可能存在多个数据表或嵌套子查询,因此数据表字段映射关系需要逐层进行传递,进而填充最外层的字段所属数据表别名。以上这些情况处理相对复杂,实现难度较大。

2.数字表字段血缘分析

数据表字段血缘分析流程如图8所示。

图8 数据表字段血缘分析流程

其中,①表示通过语法分析提取程序代码中每个代码段包含的表字段信息,并构建对应的有向图。

②表示在有向图中,根据入度为0和出度为0分别得到多个来源点和多个目标点,它们之间存在着互相连接的有向边,代表当前代码段的表字段间关系。

③表示在有向图中,通过寻找源点到目标点的所有简单路径的算法,得到每个代码段中所有表字段间血缘关系路径。

④表示通过合并每个代码段出现的相同表字段所在路径,简化得到最终的血缘分析路径。


(1)生成数据表字段关系有向图

生成数据表字段关系有向图前,通过语法分析过程,可以得到当前程序中每个代码段对应的语法分析树,并通过提取表字段信息,构建每个代码段对应的有向图。有向图中每个点代表当前代码段中每个数据表字段,根据入度为0和出度为0分别得到多个来源点和多个目标点。数据表字段关系有向图样例如图9所示。

图9 数据表字段关系有向图样例

(2)合并数据表字段血缘分析路径

通过寻找源点到目标点的所有简单路径的算法,可以得到当前代码段中所有表字段间血缘关系路径,其中简单路径是没有重复节点的路径,因此可以通过集合的并集操作合并代码段中出现相同表字段所在路径,得到最终的血缘分析路径,目的是提炼和简化血缘分析结果。

3.血缘关系存储

血缘分析关系存储需要设计血缘分析表。血缘分析表示例见表2。

表2 血缘分析表示例

以上表格中显示的血缘路径示例为:

在存储表字段级两点间血缘关系前,还需要进行血缘路径递归校验,防止存储的点对点路径出现错误或者遗漏。数据表字段血缘关系存储流程如图10所示。

图10 数据表字段血缘关系存储流程

其中,①表示根据血缘分析路径结果,通过访问数据库得到表字段类型名称,如果血缘路径中表和字段名无法对应,则排除该血缘分析结果。

②表示血缘分析路径中表字段与字段类型名称以及批量名称共同作为一组血缘关系数据,并按照“目标-来源”表字段关系方式进行数据存储

③表示在存储表字段级两点间血缘关系前,还需要进行血缘路径递归校验,防止存储的点对点路径出现错误或者遗漏。

④表示将校验正确的血缘关系数据存储至元数据库中,作为元数据进行管理。


4.血缘关系调用

血缘分析算法与数据库加工批量存储、计算和查询逻辑松耦合。血缘分析算法可以在批量编译执行完成后执行,即使数据表在之后的加工批量中被删除,也可以记录到数据表字段类型信息,保证数据表血缘关系数据的完整性。数据表字段血缘分析调用的流程如图11所示。

图11 数据表字段血缘分析调用流程

5.血缘关系可视化

基于以上架构设计,编写代码实现了一种自动化生成数据血缘关系的应用。到目前为止,通过以上方式构建了大部分数据表字段血缘关系,并通过构建前台可视化查询界面,大幅度提升开发人员查找加工表与上游表链路关系的效率,同时也极大方便了业务人员查询上游数据表来源。在可视化查询结果图中,节点代表加工表或者字段,点与点之间的箭头代表表间或者字段间存在血缘加工关系,颜色越深表示数据来源层级越高,颜色越浅代表数据加工层次越高。数据表字段血缘关系可视化查询效果示例如图12所示。

图12 数据表字段血缘关系可视化查询效果示例


五、总结与未来展望

为有效解决实际生产中难以追溯数据表字段血缘关系的问题,本文提出了一种自动化生成数据血缘关系的方法。本文首先介绍了当前传统血缘分析方法的技术原理,随后结合行内的后台加工批量的具体情况,着力描述了血缘分析的解析过程和血缘关系的存储方法,然后针对研究与探索出的方案,详细阐述关键部分的实现方式。

未来,将从以下几个方面,继续深化对“血缘分析”的应用实践:

一是数据血缘分析可以将大数据和机器学习相结合,自动分析和优化数据,解决数据质量的问题。

二是数据血缘分析与区块链技术相结合,完善数据交换和数据共享机制。

三是对UNION关键字的代码重构血缘分析方法,使得新的血缘分析方法可以处理更为复杂的UNION关键字代码。

四是加强对代码规范的提示作用,可以根据血缘关系自动填充和更新血缘路径中数据表字段元数据。

(部分内容来源网络,如有侵权请联系删除)
立即申请数据分析/数据治理产品免费试用 我要试用
customer

在线咨询