CN115062049B - 一种数据血缘分析方法及装置 - Google Patents
一种数据血缘分析方法及装置 Download PDFInfo
- Publication number
- CN115062049B CN115062049B CN202210895241.1A CN202210895241A CN115062049B CN 115062049 B CN115062049 B CN 115062049B CN 202210895241 A CN202210895241 A CN 202210895241A CN 115062049 B CN115062049 B CN 115062049B
- Authority
- CN
- China
- Prior art keywords
- field
- type
- output
- dml
- statement
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/20—Natural language analysis
- G06F40/279—Recognition of textual entities
- G06F40/289—Phrasal analysis, e.g. finite state techniques or chunking
Abstract
本申请提出了一种数据血缘分析方法及装置,通过SQL脚本语句树指定符合当前语法的正则表达式,通过正则表达式完成对SQL脚本分词词项准确的标签定义,通过对SQL语句树的解析实现输入表、输出表准确定位,完成对表之间依赖关系的梳理;同时,通过对输入表、输出表字段序号的对应关系,实现字段间的相互依赖表;最终,循环遍历,获得最终完整的字段数据血缘链路表。且随着SQL语法升级以及修改,可快速完成数据血缘链路表的更新迭代;后续可在此链路表上完成可视化展示,当SQL脚本任务执行报错时,可快速追溯问题库表及字段。
Description
技术领域
本申请涉及数据治理领域,特别是涉及一种数据血缘分析方法及装置。
背景技术
数据血缘属于数据治理中的概念,是指是在数据溯源的过程中找到相关数据之间的联系。血缘分析是保证数据融合的一个手段,通过血缘分析实现数据融合处理的可追溯,即能知晓该数据从哪里来,经过了哪些处理过程以及将到哪里去。数据血缘关系是指数据在产生、处理、流转到消亡过程中,数据之间形成的一种类似于人类社会血缘关系的关系。
不同类型的数据有不同的存储结构,比如数据库、表和字段,存储结构决定了血缘关系的层次结构,通过对数据血缘的分析可以清楚地追溯数据溯源,评价数据价值以及评估数据质量。然而,目前数据血缘关系的获取方式主要还是通过对SQL语句树进行解析,通过SQL语句树找出节点和节点之间的关系链路,进而生成完整的数据血缘关系,但是这种方式仅限于SQL语法,当SQL语法升级或者出现变化时,则无法完成对SQL语句的解析,也无法获取数据库、表和字段之间数据的血缘关系。换言之,目前的方案无法适配数据仓库更新迭代带来的数据血缘分析需求。
发明内容
本申请实施例提供了一种数据血缘分析方法及装置,对SQL脚本语句进行解析,生成单段脚本间输入节点和输出节点之间的关系链路表,循环遍历后获取每个初始节点到终止节点的完整数据血缘链路表。
第一方面,本申请实施例提供了一种数据血缘分析方法,包括以下步骤:获取SQL脚本语句,其中所述SQL脚本语句内的DML类型的DML语句的每个字段定义字段类型和序号;依据所述字段类型定位每一DML语句的输入表和输出表;从数据库中查询获取输出表和输入表的字段信息得到字段表及字段关系;依据所述SQL脚本语句中的DML语句自下至上的顺序遍历匹配所述输出表和所述字段表获取输出表字段表,将所述字段表内对应所述输出表的字段存入字段清单,并依据所述输出表的DML语句筛选所述字段清单内的字段得到输出表字段表,所述输出表字段表中的字段的序号正序排列;依据所述字段关系将所述输出表字段表和包含字段信息的所述输入表进行合并得到字段链路表;对所述字段链路表进行拆解后得到数据血缘链路表。
第二方面,本申请实施例提供了一种数据入库装置,包括:
SQL语句获取单元,用于获取SQL脚本语句,其中所述SQL脚本语句内的DML类型的DML语句的每个字段定义字段类型和序号;
输出表和输入表获取单元,用于依据所述字段类型定位每一DML语句的输入表和输出表;
字段表获取单元,用于从数据库中查询获取输出表和输入表的字段信息得到字段表及字段关系;
输出表字段表获取单元,用于依据所述SQL脚本语句中的DML语句自下至上的顺序遍历匹配所述输出表和所述字段表,将所述字段表内对应所述输出表的字段存入字段清单,并依据所述输出表的DML语句筛选所述字段清单内的字段得到输出表字段表,所述输出表字段表中的字段的序号正序排列;
字段链路表获取单元,用于依据所述字段关系将所述输出表字段表和包含字段信息的所述输入表进行合并得到字段链路表;
数据血缘链路表获取的那元,用于对所述字段链路表进行拆解后得到数据血缘链路表。
第三方面, 本申请实施例提供了一种电子装置,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行任一所述的数据血缘分析方法。
第四方面,本申请实施例提供了一种可读存储介质,所述可读存储介质中存储有计算机程序,所述计算机程序包括用于控制过程以执行过程的程序代码,所述过程包括任一所述的数据血缘分析方法。
本发明的主要贡献和创新点如下:
本申请实施例通过SQL脚本语句树指定符合当前语法的正则表达式,通过正则表达式完成对SQL脚本分词词项准确的标签定义,通过对SQL语句树的解析实现输入表、输出表准确定位,完成对表之间依赖关系的梳理;同时,通过对输入表、输出表字段序号的对应关系,实现字段间的相互依赖表;最终,循环遍历,获得最终完整的字段数据血缘链路表。且随着SQL语法升级以及修改,可快速完成数据血缘链路表的更新迭代,本方案可根据最新的SQL语法结构修正正则表达匹配标签的规则,进而完成上下游库表的精准提取;后续可在此链路表上完成可视化展示,当SQL脚本任务执行报错时,可快速追溯问题库表及字段。
本申请的一个或多个实施例的细节在以下附图和描述中提出,以使本申请的其他特征、目的和优点更加简明易懂。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是根据本申请实施例的数据血缘分析方法的流程图;
图2是根据本申请实施例的字段关系的示意图;
图3是根据本申请一种实施例的定义SQL脚本语句的示意图;
图4是根据本申请实施例的解析获取完整链路表的示意图;
图5是根据本申请实施例的数据血缘分析装置的示意图;
图6是根据本申请实施例的电子装置的硬件结构示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。
需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
实施例一
如图1所示,本申请实施例提供了一种数据血缘分析方法,可以生成数据库表和字段之间的数据血缘链路表,具体地,参考图1,所述方法包括:
获取SQL脚本语句,其中所述SQL脚本语句内的DML类型的DML语句的每个字段定义字段类型和序号;
依据所述字段类型定位每一DML语句的输入表和输出表;
从数据库中查询获取输出表和输入表的字段信息得到字段表及字段关系;
依据所述SQL脚本语句中的DML语句自下至上的顺序遍历匹配所述输出表和所述字段表,将所述字段表内对应所述输出表的字段存入字段清单,并依据所述输出表的DML语句筛选所述字段清单内的字段得到输出表字段表,所述输出表字段表中的字段的序号正序排列;
依据所述字段关系将所述输出表字段表和包含字段信息的所述输入表进行合并得到字段链路表;
对所述字段链路表进行拆解后得到数据血缘链路表。
本方案提供的数据血缘分析方法是先对单一链路表进行遍历后再生成完整的数据血缘链路表,先利用正则表达式准确定位输入表和输出表,完成对表之间依赖关系的梳理;再结合字段表对输入表、输出表内字段进行整理获取字段之间的相互依赖关系,最终得到完整的数据血缘链路表。
在“获取SQL脚本语句”步骤中,SQL脚本语句根据其语句功能被归类为DML语句、TCL语句、DCL语句和DDL语句,其中DDL语句主要用于处理和数据库、表结构约束schema相关的SQL的处理,其中DML语句主要用于处理CRUD相关的操,可通过SQL语句的关键词对DML语句、TCL语句、DCL语句和DDL语句进行区分,本方案重点关注DML语句和部分DDL语句。
在DML语句中根据SQL语法结构定义抽象的字段类型,在一些实施例中可通过正则表达式对每个节点赋予对应的字段类型,字段类型包括但不限于函数语句类型、名称类型、数字字符类型、标点符号字符类型以及运算符号类型,每个字段的序号表示该字段在SQL语句中的位置及排序。
如图4所示,对应的,在一些实施例中,“获取SQL脚本语句,其中所述SQL脚本语句内的DML类型的DML语句的每个字段定义字段类型和序号”包括步骤:
获取初始SQL脚本语句并对所述初始SQL脚本语句进行分词得到分词语句;
依据所述分词语句的关键词筛选DML类型的DML语句;
使用正则表达式对DML语句定义每个字段的字段类型并编号每一字段的序号得到所述SQL脚本语句。
在“获取初始SQL脚本语句并对所述初始SQL脚本语句进行分词得到分词语句”步骤中,依据空格符对所述初始SQL脚本语句进行分词处理。
示例性,某SQL脚本语句为“select name from table”,分词处理后得到[select,name, from, table]。
在一些实施例中,可先对获取的初始SQL脚本语句进行小写化处理后删除其中的中文字符,这样的好处在于可避免在解析过程中token标签造成干扰。对应的python语句:query = re.sub('[\u4e00-\u9fa5]', '', query)。
在“依据所述分词语句的关键词筛选DML类型的DML语句”步骤中,根据所述分词语句的第一个词项分类所述分词语句,所述分词语句的类型包括但不限于DDL语句、DML语句、DCL语句和TCL语句,筛选DML语句。
具体的分类规则为:若分词语句的第一个词项匹配对应DDL语句、DML语句、DCL语句和TCL语句任一语句的关键词,则所述分词语句为匹配成功对应的类型语句。
如下表一所示,DML语句的关键词包括不限于delete, insert, union, update,select, show,以及相关的group by, join, limit, order by等;DDL语句的关键词包括但不限于:alter, create,drop, rename, truncate等。示例性,若分词语句的第一个词项为select,则该分词语句归类为DML语句。
表一 各类型SQL语句的关键词
在“使用正则表达式对DML语句定义每个字段的字段类型并编号每一字段的序号得到所述SQL脚本语句”步骤中,本方案根据SQL语法结构定义节点类型,并根据正则表达式对每个字段赋值字段类型。
本方案提供的字段类型包括但不限于函数语句类型keyword、名称类型name、数字字符类型number、标点符号字符类型punctuation以及运算符号类型Operator。本方案利用设定的正则表达式完成对DML语句的字段类型的解析:
表二 正则表达式和字段类型的关系
在“依据所述字段类型定位每一DML语句的输入表和输出表”步骤中,由于DML语句中的字段均赋值对应的节点类型,则可根据节点类型来定位输入表和输出表。
具体的,定位输出表包括以下步骤:
定位同时满足节点类型为函数语句类型的写入字段,且前一个字段为节点类型函数语句类型的插入字段,后一字段的节点类型为名称类型的输出表字段,记录所述输出表字段的内容为输出表名,输出表名对应的表为输出表。
具体的,定位到标签为token.keywords的overwrite或into,且前一词项标签为token.keywords的insert,后一词项标签为token.name;获取该token.name词项为输出表名。
示例性,表示将student_info表的全量数据插入到college_life表中的SQL语句的内容为:
insert into college_life
select * from student_info
根据正则表达式会将into分类为keywords类型,并且前一项的insert也为keywords分类,满足这两个条件后,则提取college_life(根据正则表达式匹配为name类型)为输出表名。
具体的,定位输入表包括以下步骤:
定位同时满足节点类型为函数语句类型的来源字段,且后一字段的节点类型为名称类型的输入表字段,记录所述输入表字段的内容为输入表名,输入表名对应的表为输入表。
值得一提的是,当来源字段为from时,且from后存在多个字段类型为标点符号字符类型“,”间隔的多个名称类型的输入表字段时,或者,当所述来源字段为join且join后存在多个名词类型的输入表字段时,获取所有输入表字段的内容为输入表名。
另外,当所述来源字段后接的字段类型为标点符号字符类型为“(|”时,说明存在子查询语句,此时需要在子查询语句内遍历查找输入表名查找步骤。因为在最底层的子查询里才会含有输入表名,因此有遍历查找输入表名这个过程知道定位到最底层的子查询,获取来源字段后的输入表名。
示例性的,定位到字段类型为token.keywords的from或join,且后一词项的字段类型为token.name;获取该token.name的词项为输入表名;当from后存在多个以字段类型为token.punctuation的“,”间隔的token.name时,或存在多个join时,获取全部token.name的词项为输入表1、输入表2、…输入表n。
通过上述步骤可获取输入表和输出表,整合所述输出表名和所述输入表名得到库表链路表得到的库表链路表如表三所示:
在“从数据库中查询获取输出表和输入表的字段信息得到字段表及字段关系”步骤中,使用SQL查询语句从mysql数据库的信息数据库表中获取所需库表的字段信息,所述信息数据库表存储有数据库的所有元数据字段信息,每个存在于数据库中的表的字段信息都能从信息数据库表中获取。
在本方案中获取的字段信息包括但不限于表名、列名英文、表名中文以及数据类型。利用简单的SQL查询语句从所述信息数据库表中查找该输出表的字段。示例性的,具体的代码如下:
SELECT table_nameAS'表名',
Column_NameAS '列名英文',
data_typeAS '数据类型',
COLUMN_COMMENTAS '列名中文'
FROM information_schema.COLUMNS
where table_schema = 'college_life' #表所在数据库
得到的数据库表的字段表示例如下:
表三 数据库表的字段表
另外,本方案还可以解析输入表的SQL语句获取字段关系,字段关系的获取方式是:
解析所述输入表对应的SQL语句以获取select字段后面的解析字段并依次排序;将所述解析字段和mysql数据库的信息数据库表中对应所述解析字段的输出表名相同的数据进行合并,得到字段关系。
一般而言,信息数据库表中的索引是根据表结构的顺序进行排列的,在insertoverwrite和insert into语句中,数据会根据select后面的先后顺序插入到输出表中。也就是说,本方案根据SQL语句里面的字段顺序和数据库表直接合并。
示例性的:在insert into college_life
select student_name, student_code
from student_info语句中,
会将student_info表中的student_name插入到college_life表中的第一个字段中,再把student_info表中的student_code插入到college_life表中的第二个字段中,因此只要将SQL语句中select后的字段排好序,在与信息数据库表中对应输出表名相同的数据进行合并,即可得到对应的字段对应关系,
示例性,输入表对应的SQL语句如下:
Insert OverwriteC表
Select b.class_name as ‘class_name’, a.score as‘top3_score’,a.rn as‘rank’from
(select class_id, row_number () over partition by class_id order byscore desc as ‘rn’ from A表) a
left join
B表 b
on a.class_id = b.class_id
wherern<= 3,最后得到相关的字段对应关系如图2所示。
在“依据所述SQL脚本语句中的DML语句自下至上的顺序遍历匹配所述输出表和所述字段表,将所述字段表内对应所述输出表的字段存入字段清单,并依据所述输出表的DML语句筛选所述字段清单内的字段得到输出表字段表,所述输出表字段表中的字段的序号正序排列”步骤中,从所述SQL脚本语句的最后一段DML语句逐层向上遍历匹配所述输出表和所述字段表,从所述字段表内获取所述输出表的字段并写入字段清单,遍历筛选所述输出表所在的DML语句中包含所述字段清单的字段汇总得到输出表字段表,且所述输出表字段表中的所述字段的序号正序排列。
在“遍历筛选所述输出表所在的DML语句中包含所述字段清单的字段汇总得到输出表字段表”步骤中,若在同一DML语句中筛选出重复的重复字段,获取该字段之前的标点符号字符类型(.)后的名称类型的字段,将名称类型的字段和表示表名内容的字段后的名称类型的字段进行校对,确定所述重复字段的归属表。
具体的,校对两个重复字段前的名称类型的字段,以确保正确的重复字段开发到下游表中。
示例性的,以以下SQL脚本为例:
Insert into student_dept_info
Select t1.student_name,
count(distinct t1.student_dept) as s_count_1,
Count(disticnt t2.student_dept) as s_count_2
from student_info t1
Left join student_dept_info t2
On t1.student_id = t2.student_id
Group by student_name
在该SQL脚本中存在student_info 和student_dept_info两个表通过student_id进行关联,两个表中都有student_dept字段进行统计计算插入到下游表student_dept_info中,student_dept字段就认为是重复字段,此时要通过每个student_dept前的表名称或自定义的表简称进行校对,确保是哪一张表的字段开发到下游表中的具体某个字段。
若所述DML语句中存在子查询,筛选所述子查询语句中包含所述字段清单内的字段,并判断所述字段后是否有字段类型为函数语句类型的”AS”或字段类型的字符,若存在则将所述字段类型的字符取代所述字段清单中的字段,并向上层遍历寻找取代后的字段直到最外层的DML语句,确定取代后的该字段的排序。
也就是说,用字段清单内的字段替换下层子查询中字段,以确保上层遍历时可以匹配对应的字段。
示例性,针对SQL脚本语句:
Insert into student_count_info
Select t2.student_dept as xsbm,
t2.student_num as xssl
From (select t1.department as student_dept,
sum(distinct t1.student_no) as student_num
From student_info t1 group by department ) t2;
该SQL脚本语句将student_info表中的department字段和student_no聚类统计之后的结果更名成为student_dept和student_num,通过“as”(可以省略)连接更名前和更名后的字段名。这样的结果就是在 student_info表中的字段名为department 和 student_no,这两个对应的下游表student_count_info中的字段应为xsbm 和 xssl;但是中间需要通过student_dept 和 student_num进行过渡,因此需要在t1这层子查询中将字段名进行替换,否则在t2最外层是没法匹配到对应的字段的。
若所述DML语句中存在窗口函数,则匹配字段类型为函数语句类型的“paritionby”和“orderby”后的字段类型的字符,将多个字段类型的字符组合且组合后的字段的序列同于窗口函数所在位置。其中窗口函数包括但不限于row_number、ntile、rank、percent_rank、lag、lead等。若并不存在字段类型为函数语句类型的“paritionby”和“orderby”,则省略该步骤。
在 “ 依据所述字段关系将所述输出表字段表和包含字段信息的输入表进行合并得到字段链路表”步骤中,对每一SQL语句进行处理后得到单一SQL语句的字段链路表。若数据库中存在多个SQL脚本语句,则遍历每一SQL脚本语句获取字段链表总表。
本方案得到的字段链路表包括输出表、输出表字段、输入表和输入表字段,其中所述输出表字段依据所述字段词项的顺序依次排列设置。得到的字段链路表如表四所示。
表四 字段链路表
本方案已得到包含字段信息的所述输入表以及字段和字段之间的字段关系,在本方案中,依据所述字段关系将所述输出表和所述输入表进行合并得到字段链路表。
在“对所述字段链路表进行拆解后得到数据血缘链路表”步骤中,进一步包括以下步骤:对字段链路表进行解析获取完整链路表,对所述完整链路表进行清洗后合并不同链路长度的临时表,得到数据血缘链路表。
具体的,如图5所示,在python环境下导入pymysqlpackage,对字段链路表进行拆解,包括以下步骤:
依据所述字段链路表自定义至少一字段链路,其中所述字段链路内的字段由临时表或输出表构建得到;
判断是否存在匹配所述字段链路的血缘链路表,若存在则删除;
依据所有所述字段链路创建血缘链路表;
计算所述血缘链路表的数据量,若所述血缘链路表的数据量为0则删除所述血缘链路表得到完整链路表。
在本方案中,自定义字段链路不超过10条,每一字段链路编号为1-10。在一些实施例中,所述字段链路中至少包括temp_name、temp_name_2、col_name_1、field_name_1、col_name_2以及field_name_2字段,其中temp_name和temp_name_2为临时表加设定字符的字符串,col_name_1和col_name_2为输出表加设定字符的字符串,field_name_1和field_name_2为输出表字段加设定字符的字符串。
具体的,自定义链路的创建方法如下所示:
temp_name = '临时表'+str(n)
temp_name_2= '临时表'+str(n-1)
col_name_1 = '输出表'+str(n)
field_name_1 = '输出表字段'+str(n)
col_name_2 = 't1.输出表'+str(n-1)
field_name_2 = 't1.输出表字段'+str(n-1)
在“判断是否存在匹配所述字段链路的血缘链路表,若存在则删除”步骤中,判断是否有名称同于临时表的名称的血缘链路表,若存在的话删除该血缘链路表。
在“依据所有所述字段链路创建血缘链路表”步骤中,
创建新的临时表,并插入上一遍历创建的临时表中的全部字段以及字段链路表中输入表和输入表字段,其中所述字段链路表中的输出表且输出字段与“临时表n-1”相匹配的输入表和输入表字段,且所述字段链路表中的输出表依据下列逻辑进行整合:
示例性的:temp_tab = 'create table '+temp_name+' as select distinctt1.*,t2.输入表 as '+col_name_1+',t2.输入表字段 as '+ field_name_1 +' from '+temp_name_2+' t1 left join college_life t2 on '+ field_name_2 +'=t2.输出表字段 and '+ col_name_2 +' = t2.输出表where t2.输出表字段 is not null;'。
此处在python脚本中,定义temp_tab变量为一段包含多个变量的文本,文本内容如下:temp_tab = 创建'临时表n'(n为遍历的次数),并插入'临时表n-1'的全部字段,以及college_life表中输出表且输出字段与“临时表n-1”相匹配的输入表和输入表字段,并需满足collegle_life的输出表字段不为空值。这里为了比较直观的展示,用的college_life表对应的是上面的表四,也只是一个举例,普遍一点的话,应该是完整的字段链路表。在“计算所述血缘链路表的数据量,若所述血缘链路表的数据量为0则删除所述血缘链路表得到完整链路表”步骤中,若所述血缘链路表的数据量为0则表示没有数据,故需要删除血缘链路表。
示例性:
cursor.execute(temp_tab)
tab_num = 'select count(1) from '+temp_name+';'
cursor.execute(tab_num)
tab_cts = cursor.fetchall()。
if tab_cts == '0':
del_tab ='drop table if exists '+temp_name+';'
cursor.execute(del_tab)。
在“对所述完整链路表进行清洗”步骤中,对所述完整链路表进行清洗的目的是确保字段链路的有向无环性,避免出现字段间循环依赖的情况。具体的清洗手段为:清楚表名和表字段名重复出现的字段链路。
在“合并不同链路长度的临时表,得到数据血缘链路表”步骤中,将多个不同链路长度的临时表进行合并得到数据血缘链路表。最终得到的数据血缘链路表如表五所示:
表五 数据血缘链路表
在本方案的实施例中,通过windows系统管理模块中的任务计划程序,完成对数据血缘解析的python脚本任务的定时调度,完成对数据库数据血缘链路表的及时更新迭代。
实施例二
基于相同的构思,参考图6,本申请还提出了一种数据血缘分析装置,包括:
SQL语句获取单元,用于获取SQL脚本语句,其中所述SQL脚本语句内的DML类型的DML语句的每个字段定义字段类型和序号;
输出表和输入表获取单元,用于依据所述字段类型定位每一DML语句的输入表和输出表;
字段表获取单元,用于从数据库中查询获取输出表和输入表的字段信息得到字段表及字段关系;
输出表字段表获取单元,用于依据所述SQL脚本语句中的DML语句自下至上的顺序遍历匹配所述输出表和所述字段表,将所述字段表内对应所述输出表的字段存入字段清单,并依据所述输出表的DML语句筛选所述字段清单内的字段得到输出表字段表,所述输出表字段表中的字段的序号正序排列;
字段链路表获取单元,用于依据所述字段关系将所述输出表字段表和包含字段信息的所述输入表进行合并得到字段链路表;
数据血缘链路表获取单元,用于对所述字段链路表进行拆解后得到数据血缘链路表。
关于该实施例二中同于实施例一相同的技术特征内容详见实施例一,在此不进行累赘说明。
实施例三
本实施例还提供了一种电子装置,参考图6,包括存储器404和处理器402,该存储器404中存储有计算机程序,该处理器402被设置为运行计算机程序以执行上述任一项数据血缘分析方法实施例中的步骤。
具体地,上述处理器402可以包括中央处理器(CPU),或者特定集成电路(ApplicationSpecificIntegratedCircuit,简称为ASIC),或者可以被配置成实施本申请实施例的一个或多个集成电路。
其中,存储器404可以包括用于数据或指令的大容量存储器404。举例来说而非限制,存储器404可包括硬盘驱动器(HardDiskDrive,简称为HDD)、软盘驱动器、固态驱动器(SolidStateDrive,简称为SSD)、闪存、光盘、磁光盘、磁带或通用串行总线(UniversalSerialBus,简称为USB)驱动器或者两个或更多个以上这些的组合。在合适的情况下,存储器404可包括可移除或不可移除(或固定)的介质。在合适的情况下,存储器404可在数据处理装置的内部或外部。在特定实施例中,存储器404是非易失性(Non-Volatile)存储器。在特定实施例中,存储器404包括只读存储器(Read-OnlyMemory,简称为ROM)和随机存取存储器(RandomAccessMemory,简称为RAM)。在合适的情况下,该ROM可以是掩模编程的ROM、可编程ROM(ProgrammableRead-OnlyMemory,简称为PROM)、可擦除PROM(ErasableProgrammableRead-OnlyMemory,简称为EPROM)、电可擦除PROM(ElectricallyErasableProgrammableRead-OnlyMemory,简称为EEPROM)、电可改写ROM(ElectricallyAlterableRead-OnlyMemory,简称为EAROM)或闪存(FLASH)或者两个或更多个以上这些的组合。在合适的情况下,该RAM可以是静态随机存取存储器(StaticRandom-AccessMemory,简称为SRAM)或动态随机存取存储器(DynamicRandomAccessMemory,简称为DRAM),其中,DRAM可以是快速页模式动态随机存取存储器404(FastPageModeDynamicRandomAccessMemory,简称为FPMDRAM)、扩展数据输出动态随机存取存储器(ExtendedDateOutDynamicRandomAccessMemory,简称为EDODRAM)、同步动态随机存取内存(SynchronousDynamicRandom-AccessMemory,简称SDRAM)等。
存储器404可以用来存储或者缓存需要处理和/或通信使用的各种数据文件,以及处理器402所执行的可能的数据血缘分析方法的计算机程序指令。
处理器402通过读取并执行存储器404中存储的计算机程序指令,以实现上述实施例中的任意一种数据血缘分析方法。
可选地,上述电子装置还可以包括传输设备406以及输入输出设备408,其中,该传输设备406和上述处理器402连接,该输入输出设备408和上述处理器402连接。
传输设备406可以用来经由一个网络接收或者发送数据。上述的网络具体实例可包括电子装置的通信供应商提供的有线或无线网络。在一个实例中,传输设备包括一个网络适配器(Network Interface Controller,简称为NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输设备406可以为射频(Radio Frequency,简称为RF)模块,其用于通过无线方式与互联网进行通讯。
输入输出设备408用于输入或输出信息。在本实施例中,输入的信息可以是当前数据表例如疫情流调文档、特征数据、模板表等,输出的信息可以是特征指纹、指纹模板、文本分类推荐信息、文件模板配置映射表、文件模板配置信息表等。
可选地,在本实施例中,上述处理器402可以被设置为通过计算机程序执行以下步骤:
获取SQL脚本语句,其中所述SQL脚本语句内的DML类型的DML语句的每个字段定义字段类型和序号;
依据所述字段类型定位每一DML语句的输入表和输出表;
从数据库中查询获取输出表和输入表的字段信息得到字段表及字段关系;
依据所述SQL脚本语句中的DML语句自下至上的顺序遍历匹配所述输出表和所述字段表,将所述字段表内对应所述输出表的字段存入字段清单,并依据所述输出表的DML语句筛选所述字段清单内的字段得到输出表字段表,所述输出表字段表中的字段的序号正序排列;
依据所述字段关系将所述输出表字段表和包含字段信息的所述输入表进行合并得到字段链路表;
对所述字段链路表进行拆解后得到数据血缘链路表。
需要说明的是,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。
通常,各种实施例可以以硬件或专用电路、软件、逻辑或其任何组合来实现。本发明的一些方面可以以硬件来实现,而其他方面可以以可以由控制器、微处理器或其他计算设备执行的固件或软件来实现,但是本发明不限于此。尽管本发明的各个方面可以被示出和描述为框图、流程图或使用一些其他图形表示,但是应当理解,作为非限制性示例,本文中描述的这些框、装置、系统、技术或方法可以以硬件、软件、固件、专用电路或逻辑、通用硬件或控制器或其他计算设备或其某种组合来实现。
本发明的实施例可以由计算机软件来实现,该计算机软件由移动设备的数据处理器诸如在处理器实体中可执行,或者由硬件来实现,或者由软件和硬件的组合来实现。包括软件例程、小程序和/或宏的计算机软件或程序(也称为程序产品)可以存储在任何装置可读数据存储介质中,并且它们包括用于执行特定任务的程序指令。计算机程序产品可以包括当程序运行时被配置为执行实施例的一个或多个计算机可执行组件。一个或多个计算机可执行组件可以是至少一个软件代码或其一部分。另外,在这一点上,应当注意,如图中的逻辑流程的任何框可以表示程序步骤、或者互连的逻辑电路、框和功能、或者程序步骤和逻辑电路、框和功能的组合。软件可以存储在诸如存储器芯片或在处理器内实现的存储块等物理介质、诸如硬盘或软盘等磁性介质、以及诸如例如DVD及其数据变体、CD等光学介质上。物理介质是非瞬态介质。
本领域的技术人员应该明白,以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。
Claims (10)
1.一种数据血缘分析方法,其特征在于,包括以下步骤:
获取初始SQL脚本语句并对所述初始SQL脚本语句进行分词得到分词语句;依据所述分词语句的关键词筛选DML类型的DML语句;根据SQL语法结构定义节点类型,使用正则表达式对DML语句定义每个字段的字段类型并编号每一字段的序号得到所述SQL脚本语句,其中所述SQL脚本语句内的DML类型的DML语句的每个字段定义字段类型和序号,字段类型包括但不限于函数语句类型、名称类型、数字字符类型、标点符号字符类型以及运算符号类型,每个字段的序号表示该字段在SQL语句中的位置及排序;
依据所述字段类型定位每一DML语句的输入表和输出表;其中定位输出表包括以下步骤:定位同时满足节点类型为函数语句类型的写入字段,且前一个字段为节点类型函数语句类型的插入字段,后一字段的节点类型为名称类型的输出表字段,记录所述输出表字段的内容为输出表名,输出表名对应的表为输出表;其中定位输入表包括以下步骤:定位同时满足节点类型为函数语句类型的来源字段,且后一字段的节点类型为名称类型的输入表字段,记录所述输入表字段的内容为输入表名,输入表名对应的表为输入表;
从数据库中查询获取输出表和输入表的字段信息得到字段表及字段关系;
依据所述SQL脚本语句中的DML语句自下至上的顺序遍历匹配所述输出表和所述字段表获取输出表字段表,将所述字段表内对应所述输出表的字段存入字段清单,并依据所述输出表的DML语句筛选所述字段清单内的字段得到输出表字段表,所述输出表字段表中的字段的序号正序排列;
依据所述字段关系将所述输出表字段表和包含字段信息的所述输入表进行合并得到字段链路表;
对所述字段链路表进行拆解后得到数据血缘链路表。
2.根据权利要求1所述的数据血缘分析方法,其特征在于,解析所述输入表对应的SQL语句以获取select字段后面的解析字段并依次排序;将所述解析字段和数据库的信息数据库表中对应所述解析字段的输出表名相同的数据进行合并,得到字段关系。
3.根据权利要求1所述的数据血缘分析方法,其特征在于,在“遍历筛选所述输出表所在的DML语句中包含所述字段清单的字段汇总得到输出表字段表”步骤中,若在同一DML语句中筛选出重复的重复字段,获取该字段之前的标点符号字符类型后的名称类型的字段,将名称类型的字段和表示表名内容的字段后的名称类型的字段进行校对,确定所述重复字段的归属表。
4.根据权利要求1所述的数据血缘分析方法,其特征在于,在“遍历筛选所述输出表所在的DML语句中包含所述字段清单的字段汇总得到输出表字段表”步骤中,若所述DML语句中存在子查询,筛选所述子查询语句中包含所述字段清单内的字段,并判断所述字段后是否有字段类型为函数语句类型的”AS”或字段类型的字符,若存在则将所述字段类型的字符取代所述字段清单中的字段,并向上层遍历寻找取代后的字段直到最外层的DML语句,确定取代后的该字段的排序。
5.根据权利要求1所述的数据血缘分析方法,其特征在于,在“遍历筛选所述输出表所在的DML语句中包含所述字段清单的字段汇总得到输出表字段表”步骤中,若所述DML语句中存在窗口函数,则匹配字段类型为函数语句类型的“parition by”和“order by”后的字段类型的字符,将多个字段类型的字符组合且组合后的字段的序列同于窗口函数所在位置。
6.根据权利要求1所述的数据血缘分析方法,其特征在于,字段链路表包括输出表、输出表字段、输入表和输入表字段,其中所述输出表字段依据所述字段词项的顺序依次排列设置。
7.根据权利要求1所述的数据血缘分析方法,其特征在于,“对所述字段链路表进行拆解后得到数据血缘链路表”包括步骤:对字段链路表进行解析获取完整链路表,对所述完整链路表进行清洗后合并不同链路长度的临时表,得到数据血缘链路表。
8.一种数据血缘分析装置,其特征在于,包括:
SQL语句获取单元,用于获取初始SQL脚本语句并对所述初始SQL脚本语句进行分词得到分词语句;依据所述分词语句的关键词筛选DML类型的DML语句;根据SQL语法结构定义节点类型,使用正则表达式对DML语句定义每个字段的字段类型并编号每一字段的序号得到所述SQL脚本语句,其中所述SQL脚本语句内的DML类型的DML语句的每个字段定义字段类型和序号,字段类型包括但不限于函数语句类型、名称类型、数字字符类型、标点符号字符类型以及运算符号类型,每个字段的序号表示该字段在SQL语句中的位置及排序;
输出表和输入表获取单元,用于依据所述字段类型定位每一DML语句的输入表和输出表,其中定位输出表包括以下步骤:定位同时满足节点类型为函数语句类型的写入字段,且前一个字段为节点类型函数语句类型的插入字段,后一字段的节点类型为名称类型的输出表字段,记录所述输出表字段的内容为输出表名,输出表名对应的表为输出表;其中定位输入表包括以下步骤:定位同时满足节点类型为函数语句类型的来源字段,且后一字段的节点类型为名称类型的输入表字段,记录所述输入表字段的内容为输入表名,输入表名对应的表为输入表;
字段表获取单元,用于从数据库中查询获取输出表和输入表的字段信息得到字段表及字段关系;
输出表字段表获取单元,用于依据所述SQL脚本语句中的DML语句自下至上的顺序遍历匹配所述输出表和所述字段表,将所述字段表内对应所述输出表的字段存入字段清单,并依据所述输出表的DML语句筛选所述字段清单内的字段得到输出表字段表,所述输出表字段表中的字段的序号正序排列;
字段链路表获取单元,用于依据所述字段关系将所述输出表字段表和包含字段信息的所述输入表进行合并得到字段链路表;
数据血缘链路表获取单元,用于对所述字段链路表进行拆解后得到数据血缘链路表。
9.一种电子装置,包括存储器和处理器,其特征在于,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行权利要求1到7任一所述的数据血缘分析方法。
10.一种可读存储介质,其特征在于,所述可读存储介质中存储有计算机程序,所述计算机程序包括用于控制过程以执行过程的程序代码,所述过程包括根据权利要求1到7任一所述的数据血缘分析方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210895241.1A CN115062049B (zh) | 2022-07-28 | 2022-07-28 | 一种数据血缘分析方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210895241.1A CN115062049B (zh) | 2022-07-28 | 2022-07-28 | 一种数据血缘分析方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115062049A CN115062049A (zh) | 2022-09-16 |
CN115062049B true CN115062049B (zh) | 2022-11-18 |
Family
ID=83206290
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210895241.1A Active CN115062049B (zh) | 2022-07-28 | 2022-07-28 | 一种数据血缘分析方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115062049B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116303370B (zh) * | 2023-05-17 | 2023-08-15 | 建信金融科技有限责任公司 | 一种脚本血缘解析方法、装置、存储介质、设备及产品 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109033410A (zh) * | 2018-08-03 | 2018-12-18 | 韩雪松 | 一种基于正则与字符串切割的sql解析方法 |
CN109325078A (zh) * | 2018-09-18 | 2019-02-12 | 拉扎斯网络科技(上海)有限公司 | 基于结构数据的数据血缘确定方法及装置 |
CN114116856A (zh) * | 2022-01-25 | 2022-03-01 | 中电云数智科技有限公司 | 基于数据治理全链路的字段级血缘关系分析方法 |
WO2022143045A1 (zh) * | 2020-12-30 | 2022-07-07 | 中兴通讯股份有限公司 | 数据血缘关系的确定方法及装置、存储介质、电子装置 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8010522B2 (en) * | 2007-12-07 | 2011-08-30 | International Business Machines Corporation | System, method and program product for detecting SQL queries injected into data fields of requests made to applications |
CN111651468A (zh) * | 2020-05-29 | 2020-09-11 | 中国平安财产保险股份有限公司 | 基于sql解析的数据更新方法、装置、电子设备及存储介质 |
CN111782265B (zh) * | 2020-06-28 | 2024-02-02 | 中国工商银行股份有限公司 | 基于字段级血缘关系的软件资源系统及其建立方法 |
CN112464050A (zh) * | 2020-12-11 | 2021-03-09 | 中国人寿保险股份有限公司 | 一种基于python的数据血缘整理方法、装置及电子设备 |
CN114186554A (zh) * | 2021-12-10 | 2022-03-15 | 建信金融科技有限责任公司 | 脚本数据处理方法、装置、计算机设备及存储介质 |
-
2022
- 2022-07-28 CN CN202210895241.1A patent/CN115062049B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109033410A (zh) * | 2018-08-03 | 2018-12-18 | 韩雪松 | 一种基于正则与字符串切割的sql解析方法 |
CN109325078A (zh) * | 2018-09-18 | 2019-02-12 | 拉扎斯网络科技(上海)有限公司 | 基于结构数据的数据血缘确定方法及装置 |
WO2022143045A1 (zh) * | 2020-12-30 | 2022-07-07 | 中兴通讯股份有限公司 | 数据血缘关系的确定方法及装置、存储介质、电子装置 |
CN114116856A (zh) * | 2022-01-25 | 2022-03-01 | 中电云数智科技有限公司 | 基于数据治理全链路的字段级血缘关系分析方法 |
Also Published As
Publication number | Publication date |
---|---|
CN115062049A (zh) | 2022-09-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11704494B2 (en) | Discovering a semantic meaning of data fields from profile data of the data fields | |
Wang et al. | Schema management for document stores | |
JP5306359B2 (ja) | 複数言語によるデータ記録を関連付ける方法およびシステム | |
US8799282B2 (en) | Analysis of a system for matching data records | |
US20100145902A1 (en) | Methods and systems to train models to extract and integrate information from data sources | |
US20100257440A1 (en) | High precision web extraction using site knowledge | |
CN108762808B (zh) | 接口文档的生成方法及系统 | |
CN112347123A (zh) | 数据血缘的分析方法、装置和服务器 | |
CN113678118A (zh) | 数据提取系统 | |
Kusumasari | Data profiling for data quality improvement with OpenRefine | |
US20120096054A1 (en) | Reading rows from memory prior to reading rows from secondary storage | |
CN110795526B (zh) | 一种用于检索系统的数学公式索引创建方法与系统 | |
Furche et al. | The ontological key: automatically understanding and integrating forms to access the deep Web | |
Döhmen et al. | Multi-hypothesis CSV parsing | |
Derouiche et al. | Automatic extraction of structured web data with domain knowledge | |
CN109522396B (zh) | 一种面向国防科技领域的知识处理方法及系统 | |
Ortona et al. | Wadar: Joint wrapper and data repair | |
CN115062049B (zh) | 一种数据血缘分析方法及装置 | |
CN105550169A (zh) | 一种基于字符长度识别兴趣点名称的方法和装置 | |
CN115358200A (zh) | 一种基于SysML元模型的模板化文档自动生成方法 | |
Omari et al. | Cross-supervised synthesis of web-crawlers | |
US10318388B2 (en) | Datasets profiling tools, methods, and systems | |
Talburt et al. | A practical guide to entity resolution with OYSTER | |
CN111460000B (zh) | 一种基于关系型数据库的回溯数据查询方法及系统 | |
Guo et al. | RED: Redundancy-Driven Data Extraction from Result Pages? |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |