掌桥专利:专业的专利平台
掌桥专利
首页

一种数据血缘关系可视化方法

文献发布时间:2023-06-19 16:06:26



技术领域

本发明属于数据处理技术领域,特别是涉及一种数据血缘关系可视化方法。

背景技术

ETL,是英文Extract-Transform-Load的缩写,用来描述将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端的过程。ETL一词较常用在数据仓库,但其对象并不限于数据仓库。ETL是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程,目的是将企业中的分散、零乱、标准不统一的数据整合到一起,为企业的决策提供分析依据,ETL是BI(商业智能)项目重要的一个环节。

数据治理里经常提到的一个词就是血缘分析,血缘分析是保证数据融合的一个手段,通过血缘分析实现数据融合处理的可追溯。大数据数据血缘是指数据产生的链路,直白点说,就是我们这个数据是怎么来的,经过了哪些过程和阶段。

数据血统,也叫做数据起源或数据谱系。任何的数据,从产生、ETL处理、加工、融合、流转,到最终消亡,数据之间自然会形成一种关系。好比人类社会中的人际关系,类似的一种关系来表达数据之间的这种关系,称之为数据的血缘关系。从技术角度来讲,数据A通过ETL处理生成了数据B,那么,我们会说,数据A与数据B具有血缘关系。不过与人类的血缘关系略有不同,数据血缘关系还具有一些个性化的特征。

现有的部分数据平台中数据血缘关系可视化,只能看到当前字段的直接上游和下游,无法直接显示查看更多层级的血缘关系;且为单个字段查看,无法查看整表所有字段的血缘关系。现有的部分数据平台中数据血缘关系可视化,虽然可以查看多级,但同一目标表中字段为分散的,且只能通过目标表向上游联级溯源。

发明内容

为了解决上述问题,本发明提出了一种数据血缘关系可视化方法,能够全面且直观的展示数据血缘关系。

为达到上述目的,本发明采用的技术方案是:一种数据血缘关系可视化方法,包括步骤:

S10,客户端向服务端传参数从数据库递归查询目标表的目标字段涉及的所有来源字段,获得转换表级血缘关系表;

S20,创建视图数据对象:判断所述转换表级血缘关系表是否为空,如果为空则设置视图数据对象属性编码为错误码,并设置属性信息为未查询到该表的血缘信息,并转入步骤S70;若不为空,则设置视图数据对象属性编码为正确码,并进行下一步,通过转换表级血缘关系表递归构建血缘涉及所有表和视图数据对象集合A,并赋值给视图数据对象的属性;

S30,使用转换表级血缘关系表和集合A递归构建血缘涉及字段关系集合B,并赋值给视图数据对象的属性;

S40,获取系统可视化配置信息,并将配置信息赋值给视图数据对象的属性;

S50,使用集合A和配置信息,计算视图绘制对象集合C,并赋值给视图数据对象的属性;

S60,使用集合B和配置信息,计算视图绘制线集合D,并赋值给视图数据对象的属性;

S70,将最后获得的视图数据对象格式化为文本传送客户端;

S80,客户端接收到文本转为视图数据对象,判断视图数据对象属性编码是否为正确码,如果不是则提示未查询到该表的血缘信息;如果是,客户端构建坐标系,并利用视图绘制对象集合C绘制视图;客户端根据集合D绘制线条和目标字段处的锚点,遍历集合D单个对象表;

S90,给字段元素添加焦点移入移出时间,控制血缘数据高亮;使屏幕焦点进入字段时高亮相关整个血缘路径。

进一步的是,在所述步骤S10中,客户端向服务端传参数目标库ID、目标表模式和目标表,服务端接收到参数目标库ID、目标表模式个目标表后从数据库递归查询目标表的目标字段涉及的所有来源字段,获得转换表级血缘关系表。

进一步的是,在所述步骤S10中,客户端向服务端传参数从数据库递归查询目标表的目标字段涉及的所有来源字段,获得转换表级血缘关系表,包括步骤:

S101,客户端向服务端传参数目标库ID、目标表模式和目标表;

S102,服务端接收参数目标库ID、目标表模式和目标表后从数据库表查询得到如下数据:

S103,遍历转换表级血缘关系表的单个对象表,单个对象表中获取id作为转换表级血缘关系表ID,转换表级血缘关系表ID从数据库表查询对应的字段血缘集合并赋值给转换表级血缘关系表;获取单个对象表中的来源库ID、来源表模式和来源表作为参数目标库ID、目标表模式和目标表;

S104,递归执行S101至S103获得上游或下游转换表级血缘关系表并赋值给当前对象表级血缘关系表,直到返回为空结束递归,获得最终的表级血缘关系表。

进一步的是,所述获取系统可视化配置信息包括:起始x偏移、起始y偏移、横向间隔、纵向间隔、字段字体大小和字段上下边距和字段左右边距、数据源名称字体大小和上下边距和左右边距、表模式名称字体大小和上下边距和左右边距、转换步骤对象主题色、数据库表对象主题色和线类型。

进一步的是,在所述步骤S80中,客户端接收到文本转为视图数据对象,判断视图数据对象属性编码是否为正确码,如果不是则提示未查询到该表的血缘信息;如果是,客户端构建坐标系,并利用视图绘制对象集合C绘制视图,包括步骤:

使用绝对布局,获取视图绘制对象集合C的x坐标、y坐标、宽度、高度、转换步骤对象主题色和数据库表对象主题色来绘制客户端浏览器的div标签,div标签中的元素id为视图绘制对象集合C中各对象id;

获取视图绘制对象集合C的标签、主题、数据源名称字体大小和上下边距和左右边距、表模式名称字体大小和上下边距和左右边距、转换步骤对象主题色以及数据库表对象主题色来绘制客户端浏览器的div标签,div标签中的文本来自视图绘制对象集合C中各对象的标签和主题;

视图绘制对象集合C中的columns视图,遍历单个对象表,建立columns视图的x坐标、y坐标、宽度、高度、字段字体大小和字段上下边距和字段左右边距来绘制客户端浏览器的div标签,div标签中的文本来自columns标签,div元素id为columns视图id。

进一步的是,在所述步骤S80中,客户端根据集合D绘制线条和目标字段处的锚点,遍历集合D单个对象表,包括步骤:

根据视图绘制线集合D获取目标Id和来源Id,通过目标Id和来源Id获取视图数据对象集合A中字段位置信息;

计算线条起始位置;

根据线类型和起始点、终止点进行线绘制;

在终止点点附近绘制锚点;

视图绘制线集合D中id作为浏览器页面绘制视图元素id。

进一步的是,在所述步骤S90中,给字段元素添加焦点移入移出时间,控制血缘数据高亮;使屏幕焦点进入字段时高亮相关整个血缘路径,包括步骤:

先判断当前字段是否为高亮,如果当前为高亮则不处理;如果当前字段不为高亮则,设置字段高亮,并获取字段对应id;

将字段对应id作为来源Id从视图绘制线集合D中找到所有下级目标字段设置高亮,并且获得连接目标字段的线并设置高亮;递归直到没有下游目标字段为止;或,将字段对应id作为来源Id从视图绘制线集合D中找到所有上级来源字段设置高亮,并且获得连接来源字段的线并设置高亮。递归直到没有上游来源字段为止;

屏幕焦点移出字段时清除所有高亮。

采用本技术方案的有益效果:

本发明以表为单位查看当前表为目标表中所有字段涉及的来源字段,或当前表为来源表中所有字段的目标表,不限层级;利用焦点移到字段上时高亮其涉及的血缘关系图;可以向下游联级查看所有目标库、目标表、目标字段,也可以向上游联级查看所有来源库、来源表、来源字段,清晰观察表与字段关系,字段与字段关系;能够全面且直观的展示数据血缘关系。

附图说明

图1为本发明的一种数据血缘关系可视化方法原理示意图。

具体实施方式

为了使本发明的目的、技术方案和优点更加清楚,下面结合附图对本发明作进一步阐述。

在本实施例中,参见图1所示,本发明提出了一种数据血缘关系可视化方法,包括步骤:

S10,客户端向服务端传参数从数据库递归查询目标表的目标字段涉及的所有来源字段,获得转换表级血缘关系表;

S20,创建视图数据对象:判断所述转换表级血缘关系表是否为空,如果为空则设置视图数据对象属性编码为错误码,并设置属性信息为未查询到该表的血缘信息,并转入步骤S70;若不为空,则设置视图数据对象属性编码为正确码,并进行下一步,通过转换表级血缘关系表递归构建血缘涉及所有表和视图数据对象集合A,并赋值给视图数据对象的属性;

S30,使用转换表级血缘关系表和集合A递归构建血缘涉及字段关系集合B,并赋值给视图数据对象的属性;

S40,获取系统可视化配置信息,并将配置信息赋值给视图数据对象的属性;

S50,使用集合A和配置信息,计算视图绘制对象集合C,并赋值给视图数据对象的属性;

S60,使用集合B和配置信息,计算视图绘制线集合D,并赋值给视图数据对象的属性;

S70,将最后获得的视图数据对象格式化为文本传送客户端;

S80,客户端接收到文本转为视图数据对象,判断视图数据对象属性编码是否为正确码,如果不是则提示未查询到该表的血缘信息;如果是,客户端构建坐标系,并利用视图绘制对象集合C绘制视图;客户端根据集合D绘制线条和目标字段处的锚点,遍历集合D单个对象表;

S90,给字段元素添加焦点移入移出时间,控制血缘数据高亮;使屏幕焦点进入字段时高亮相关整个血缘路径。

其中举例说明:

转换表级血缘关系表(tableLineage)

转换字段级血缘关系表(table_field_lineage)

作为上述实施例的优化方案,在所述步骤S10中,客户端向服务端传参数目标库ID、目标表模式和目标表,服务端接收到参数目标库ID、目标表模式个目标表后从数据库递归查询目标表的目标字段涉及的所有来源字段,获得转换表级血缘关系表。

在所述步骤S10中,客户端向服务端传参数从数据库递归查询目标表的目标字段涉及的所有来源字段,获得转换表级血缘关系表,包括步骤:

S101,客户端向服务端传参数目标库ID=470285336958455816、目标表模式=admin、目标表=user;

S102,服务端接收参数目标库ID、目标表模式和目标表后从数据库表table_lineage查询得到如下数据:

S103,遍历转换表级血缘关系表tableLineages的单个对象表tableLineage,单个对象表tableLineage中获取id作为转换表级血缘关系表ID=470285336958455814,转换表级血缘关系表ID=470285336958455817从数据库表table_lineage查询对应的字段血缘集合tableFieldLineages并赋值给转换表级血缘关系表tableLineages;获取单个对象表tableLineage中的来源库ID、来源表模式和来源表作为参数目标库ID、目标表模式和目标表;

S104,递归执行S101至S103获得上游或下游转换表级血缘关系表并赋值给当前对象表级血缘关系表,直到返回为空结束递归,获得最终的表级血缘关系表。

S20,创建视图数据对象result:判断所述转换表级血缘关系表tableLineages是否为空null,如果为空null则设置视图数据对象属性编码为错误码(即code为404),并设置属性信息message为未查询到该表的血缘信息,并转入步骤S70;若不为空,则设置视图数据对象属性编码为正确码(即code为200),并进行下一步,通过转换表级血缘关系表tableLineages递归构建血缘涉及所有表和视图数据对象集合A(objs),并赋值给视图数据对象的属性;

案例数据经过转换后得到objs,属性说明:

id:与数据库中id无关,在内存使用雪花算法中直接生成。

name:为对象名称。

type=table时则为表模式+”.”+表明;

type=trans时则为步骤名称。

schema:模式名,type=trans时为空。

database:数据源名,type=trans时为空。

dbId:数据源ID,type=trans时为空。

trans:type=trans时为转换名称。

showColumnNum:该对象显示时纵列位数。

显示时从左到右开始计算列位数,从1开始,到下一列对象加1,上游的表在左边,下游的表在右边。

以案例数据说明:

最上游为业务库中user、dept,则为1;

贴源库中user、dept和转换用户信息到中心库为2;

最下游为中心库中user,则为3;

type:取值table、trans,table表示当前对象为表,trans表示当前对象为转换。

columns:该对象中字段集合。

type=table时则为该表包含的字段,下游未使用的字段不需要出现。

type=trans时则为该转换下步骤以及步骤产生的字段。未产生字段的步骤不需要出现。

S30,使用转换表级血缘关系表tableLineages和集合A(objs)递归构建血缘涉及字段关系集合B(relations),并赋值给视图数据对象的属性;

案例数据经过转换后得到relations属性说明:

id:与数据库中id无关,在内存使用雪花算法中直接生成。

target:目标字段,单个对象,id和name来自objs.columns中。

sources:来源字段集合,多个对象,表示一个目标字段的多个来源字段。id和name来自objs.columns中。

S40,获取系统可视化配置信息,并将配置信息赋值给视图数据对象的属性。所述获取系统可视化配置信息包括:起始x偏移、起始y偏移、横向间隔、纵向间隔、字段字体大小和字段上下边距和字段左右边距、数据源名称字体大小和上下边距和左右边距、表模式名称字体大小和上下边距和左右边距、转换步骤对象主题色、数据库表对象主题色和线类型。

S50,使用集合A(objs)和配置信息,计算视图绘制对象集合C(graphObjs),并赋值给视图数据对象result的属性。

坐标系以左上角为(0,0),x向右为正,以向下为正。案例数据objs经过转换后得到graphObjs,属性说明:

id:来自obj.id。

x:绝对布局左上角x轴,计算:

如果为第一列第一个obj:起始x偏移,案例为30;

如果不为第一列第一个obj:横向前一列所有obj的右上角x值(x+width);

最大值+横向间隔。案例横向间隔为50。

y:绝对布局左上角y轴,计算:

如果为第一列第一个obj:起始y偏移,案例为30;

如果不为第一列第一个obj:纵向前一个obj的左下角y值(y+height)+纵向间隔。案例纵向间隔为50。

width:计算标题(label和title)和字段中最大宽度。如果计算的最大宽度小于设定最小宽度(案例160),则取设定最小宽度,否则取计算获得的最大宽度。

标题(label和title)或字段宽度计算:

(字体大小/2)*文本包含的半角符号数+字体大小*文本包含的全角符号数+左右边距。以user_name为例9个半角符号,字体大小12,左右边距4,则width=12/2*9+4=58;

height:label高度+title高度+所有字段高度;

label高度=label字体+上下边距,案例中为字体16,上下边距4;

title高度=title字体+上下边距,案例中为字体16,上下边距4;

所有字段高度=(字段字体+上下边距)*字段数量,案例中为字体12,上下边距4。

label:

obj中type=table时则为表模式+”.”+表明;

obj中type=trans时则为步骤名称。

title:

obj中type=table时则为数据源名;

obj中type=trans时则为转换名称。

columns中id:来自obj.columns中id;

columns中label:来自obj.columns中name;

columns中x:与整体graphObj.x一致表示字段显示左上角x坐标。

columns中y:一致表示字段显示左上角y坐标。

计算graphObj.y+label高度+title高度+i*字段高度。i表示第几个字段。

columns中width:与graphObj.width一致;

columns中height:字段字体+上下边距,案例为案例中为字体12,上下边距4。

S60,使用集合B(relations)和配置信息,计算视图绘制线集合D(graphEdges),并赋值给视图数据对象result的属性。

案例数据relations经过转换后得到graphEdges,属性说明:

id:与数据库中id无关,在内存使用雪花算法中直接生成。

targetId:来自relations中target.id。

sourceId:来自relations中sources中的id,如果sources集合中有多个来源字段则此时会转为多个graphEdge对象。

S70,将最后获得的视图数据对象格式化为文本传送客户端。文本可为json或xml格式。

S80,客户端接收到文本转为视图数据对象result,判断视图数据对象属性编码是否为正确码(判断code是否为200),如果不是则提示未查询到该表的血缘信息;如果是,客户端构建坐标系(坐标系以左上角为(0,0),x向右为正,以向下为正),并利用视图绘制对象集合C(graphObjs)绘制视图。包括步骤:

使用绝对布局,获取视图绘制对象集合C的x坐标(graphObj.x)、y坐标(graphObj.y)、宽度(graphObj.width)、高度(graphObj.height)、转换步骤对象主题色和数据库表对象主题色来绘制客户端浏览器的div标签,div标签中的元素id为视图绘制对象集合C(graphObj)中各对象id;

获取视图绘制对象集合C的标签(graphObj.label)、主题(graphObj.title)、数据源名称字体大小和上下边距和左右边距、表模式名称字体大小和上下边距和左右边距、转换步骤对象主题色以及数据库表对象主题色来绘制客户端浏览器的div标签,div标签中的文本来自视图绘制对象集合C中各对象的标签(raphObj.label)和主题(graphObj.title);

视图绘制对象集合C中的columns视图,遍历单个对象表,建立columns视图的x坐标(column.x)、y坐标(column.y)、宽度(column.width)、高度(column.height)、字段字体大小和字段上下边距和字段左右边距来绘制客户端浏览器的div标签,div标签中的文本来自columns标签(columns.label),div元素id为columns视图id。

在所述步骤S80中,客户端根据集合D绘制线条和目标字段处的锚点,遍历集合D单个对象表,包括步骤:

根据视图绘制线集合D(graphEdges)获取目标Id(targetId)和来源Id(sourceId),通过目标Id和来源Id获取视图数据对象集合A(objs)中字段位置信息;

举例:

graphEdge={"id":"657584190769901611","targetId":"657584190769901569","sourceId":"657584190769901577"};

获得来源字段位置graphColumnSource:

{"id":"657584190769901577","label":"id","x":240,"y":74,"width":160,"height":16};

获得目标字段位置graphColumnTarget:

{"id":"657584190769901569","label":"id","x":450,"y":74,"width":160,"height":16}。

计算线条起始位置;

线条开始点startPoint:

x=graphColumnSource.x+graphColumnSource.width;

y=graphColumnSource.y+graphColumnSource.height/2;

线条结束点endPoint:

x=graphColumnTarget.x;

y=graphColumnTarget.y+graphColumnTarget.height/2。

根据线类型和起始点(startPoint)、终止点(endPoint)使用svg进行线绘制。

在终止点点附近绘制锚点;

svg绘制折线以endPoint点为起始点;

第二个点位置:

x=endPoint.x-6;

y=endPoint.y-2;

第三个个点位置:

x=endPoint.x-6;

y=endPoint.y+2;

三个点构成三角形。并填充与线条一样的颜色。

视图绘制线集合D(graphEdge)中id作为浏览器页面svg绘制视图元素id。

在所述步骤S90中,给字段元素添加焦点移入移出时间,控制血缘数据高亮;使屏幕焦点进入字段时高亮相关整个血缘路径,包括步骤:

先判断当前字段是否为高亮,如果当前为高亮则不处理;如果当前字段不为高亮则,设置字段高亮,并获取字段对应id;

将字段对应id作为来源Id从视图绘制线集合D中找到所有下级目标字段设置高亮,并且获得连接目标字段的线并设置高亮;递归直到没有下游目标字段为止;或,将字段对应id作为来源Id从视图绘制线集合D中找到所有上级来源字段设置高亮,并且获得连接来源字段的线并设置高亮。递归直到没有上游来源字段为止;

屏幕焦点移出字段时清除所有高亮。

以上显示和描述了本发明的基本原理和主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。

技术分类

06120114701351