CN105589874B - Etl任务依赖关系的检测方法、装置及etl工具 - Google Patents
Etl任务依赖关系的检测方法、装置及etl工具 Download PDFInfo
- Publication number
- CN105589874B CN105589874B CN201410569204.7A CN201410569204A CN105589874B CN 105589874 B CN105589874 B CN 105589874B CN 201410569204 A CN201410569204 A CN 201410569204A CN 105589874 B CN105589874 B CN 105589874B
- Authority
- CN
- China
- Prior art keywords
- task
- source
- source table
- dependence
- correspondence set
- 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
- 238000001514 detection method Methods 0.000 title claims abstract description 68
- 230000014509 gene expression Effects 0.000 claims description 17
- 230000001360 synchronised effect Effects 0.000 claims description 14
- 238000012545 processing Methods 0.000 claims description 13
- 238000003860 storage Methods 0.000 claims description 12
- 230000008859 change Effects 0.000 claims description 7
- 230000001052 transient effect Effects 0.000 claims description 6
- 238000012217 deletion Methods 0.000 claims description 4
- 230000037430 deletion Effects 0.000 claims description 4
- 238000005457 optimization Methods 0.000 claims description 4
- 108010001267 Protein Subunits Proteins 0.000 claims description 3
- 238000000034 method Methods 0.000 abstract description 22
- 238000012360 testing method Methods 0.000 abstract description 4
- 230000000694 effects Effects 0.000 abstract description 3
- 230000008569 process Effects 0.000 description 11
- 238000004458 analytical method Methods 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 238000009434 installation Methods 0.000 description 3
- 230000015572 biosynthetic process Effects 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000007689 inspection Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000002360 preparation method Methods 0.000 description 2
- 241000208340 Araliaceae Species 0.000 description 1
- 235000005035 Panax pseudoginseng ssp. pseudoginseng Nutrition 0.000 description 1
- 235000003140 Panax quinquefolius Nutrition 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000004141 dimensional analysis Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 235000008434 ginseng Nutrition 0.000 description 1
- 238000011835 investigation Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000008439 repair process Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Abstract
本申请公开了一种ETL任务依赖关系的检测方法和装置,所述方法包括:针对ETL的每一个任务,获取任务包括的数据操作指令;解析数据操作指令,获取任务相关的源表和目标表;根据目标表、任务属性表和任务依赖关系配置表,获取目标表直接依赖的源表和间接依赖的源表;遍历任务相关的源表、直接依赖的源表和间接依赖的源表,采用预设的规则标识与任务相关的各个任务依赖关系的错误类型和可优化类型。采用本申请提供的方法,通过将实际的任务依赖关系和预期的任务依赖关系按预定规则进行比对,自动发现错误和可优化的任务依赖关系,从而减少任务依赖问题导致的故障发生频率,节约测试人员手动排查任务依赖问题的时间,达到提高测试效率的效果。
Description
技术领域
本发明涉及数据仓库技术领域,具体涉及一种ETL任务依赖关系的检测方法和装置。本发明同时涉及一种ETL工具。
背景技术
ETL(Extract-Transform-Load,数据抽取、转换、装载的过程)作为BI/DW(Business Intelligence/Data Warehouse,商业智能/数据仓库)的核心和灵魂,能够按照统一的规则集成并提高数据的价值,是负责完成数据从数据源向目标数据仓库转化的过程,是实施数据仓库的重要步骤。在数据仓库的整个项目中最难部分是用户需求分析和模型设计,而ETL规则设计和实施则是工作量最大的,约占整个项目的60%~80%。
ETL发布后,开发人员会配置新发脚本的调度任务,并配置对其他脚本调度任务之间的依赖关系,以保证新脚本发布上线后,可以按预期的频率、规则以及顺序来调度执行。如果任务依赖关系有错误会导致目标数据无法正确生成,如果任务依赖关系待优化,可能会导致调度系统数据冗余及效率低下,并影响其性能,故任务依赖关系正确性是测试人员检查的对象之一。而人工检查任务依赖关系需要在每次ETL项目发布后都花费较多时间和重复体力劳动,且如果是测试人员没有覆盖到的ETL项目,发布后也无法及时跟进排查。
目前,常用的ETL调度工具(例如,Control-M等)可以解析出通过平台配置好的任务依赖关系表,并在界面上以任务树的格式展示出来,方便开发人员排查任务依赖关系有无问题。此外,还有一些现有方案可以通过对ETL任务的数据操作指令按特定的规则进行解析,得出目标表所依赖的全部源表,并为其自动生成任务依赖关系配置。
然而,现有技术存在如下缺点:
1)缺乏基于开发ETL过程代码的自动化多维度分析,即使可以按开发的代码中的源表和目标表自动生成任务依赖关系配置,但是如果开发代码本身就有循环依赖关系、不符合特定数据仓库特定模型分层顺序的依赖关系,也会按开发代码逻辑生成对应的任务依赖关系,而无法自动检测出以上类型的问题。
2)对于多余、重复依赖关系这些基本不做识别,但这类问题虽然不影响ETL调度的正确性,但是多余的依赖关系配置会导致任务执行延迟,而重复依赖关系也会影响ETL调度系统的性能。
3)即使可以实现不同程度的任务依赖检查,但是基本没有融入持续集成的概念。
综上所述,现有技术存在无法自动检测出ETL任务依赖关系中的错误点和可优化点的问题。
发明内容
本发明提供一种ETL任务依赖关系的检测方法和装置,以解决现有技术存在无法自动检测出ETL任务依赖关系中的错误点和可优化点的问题。本发明另外提供一种ETL工具。
本发明提供一种ETL任务依赖关系的检测方法,包括:
针对ETL的每一个任务,获取所述任务包括的数据操作指令;
将所述数据操作指令插入到数据库内部表;
根据所述数据操作指令和任务属性表,生成源表对应关系集合和目标表对应关系集合,将所述源表对应关系集合作为第一源表对应关系集合;
根据所述目标表对应关系集合、所述任务属性表和任务依赖关系配置表,生成目标表直接依赖的源表对应关系集合和目标表间接依赖的源表对应关系集合,将所述目标表直接依赖的源表对应关系集合作为第二源表对应关系集合,将所述目标表间接依赖的源表对应关系集合作为第三源表对应关系集合;
遍历所述第一源表对应关系集合、所述第二源表对应关系集合和所述第三源表对应关系集合的各个源表,采用预设的规则,标识与所述任务相关的各个任务依赖关系的错误类型和可优化类型的至少一者;
其中,所述第一源表对应关系集合包括所述任务依赖的各个源表的表名和源表的任务号之间的对应关系;所述目标表对应关系集合包括所述任务中去除临时目标表后的各个目标表的表名和目标表的任务号之间的对应关系;
所述第二源表对应关系集合包括所述目标表对应关系集合中的目标表直接依赖的各个源表的表名和源表的任务号之间的对应关系;所述第三源表对应关系集合包括所述目标表对应关系集合中的目标表间接依赖的各个源表的表名和源表的任务号之间的对应关系。
可选的,在所述获取所述任务包括的数据操作指令之前,还包括:
初始化所述任务属性表和所述任务依赖关系配置表;所述初始化所述任务属性表和所述任务依赖关系配置表,是指将在线任务属性表和在线任务依赖关系配置表同步到线下数据库。
可选的,根据预设的时间间隔,初始化所述任务属性表和所述任务依赖关系配置表。
可选的,所述任务存储在脚本文件或数据库存储过程中。
可选的,所述脚本文件采用的编写语言包括:PERL脚本语言、SHELL脚本语言、PYTHON脚本语言。
可选的,在所述获取所述任务包括的数据操作指令之前,还包括:
初始化所述任务的集合;所述初始化所述任务的集合,是指将在线任务的集合同步到线下服务器。
可选的,根据预设的时间间隔,初始化所述任务的集合。
可选的,所述针对ETL的每一个任务,获取所述任务包括的数据操作指令包括:
读取所述任务的集合,获取所述任务的集合中各个所述任务的名称;
根据各个所述任务的名称,读取所述任务,获取该任务包括的所述数据操作指令。
可选的,所述将所述数据操作指令插入到数据库内部表之前,还包括:
根据预设的规则,对各个所述数据操作指令进行指令表达的规则化处理。
可选的,所述根据预设的规则对各个所述数据操作指令进行指令表达的规则化处理,是指将所述数据操作指令中的特殊字符转换为空格、将字符转换为大写字符以及删除无效行;所述特殊字符至少包括空白符;所述无效行是指注释行、空白行和注释块。
可选的,所述根据预设的规则,对各个所述数据操作指令进行指令表达的规则化处理包括:
创建数据库外部表;
将各个所述数据操作指令存储到所述数据库外部表;
读取所述数据库外部表中存储的各个所述数据操作指令,对各个所述数据操作指令进行所述规则化处理。
可选的,所述根据所述数据操作指令和任务属性表,生成源表对应关系集合包括:
读取所述数据库内部表,获取所述数据操作指令;
解析所述数据操作指令,获取所述数据操作指令中from子句后的所有表名和join子句后的所有表名;
删除所有表名中重复的表名,形成所有非冗余的表名;
解析所述数据操作指令,获取所述数据操作指令中insert overwrite table子句后的所有临时表表名;
将所有所述临时表表名从所述所有非冗余的表名中删除,形成源表集合;
根据所述源表集合中各个表的表名和所述任务属性表,获取所述源表集合中各个表的任务号;
根据所述源表集合中的各个源表的表名和源表的任务号之间的对应关系,形成所述源表对应关系集合。
可选的,所述根据所述数据操作指令和任务属性表,生成目标表对应关系集合包括:
读取所述数据库内部表,获取所述数据操作指令;
解析所述数据操作指令,获取所述数据操作指令中insert overwrite table字句后的所有非临时表表名,形成目标表集合;
根据所述目标表集合中各个目标表的表名和所述任务属性表,获取所述目标表集合中各个目标表的任务号;
根据所述目标表集合中各个目标表的表名和其任务号之间的关系,形成所述目标表对应关系集合。
可选的,所述根据所述目标表对应关系集合、所述任务属性表和任务依赖关系配置表,生成目标表直接依赖的源表对应关系集合和目标表间接依赖的源表对应关系集合包括:
根据所述目标表对应关系集合、所述任务依赖关系配置表和所述任务属性表,获取所述目标表直接依赖的源表对应关系集合;
根据所述目标表直接依赖的源表对应关系集合、所述任务依赖关系配置表和所述任务属性表,获取所述目标表间接依赖的源表对应关系集合。
可选的,所述获取所述目标表直接依赖的源表对应关系集合包括:
根据所述目标表对应关系集合和所述任务依赖关系配置表,获取所述目标表直接依赖的所有源表任务号,形成直接依赖的源表任务号集合;
根据所述直接依赖的源表任务号集合中各个源表的任务号和所述任务属性表,获取所述直接依赖的源表任务号集合中各个源表任务号对应的表名;
根据所述直接依赖的源表任务号集合中各个源表的任务号和其表名之间的关系,形成所述目标表直接依赖的源表对应关系集合。
可选的,所述获取所述目标表间接依赖的源表对应关系集合包括:
根据所述目标表直接依赖的源表对应关系集合和所述任务依赖关系配置表,获取所述目标表间接依赖的所有源表任务号,形成间接依赖的源表任务号集合;
根据所述间接依赖的源表任务号集合中各个源表的任务号和所述任务属性表,获取所述间接依赖的源表任务号集合中各个源表任务号对应的表名;
根据所述间接依赖的源表任务号集合中各个源表的任务号和其表名之间的关系,形成作为所述目标表间接依赖的源表对应关系集合。
可选的,所述错误类型包括:依赖关系缺失,依赖关系不符合特定数据仓库特定模型分层顺序;所述优化类型包括:依赖关系多余、重复依赖关系,循环依赖关系。
可选的,所述采用预设的规则,标识与所述任务相关的各个任务依赖关系的错误类型和可优化类型的至少一者是指:
若所述源表既不在所述第二源表对应关系集合中,也不在所述第三源表对应关系集合中,而在所述第一源表对应关系集合中,则将所述任务对该源表的任务依赖关系标识为依赖关系缺失;
若所述第二源表对应关系集合中存在的所述源表,所述源表的表名和目标表的表名符合预设规则,则将所述任务对该源表的任务依赖关系标识为依赖关系不符合特定数据仓库特定模型分层顺序;
若所述源表在所述第二源表对应关系集合中,不在所述第一源表对应关系集合中,则将所述任务对该源表的任务依赖关系标识为依赖关系多余;
若所述源表既在所述第一源表对应关系集合中,又在所述第二源表对应关系集合中,同时也在所述第三源表对应关系集合中,则将所述任务对该源表的任务依赖关系标识为重复依赖关系;
若所述第二源表对应关系集合或所述第三源表对应关系集合中存在的所述源表,和目标表是同一个表,则将所述任务对该源表的任务依赖关系标识为循环依赖关系。
可选的,所述数据库包括:ORACLE数据库、SQL SERVER数据库、MYSQL数据库、GREENPLUM数据库。
可选的,在所述将所述数据操作指令插入到数据库内部表之前,还包括:
与所述数据库建立连接。
相应的,本申请还提供一种ETL任务依赖关系的检测装置,包括:
获取单元,用于针对ETL的每一个任务,获取所述任务包括的数据操作指令;
写入单元,用于将所述数据操作指令插入到数据库内部表;
第一生成单元,用于根据所述数据操作指令和任务属性表,生成源表对应关系集合和目标表对应关系集合,将所述源表对应关系集合作为第一源表对应关系集合;
第二生成单元,用于根据所述目标表对应关系集合、所述任务属性表和任务依赖关系配置表,生成目标表直接依赖的源表对应关系集合和目标表间接依赖的源表对应关系集合,将所述目标表直接依赖的源表对应关系集合作为第二源表对应关系集合,将所述目标表间接依赖的源表对应关系集合作为第三源表对应关系集合;
标识单元,用于遍历所述第一源表对应关系集合、所述第二源表对应关系集合和所述第三源表对应关系集合的各个源表,采用预设的规则,标识与所述任务相关的各个任务依赖关系的错误类型和可优化类型的至少一者;
其中,所述第一源表对应关系集合包括所述任务依赖的各个源表的表名和源表的任务号之间的对应关系;所述目标表对应关系集合包括所述任务中去除临时目标表后的各个目标表的表名和目标表的任务号之间的对应关系;
所述第二源表对应关系集合包括所述目标表对应关系集合中的目标表直接依赖的各个源表的表名和源表的任务号之间的对应关系;所述第三源表对应关系集合包括所述目标表对应关系集合中的目标表间接依赖的各个源表的表名和源表的任务号之间的对应关系。
可选的,还包括:
第一初始化单元,用于初始化所述任务属性表和所述任务依赖关系配置表;所述初始化所述任务属性表和所述任务依赖关系配置表,是指将在线任务属性表和在线任务依赖关系配置表同步到线下数据库。
可选的,还包括:
第二初始化单元,用于初始化所述任务的集合;所述初始化所述任务的集合,是指将在线任务的集合同步到线下服务器。
可选的,所述获取单元包括:
第一获取子单元,用于读取所述任务的集合,获取所述任务的集合中各个所述任务的名称;
第二获取子单元,用于根据各个所述任务的名称,读取所述任务,获取该任务包括的所述数据操作指令。
可选的,还包括:
规则化单元,用于根据预设的规则,对各个所述数据操作指令进行指令表达的规则化处理。
可选的,所述规则化单元包括:
建表子单元,用于创建数据库外部表;
存储子单元,用于将各个所述数据操作指令存储到所述数据库外部表;
规则化子单元,用于读取所述数据库外部表中存储的各个所述数据操作指令,对各个所述数据操作指令进行所述规则化处理。
可选的,所述第一生成单元包括:
第一获取子单元,用于读取所述数据库内部表,获取所述数据操作指令;
第一解析子单元,用于解析所述数据操作指令,获取所述数据操作指令中from子句后的所有表名和join子句后的所有表名;
第一删除子单元,用于删除所有表名中重复的表名,形成所有非冗余的表名;
第二解析子单元,用于解析所述数据操作指令,获取所述数据操作指令中insertoverwrite table子句后的所有临时表表名;
第二删除子单元,用于将所有所述临时表表名从所述所有非冗余的表名中删除,形成源表集合;
第二获取子单元,用于根据所述源表集合中各个表的表名和所述任务属性表,获取所述源表集合中各个表的任务号;
第一生成子单元,用于根据所述源表集合中的各个源表的表名和源表的任务号之间的对应关系,形成所述源表对应关系集合。
可选的,所述第一生成单元还包括:
第三解析子单元,用于解析所述数据操作指令,获取所述数据操作指令中insertoverwrite table字句后的所有非临时表表名,形成目标表集合;
第三获取子单元,用于根据所述目标表集合中各个目标表的表名和所述任务属性表,获取所述目标表集合中各个目标表的任务号;
第二生成子单元,用于根据所述目标表集合中各个目标表的表名和其任务号之间的关系,形成所述目标表对应关系集合。
可选的,所述第二生成单元包括:
直接生成子单元,用于根据所述目标表对应关系集合、所述任务依赖关系配置表和所述任务属性表,获取所述目标表直接依赖的源表对应关系集合;
间接生成子单元,用于根据所述目标表直接依赖的源表对应关系集合、所述任务依赖关系配置表和所述任务属性表,获取所述目标表间接依赖的源表对应关系集合。
可选的,所述直接生成子单元包括:
第一获取子单元,用于根据所述目标表对应关系集合和所述任务依赖关系配置表,获取所述目标表直接依赖的所有源表任务号,形成直接依赖的源表任务号集合;
第二获取子单元,用于根据所述直接依赖的源表任务号集合中各个源表的任务号和所述任务属性表,获取所述直接依赖的源表任务号集合中各个源表任务号对应的表名;
生成子单元,用于根据所述直接依赖的源表任务号集合中各个源表的任务号和其表名之间的关系,形成所述目标表直接依赖的源表对应关系集合。
可选的,所述间接生成子单元包括:
第一获取子单元,用于根据所述目标表直接依赖的源表对应关系集合和所述任务依赖关系配置表,获取所述目标表间接依赖的所有源表任务号,形成间接依赖的源表任务号集合;
第二获取子单元,用于根据所述间接依赖的源表任务号集合中各个源表的任务号和所述任务属性表,获取所述间接依赖的源表任务号集合中各个源表任务号对应的表名;
生成子单元,用于根据所述间接依赖的源表任务号集合中各个源表的任务号和其表名之间的关系,形成作为所述目标表间接依赖的源表对应关系集合。
可选的,还包括:
连接数据库单元,用于与所述数据库建立连接。
此外,本申请还提供一种ETL工具,包括:根据上述任一项所述的ETL任务依赖关系的检测装置。
与现有技术相比,本发明具有以下优点:
本申请提供的ETL任务依赖关系的检测方法和装置,以及ETL工具,通过解析ETL任务的数据操作指令,结合任务属性表,获取任务相关的目标表、目标表依赖的所有源表及其对应的任务号,即预期的任务依赖关系;并结合任务依赖关系配置表,将任务依赖关系配置表中实际的任务依赖关系和预期的任务依赖关系按预定的规则进行比对,自动发现实际的任务依赖关系中的缺失、多余、重复的依赖关系,以及循环依赖、不符合特定数据仓库特定模型分层顺序的依赖关系,从而减少任务依赖问题导致的线上故障的发生频率,能够节约测试人员手动排查任务依赖问题的时间,达到提高测试效率的效果。
附图说明
图1是本申请的ETL任务依赖关系的检测方法实施例的流程图;
图2是本申请的ETL任务依赖关系的检测方法实施例步骤S101之前的准备步骤的具体流程图;
图3是本申请的ETL任务依赖关系的检测方法实施例脚本文件的示意图;
图4是本申请的ETL任务依赖关系的检测方法实施例步骤S101的具体流程图;
图5是本申请的ETL任务依赖关系的检测方法实施例步骤S501的具体流程图;
图6是本申请的ETL任务依赖关系的检测方法实施例步骤S1041的具体流程图;
图7是本申请的ETL任务依赖关系的检测方法实施例步骤S1042的具体流程图;
图8是本申请的ETL任务依赖关系的检测装置实施例的示意图。
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本发明。但是本发明能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本发明内涵的情况下做类似推广,因此本发明不受下面公开的具体实施的限制。
在本申请中,分别提供了一种ETL任务依赖关系的检测方法和装置、以及一种ETL工具。在下面的实施例中逐一进行详细说明。
请参考图1,其为本申请的ETL任务依赖关系的检测方法实施例的流程图。所述方法包括如下步骤:
步骤S101:针对ETL的每一个任务,获取所述任务包括的数据操作指令。
本申请提供的ETL任务依赖关系的检测方法,是针对ETL的每一个任务的检测方法。在实际应用中,需要在执行服务器上部署一个总调脚本,并定时执行该总调脚本,遍历ETL过程中的各个任务,然后针对每个任务,执行本申请提供的ETL任务依赖关系的检测方法。
本申请所述的ETL的每一个任务是指ETL过程中开发人员预先设计的任务,即预期任务。任务是由多个预先设计的数据操作指令构成的。在本实施例中,数据操作指令是指SQL语句。
在实际的ETL任务调度系统运行过程中,由于不能轻易操作线上ETL任务调度系统与任务相关的数据库表的内容,因此需要提前申请相关权限,将线上数据同步到线下,这类同步操作分批定时执行。具体的,与任务相关的数据库表主要包括任务属性表和任务依赖关系配置表。为此,在执行本步骤之前,需要执行图2所示步骤S201。
请参考图2,其为本执行步骤S101之前的准备步骤的具体流程图。在本实施例中,在所述获取所述任务包括的数据操作指令之前,还包括:
步骤S201:初始化所述任务属性表和所述任务依赖关系配置表;所述初始化所述任务属性表和所述任务依赖关系配置表,是指将在线任务属性表和在线任务依赖关系配置表同步到线下数据库。
在本实施例中,根据预设的时间间隔,初始化所述任务属性表和所述任务依赖关系配置表。可选的,所述任务存储在数据库存储过程中或脚本文件中。
本申请所述的任务可以存储在脚本文件中。当任务存储在脚本文件时,总调脚本负责遍历脚本服务器上的脚本目录,得到该目录下每个脚本文件的绝对路径,然后执行以下操作:连接数据库,并调用数据库服务器上的主存储过程,入参为脚本文件的绝对路径。该存储过程实际执行每个任务依赖关系配置错误及优化点检查。此外,任务也可以不存储在脚本文件中,例如:计算平台是ORACLE,那么任务相关的数据操作指令存储在数据库存储过程中;如果计算平台是ODPS,那么开发可能不用脚本封装ETL过程,而是单个的SQL语句封装,而且任务相关的表结构也不一定一致。上述存储任务的这些不同的方式,都只是具体实施方式的变更,都不偏离本申请的核心,因此都在本申请的保护范围之内。
可选的,所述脚本文件采用的编写语言包括:PERL脚本语言、SHELL脚本语言、PYTHON脚本语言。
在本实施例中,所述任务存储在脚本文件中,编写脚本文件的语言是PERL脚本语言。请参考图3,其为本申请的ETL任务依赖关系的检测方法实施例脚本文件的示意图。
与上述步骤S201初始化任务相关的数据库表的原理相同,线上脚本服务器目录也不能轻易操作,因此需要提前申请相关权限,将线上数据同步到线下。为此,在执行本步骤S101之前,需要执行图2所示步骤S202。
在本实施例中,在所述获取所述任务包括的数据操作指令之前,还包括:
步骤S202:初始化所述任务的集合;所述初始化所述任务的集合,是指将在线任务的集合同步到线下服务器。
在本实施例中,步骤S202指定将线上脚本服务器目录下的所有脚本文件同时同步到线下ORACLE数据库服务器和某台线下执行服务器上。
在本实施例中,根据预设的时间间隔,初始化所述任务的集合。
根据具体应用需求,预先设定执行步骤S201和步骤S202的时间,例如:每天的某个固定时刻等。
请参考图4,其为本申请的ETL任务依赖关系的检测方法实施例步骤S101的具体流程图。在本实施例中,所述针对ETL的每一个任务,获取所述任务包括的数据操作指令包括:
步骤S401:读取所述任务的集合,获取所述任务的集合中各个所述任务的名称。
步骤S402:根据各个所述任务的名称,读取所述任务,获取该任务包括的所述数据操作指令。
在本实施例中,任务存储在脚本文件中,因此获取所述任务包括的数据操作指令包括:读取脚本文件目录,获取所述脚本文件目录中各个所述脚本文件的绝对路径;根据各个所述脚本文件的绝对路径,读取所述脚本文件,获取该脚本文件存储的所述任务包括的所述数据操作指令。
步骤S102:将所述数据操作指令插入到数据库内部表。
本申请提供的ETL任务依赖关系的检测方法,需要将步骤S101获取的任务包括的数据操作指令插入到数据库内部表,以便后续步骤对该任务的各个数据操作指令进行分析,进而获取任务相关的源表、目标表等数据。
在本实施例中,在所述将所述数据操作指令插入到数据库内部表之前,还包括:
步骤S100:与所述数据库建立连接。
本申请所述的数据库包括:ORACLE数据库、SQL SERVER数据库、MYSQL数据库、GREENPLUM数据库。
在实际应用中,为使数据库开发管理人员能够更加容易、清楚地理解任务的内容,通常在任务中会使用不规范的指令表达方式。为此,在执行本步骤S102之前,需要对任务相关的数据操作指令进行预处理操作。
在本实施例中,所述将所述数据操作指令插入到数据库内部表之前,还包括:
步骤S501:根据预设的规则,对各个所述数据操作指令进行指令表达的规则化处理。在本实施例中,所述根据预设的规则对各个所述数据操作指令进行指令表达的规则化处理,是指将所述数据操作指令中的特殊字符转换为空格、将字符转换为大写字符以及删除无效行;所述特殊字符至少包括空白符;所述无效行是指注释行、空白行和注释块。
请参考图5,其为本申请的ETL任务依赖关系的检测方法实施例步骤S501的具体流程图。在本实施例中,所述根据预设的规则,对各个所述数据操作指令进行指令表达的规则化处理包括:
步骤S5011:创建数据库外部表。
步骤S5012:将各个所述数据操作指令存储到所述数据库外部表。
步骤S5013:读取所述数据库外部表中存储的各个所述数据操作指令,对各个所述数据操作指令进行所述规则化处理。
在本实施例中,在对各个所述数据操作指令进行指令表达的规则化处理时,首先用Oracle中的创建外部表功能创建一个数据库外部表,再将读取的任务包括的数据操作指令插入到该数据库外部表中,以便于后续进行规则化处理,该数据库外部表实质为规则化处理过程中的一个临时文件。在实际应用中,也可以不使用临时文件进行指令的规则化处理,例如:直接从脚本文件中读取指令,然后存到数据库内部表中。
步骤S103:根据所述数据操作指令和任务属性表,生成源表对应关系集合和目标表对应关系集合,将所述源表对应关系集合作为第一源表对应关系集合。
其中,第一源表对应关系集合包括所述任务依赖的各个源表的表名和源表的任务号之间的对应关系;所述目标表对应关系集合包括所述任务中去除临时目标表后的各个目标表的表名和目标表的任务号之间的对应关系。
本申请所述的第一源表对应关系集合中的源表,是指预期任务的目标表在预期情况下应该依赖的源表。
本申请所述的任务属性表是指各个ETL任务的任务号和存储该任务的脚本文件或存储过程的对照表,任务属性表还包括任务对应的输出表等数据。例如,当任务存储在脚本文件中时,任务属性表如表1所示:
表1、任务属性表
本申请所述的任务依赖关系配置表包括ETL实际调度过程中的各个任务之间的任务依赖关系,如表2所示:
父任务号 | 子任务号 |
8884 | 8883 |
8884 | 8882 |
8884 | 8881 |
… | … |
表2、任务依赖关系配置表
从表2可以得出:“8884”任务直接依赖于“8881”、“8882”和“8883”这三个子任务。
在本实施例中,所述根据所述数据操作指令和任务属性表,生成源表对应关系集合包括:
步骤S10311:读取所述数据库内部表,获取所述数据操作指令。
步骤S10312:解析所述数据操作指令,获取所述数据操作指令中from子句后的所有表名和join子句后的所有表名。
步骤S10313:删除所有表名中重复的表名,形成所有非冗余的表名。
步骤S10314:解析所述数据操作指令,获取所述数据操作指令中insertoverwrite table子句后的所有临时表表名。
步骤S10315:将所有所述临时表表名从所述所有非冗余的表名中删除,形成源表集合。
步骤S10316:根据所述源表集合中各个表的表名和所述任务属性表,获取所述源表集合中各个表的任务号。
步骤S10317:根据所述源表集合中的各个源表的表名和源表的任务号之间的对应关系,形成所述源表对应关系集合。
在本实施例中,通过解析任务的数据操作指令,得到图3所示的脚本文件中的源表有dataware_example_source1、dataware_example_source2和dataware_example_source3,再通过表名查询任务属性表,得到每个源表对应的任务号。
在本实施例中,所述根据所述数据操作指令和任务属性表,生成目标表对应关系集合包括:
步骤S10321:读取所述数据库内部表,获取所述数据操作指令。
步骤S10322:解析所述数据操作指令,获取所述数据操作指令中insertoverwrite table字句后的所有非临时表表名,形成目标表集合。
步骤S10323:根据所述目标表集合中各个目标表的表名和所述任务属性表,获取所述目标表集合中各个目标表的任务号。
步骤S10324:根据所述目标表集合中各个目标表的表名和其任务号之间的关系,形成所述目标表对应关系集合。
在本实施例中,通过解析任务的数据操作指令,得到图3所示的脚本文件中的目标表有dataware_example_target_table,再通过表名查询任务属性表,得到目标表对应的任务号为“8884”。
步骤S104:根据所述目标表对应关系集合、所述任务属性表和任务依赖关系配置表,生成目标表直接依赖的源表对应关系集合和目标表间接依赖的源表对应关系集合,将所述目标表直接依赖的源表对应关系集合作为第二源表对应关系集合,将所述目标表间接依赖的源表对应关系集合作为第三源表对应关系集合。
其中,所述第二源表对应关系集合包括所述目标表对应关系集合中的目标表直接依赖的各个源表的表名和源表的任务号之间的对应关系;所述第三源表对应关系集合包括所述目标表对应关系集合中的目标表间接依赖的各个源表的表名和源表的任务号之间的对应关系。
本申请所述的第二源表对应关系集合和第三源表对应关系集合中的源表,是指预期任务的目标表在ETL实际调度过程中实际依赖的源表。
在本实施例中,所述根据所述目标表对应关系集合、所述任务属性表和任务依赖关系配置表,生成目标表直接依赖的源表对应关系集合和目标表间接依赖的源表对应关系集合包括:
步骤S1041:根据所述目标表对应关系集合、所述任务依赖关系配置表和所述任务属性表,获取所述目标表直接依赖的源表对应关系集合。
步骤S1042:根据所述目标表直接依赖的源表对应关系集合、所述任务依赖关系配置表和所述任务属性表,获取所述目标表间接依赖的源表对应关系集合。
请参考图6,其为本申请的ETL任务依赖关系的检测方法实施例步骤S1041的具体流程图。在本实施例中,所述获取所述目标表直接依赖的源表对应关系集合包括:
步骤S10411:根据所述目标表对应关系集合和所述任务依赖关系配置表,获取所述目标表直接依赖的所有源表任务号,形成直接依赖的源表任务号集合。
步骤S10412:根据所述直接依赖的源表任务号集合中各个源表的任务号和所述任务属性表,获取所述直接依赖的源表任务号集合中各个源表任务号对应的表名。
步骤S10413:根据所述直接依赖的源表任务号集合中各个源表的任务号和其表名之间的关系,形成所述目标表直接依赖的源表对应关系集合。
在本实施例中,目标表直接依赖的源表任务号集合为{8881,8882,8883},即父任务号为“8884”的所有子任务号。
请参考图7,其为本申请的ETL任务依赖关系的检测方法实施例步骤S1042的具体流程图。在本实施例中,所述获取所述目标表间接依赖的源表对应关系集合包括:
步骤S10421:根据所述目标表直接依赖的源表对应关系集合和所述任务依赖关系配置表,获取所述目标表间接依赖的所有源表任务号,形成间接依赖的源表任务号集合。
步骤S10422:根据所述间接依赖的源表任务号集合中各个源表的任务号和所述任务属性表,获取所述间接依赖的源表任务号集合中各个源表任务号对应的表名。
步骤S10423:根据所述间接依赖的源表任务号集合中各个源表的任务号和其表名之间的关系,形成作为所述目标表间接依赖的源表对应关系集合。
步骤S105:遍历所述第一源表对应关系集合、所述第二源表对应关系集合和所述第三源表对应关系集合,采用预设的规则,标识与所述任务相关的各个任务依赖关系的错误类型和可优化类型的至少一者。
在本实施例中,所述错误类型包括:依赖关系缺失,依赖关系不符合特定数据仓库特定模型分层顺序;所述优化类型包括:依赖关系多余、重复依赖关系,循环依赖关系。在本实施例中,所述采用预设的规则,标识与所述任务相关的各个任务依赖关系的错误类型和可优化类型的至少一者是指:
若所述源表既不在所述第二源表对应关系集合中,也不在所述第三源表对应关系集合中,而在所述第一源表对应关系集合中,则将所述任务对该源表的任务依赖关系标识为依赖关系缺失。
若所述第二源表对应关系集合中存在的所述源表,所述源表的表名和目标表的表名符合预设规则,则将所述任务对该源表的任务依赖关系标识为依赖关系不符合特定数据仓库特定模型分层顺序。
若所述源表在所述第二源表对应关系集合中,不在所述第一源表对应关系集合中,则将所述任务对该源表的任务依赖关系标识为依赖关系多余。
若所述源表既在所述第一源表对应关系集合中,又在所述第二源表对应关系集合中,同时也在所述第三源表对应关系集合中,则将所述任务对该源表的任务依赖关系标识为重复依赖关系。
若所述第二源表对应关系集合或所述第三源表对应关系集合中存在的所述源表,和目标表是同一个表,则将所述任务对该源表的任务依赖关系标识为循环依赖关系。
在本实施例中,所述源表的表名和目标表的表名符合预设规则是指,数据仓库分层的源表表名和目标表表名的命名规则。例如,本实施例中预设规则为:目标表名以idl标识开头,而源表名以adl标识开头,或目标表名以bdl标识开头,而源表名以idl标识开头。在实际应用中,根据具体需求,可以定义其他的预设规则。
在本实施例中,所有定时执行的任务调度或者文件操作等使用LINUX基本命令,脚本方面用到了SHELL、PYTHON等脚本语言,同时还用到了ORACLE的存储过程解析任务脚本,这些都是基于后续实现成本相对较低而选择的。实际应用中,脚本解析部分也可用其他主流的计算机语言或者脚本语言,如:JAVA、PERL等,而数据库也可用其他常见数据库,例如:GREENPLUM、MYSQL等实现数据存储。
本申请提供的ETL任务依赖关系的检测方法,通过解析ETL任务的数据操作指令,结合任务属性表,获取任务相关的目标表、目标表依赖的所有源表及其对应的任务号,即预期的任务依赖关系;并结合任务依赖关系配置表,将任务依赖关系配置表中实际的任务依赖关系和预期的任务依赖关系按预定的规则进行比对,自动发现实际的任务依赖关系中的缺失、多余、重复的依赖关系,以及循环依赖、不符合特定数据仓库特定模型分层顺序的依赖关系,从而减少任务依赖问题导致的线上故障的发生频率,能够节约测试人员手动排查任务依赖问题的时间,达到提高测试效率的效果。
本申请提供的ETL任务依赖关系的检测方法,在实际应用中根据需要可以每天定时执行,因此并不局限于单个项目发布后使用。此外,通过每天定时扫描,对于每天新增的任务依赖关系,即使没有测试人员的跟进,也能通过持续地集成及时查漏补缺,从而减少任务依赖关系问题导致的线上故障,并释放相关测试人力。
在上述的实施例中,提供了一种ETL任务依赖关系的检测方法,与之相对应的,本申请还提供一种ETL任务依赖关系的检测装置。请参看图8,其为本申请的装置实施例的示意图。由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。
本实施例的一种ETL任务依赖关系的检测装置,包括:
获取单元101,用于针对ETL的每一个任务,获取所述任务包括的数据操作指令;写入单元102,用于将所述数据操作指令插入到数据库内部表;第一生成单元103,用于根据所述数据操作指令和任务属性表,生成源表对应关系集合和目标表对应关系集合,将所述源表对应关系集合作为第一源表对应关系集合;第二生成单元104,用于根据所述目标表对应关系集合、所述任务属性表和任务依赖关系配置表,生成目标表直接依赖的源表对应关系集合和目标表间接依赖的源表对应关系集合,将所述目标表直接依赖的源表对应关系集合作为第二源表对应关系集合,将所述目标表间接依赖的源表对应关系集合作为第三源表对应关系集合;标识单元105,用于遍历所述第一源表对应关系集合、所述第二源表对应关系集合和所述第三源表对应关系集合的各个源表,采用预设的规则,标识与所述任务相关的各个任务依赖关系的错误类型和可优化类型的至少一者;
其中,所述第一源表对应关系集合包括所述任务依赖的各个源表的表名和源表的任务号之间的对应关系;所述目标表对应关系集合包括所述任务中去除临时目标表后的各个目标表的表名和目标表的任务号之间的对应关系;
所述第二源表对应关系集合包括所述目标表对应关系集合中的目标表直接依赖的各个源表的表名和源表的任务号之间的对应关系;所述第三源表对应关系集合包括所述目标表对应关系集合中的目标表间接依赖的各个源表的表名和源表的任务号之间的对应关系。
可选的,还包括:
第一初始化单元,用于初始化所述任务属性表和所述任务依赖关系配置表;所述初始化所述任务属性表和所述任务依赖关系配置表,是指将在线任务属性表和在线任务依赖关系配置表同步到线下数据库。
可选的,还包括:
第二初始化单元,用于初始化所述任务的集合;所述初始化所述任务的集合,是指将在线任务的集合同步到线下服务器。
可选的,所述获取单元101包括:
第一获取子单元,用于读取所述任务的集合,获取所述任务的集合中各个所述任务的名称;
第二获取子单元,用于根据各个所述任务的名称,读取所述任务,获取该任务包括的所述数据操作指令。
可选的,还包括:
规则化单元,用于根据预设的规则,对各个所述数据操作指令进行指令表达的规则化处理。
可选的,所述规则化单元包括:
建表子单元,用于创建数据库外部表;
存储子单元,用于将各个所述数据操作指令存储到所述数据库外部表;
规则化子单元,用于读取所述数据库外部表中存储的各个所述数据操作指令,对各个所述数据操作指令进行所述规则化处理。
可选的,所述第一生成单元103包括:
第一获取子单元,用于读取所述数据库内部表,获取所述数据操作指令;
第一解析子单元,用于解析所述数据操作指令,获取所述数据操作指令中from子句后的所有表名和join子句后的所有表名;
第一删除子单元,用于删除所有表名中重复的表名,形成所有非冗余的表名;
第二解析子单元,用于解析所述数据操作指令,获取所述数据操作指令中insertoverwrite table子句后的所有临时表表名;
第二删除子单元,用于将所有所述临时表表名从所述所有非冗余的表名中删除,形成源表集合;
第二获取子单元,用于根据所述源表集合中各个表的表名和所述任务属性表,获取所述源表集合中各个表的任务号;
第一生成子单元,用于根据所述源表集合中的各个源表的表名和源表的任务号之间的对应关系,形成所述源表对应关系集合。
可选的,所述第一生成单元103还包括:
第三解析子单元,用于解析所述数据操作指令,获取所述数据操作指令中insertoverwrite table字句后的所有非临时表表名,形成目标表集合;
第三获取子单元,用于根据所述目标表集合中各个目标表的表名和所述任务属性表,获取所述目标表集合中各个目标表的任务号;
第二生成子单元,用于根据所述目标表集合中各个目标表的表名和其任务号之间的关系,形成所述目标表对应关系集合。
可选的,所述第二生成单元104包括:
直接生成子单元,用于根据所述目标表对应关系集合、所述任务依赖关系配置表和所述任务属性表,获取所述目标表直接依赖的源表对应关系集合;
间接生成子单元,用于根据所述目标表直接依赖的源表对应关系集合、所述任务依赖关系配置表和所述任务属性表,获取所述目标表间接依赖的源表对应关系集合。
可选的,所述直接生成子单元包括:
第一获取子单元,用于根据所述目标表对应关系集合和所述任务依赖关系配置表,获取所述目标表直接依赖的所有源表任务号,形成直接依赖的源表任务号集合;
第二获取子单元,用于根据所述直接依赖的源表任务号集合中各个源表的任务号和所述任务属性表,获取所述直接依赖的源表任务号集合中各个源表任务号对应的表名;
生成子单元,用于根据所述直接依赖的源表任务号集合中各个源表的任务号和其表名之间的关系,形成所述目标表直接依赖的源表对应关系集合。
可选的,所述间接生成子单元包括:
第一获取子单元,用于根据所述目标表直接依赖的源表对应关系集合和所述任务依赖关系配置表,获取所述目标表间接依赖的所有源表任务号,形成间接依赖的源表任务号集合;
第二获取子单元,用于根据所述间接依赖的源表任务号集合中各个源表的任务号和所述任务属性表,获取所述间接依赖的源表任务号集合中各个源表任务号对应的表名;
生成子单元,用于根据所述间接依赖的源表任务号集合中各个源表的任务号和其表名之间的关系,形成作为所述目标表间接依赖的源表对应关系集合。
可选的,还包括:
连接数据库单元,用于与所述数据库建立连接。
本申请实施例还提供了一种ETL工具,该工具包括上述实施例所述的ETL任务依赖关系的检测装置。通过ETL任务依赖关系的检测装置,解析ETL任务的数据操作指令,并结合任务属性表和任务依赖关系配置表,自动发现实际的任务依赖关系中的缺失、多余、重复的依赖关系,以及循环依赖、不符合特定数据仓库特定模型分层顺序的依赖关系。对于依赖关系缺失、不符合特定数据仓库特定模型分层顺序的依赖关系识别为错误依赖关系展示给相关的ETL责任开发人员,对其进行修复;而对于多余、重复、循环任务依赖关系则识别为待优化的依赖关系展示给相关的ETL责任开发人员,考虑到这几种依赖关系可能影响ETL任务调度系统的任务延迟或者影响系统性能,故需要让相关的ETL责任开发人员自行判断是否有必要进行优化操作。此外,通过crontab定时调度,系统能够实现持续集成的任务依赖关系检查。
本发明虽然以较佳实施例公开如上,但其并不是用来限定本发明,任何本领域技术人员在不脱离本发明的精神和范围内,都可以做出可能的变动和修改,因此本发明的保护范围应当以本发明权利要求所界定的范围为准。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
1、计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
2、本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
Claims (32)
1.一种ETL任务依赖关系的检测方法,其特征在于,包括:
针对ETL的每一个任务,获取所述任务包括的数据操作指令;
将所述数据操作指令插入到数据库内部表;
根据所述数据操作指令和任务属性表,生成源表对应关系集合和目标表对应关系集合,将所述源表对应关系集合作为第一源表对应关系集合;
根据所述目标表对应关系集合、所述任务属性表和任务依赖关系配置表,生成目标表直接依赖的源表对应关系集合和目标表间接依赖的源表对应关系集合,将所述目标表直接依赖的源表对应关系集合作为第二源表对应关系集合,将所述目标表间接依赖的源表对应关系集合作为第三源表对应关系集合;
遍历所述第一源表对应关系集合、所述第二源表对应关系集合和所述第三源表对应关系集合的各个源表,采用预设的规则,标识与所述任务相关的各个任务依赖关系的错误类型和可优化类型的至少一者;
其中,所述第一源表对应关系集合包括所述任务依赖的各个源表的表名和源表的任务号之间的对应关系;所述目标表对应关系集合包括所述任务中去除临时目标表后的各个目标表的表名和目标表的任务号之间的对应关系;
所述第二源表对应关系集合包括所述目标表对应关系集合中的目标表直接依赖的各个源表的表名和源表的任务号之间的对应关系;所述第三源表对应关系集合包括所述目标表对应关系集合中的目标表间接依赖的各个源表的表名和源表的任务号之间的对应关系。
2.根据权利要求1所述的ETL任务依赖关系的检测方法,其特征在于,在所述获取所述任务包括的数据操作指令之前,还包括:
初始化所述任务属性表和所述任务依赖关系配置表;所述初始化所述任务属性表和所述任务依赖关系配置表,是指将在线任务属性表和在线任务依赖关系配置表同步到线下数据库。
3.根据权利要求2所述的ETL任务依赖关系的检测方法,其特征在于,根据预设的时间间隔,初始化所述任务属性表和所述任务依赖关系配置表。
4.根据权利要求1所述的ETL任务依赖关系的检测方法,其特征在于,所述任务存储在脚本文件或数据库中。
5.根据权利要求4所述的ETL任务依赖关系的检测方法,其特征在于,所述脚本文件采用的编写语言包括以下任意一种:PERL脚本语言、SHELL脚本语言、PYTHON脚本语言。
6.根据权利要求4所述的ETL任务依赖关系的检测方法,其特征在于,在所述获取所述任务包括的数据操作指令之前,还包括:
初始化所述任务的集合;所述初始化所述任务的集合,是指将在线任务的集合同步到线下服务器。
7.根据权利要求6所述的ETL任务依赖关系的检测方法,其特征在于,根据预设的时间间隔,初始化所述任务的集合。
8.根据权利要求4所述的ETL任务依赖关系的检测方法,其特征在于,所述针对ETL的每一个任务,获取所述任务包括的数据操作指令包括:
读取所述任务的集合,获取所述任务的集合中各个所述任务的名称;
根据各个所述任务的名称,读取所述任务,获取该任务包括的所述数据操作指令。
9.根据权利要求1所述的ETL任务依赖关系的检测方法,其特征在于,所述将所述数据操作指令插入到数据库内部表之前,还包括:
对各个所述数据操作指令进行指令表达的规则化处理,具体是指,将所述数据操作指令中的特殊字符转换为空格、将字符转换为大写字符以及删除无效行;所述特殊字符至少包括空白符;所述无效行是指注释行、空白行和注释块。
10.根据权利要求9所述的ETL任务依赖关系的检测方法,其特征在于,所述对各个所述数据操作指令进行指令表达的规则化处理包括:
创建数据库外部表;
将各个所述数据操作指令存储到所述数据库外部表;
读取所述数据库外部表中存储的各个所述数据操作指令,对各个所述数据操作指令进行所述规则化处理。
11.根据权利要求1所述的ETL任务依赖关系的检测方法,其特征在于,所述根据所述数据操作指令和任务属性表,生成源表对应关系集合包括:
读取所述数据库内部表,获取所述数据操作指令;
解析所述数据操作指令,获取所述数据操作指令中from子句后的所有表名和join子句后的所有表名;
删除所有表名中重复的表名,形成所有非冗余的表名;
解析所述数据操作指令,获取所述数据操作指令中insert overwrite table子句后的所有临时表表名;
将所有所述临时表表名从所述所有非冗余的表名中删除,形成源表集合;
根据所述源表集合中各个表的表名和所述任务属性表,获取所述源表集合中各个表的任务号;
根据所述源表集合中的各个源表的表名和源表的任务号之间的对应关系,形成所述源表对应关系集合。
12.根据权利要求1所述的ETL任务依赖关系的检测方法,其特征在于,所述根据所述数据操作指令和任务属性表,生成目标表对应关系集合包括:
读取所述数据库内部表,获取所述数据操作指令;
解析所述数据操作指令,获取所述数据操作指令中insert overwrite table子句后的所有非临时表表名,形成目标表集合;
根据所述目标表集合中各个目标表的表名和所述任务属性表,获取所述目标表集合中各个目标表的任务号;
根据所述目标表集合中各个目标表的表名和其任务号之间的关系,形成所述目标表对应关系集合。
13.根据权利要求1所述的ETL任务依赖关系的检测方法,其特征在于,所述根据所述目标表对应关系集合、所述任务属性表和任务依赖关系配置表,生成目标表直接依赖的源表对应关系集合和目标表间接依赖的源表对应关系集合包括:
根据所述目标表对应关系集合、所述任务依赖关系配置表和所述任务属性表,获取所述目标表直接依赖的源表对应关系集合;
根据所述目标表直接依赖的源表对应关系集合、所述任务依赖关系配置表和所述任务属性表,获取所述目标表间接依赖的源表对应关系集合。
14.根据权利要求13所述的ETL任务依赖关系的检测方法,其特征在于,所述获取所述目标表直接依赖的源表对应关系集合包括:
根据所述目标表对应关系集合和所述任务依赖关系配置表,获取所述目标表直接依赖的所有源表任务号,形成直接依赖的源表任务号集合;
根据所述直接依赖的源表任务号集合中各个源表的任务号和所述任务属性表,获取所述直接依赖的源表任务号集合中各个源表任务号对应的表名;
根据所述直接依赖的源表任务号集合中各个源表的任务号和其表名之间的关系,形成所述目标表直接依赖的源表对应关系集合。
15.根据权利要求13所述的ETL任务依赖关系的检测方法,其特征在于,所述获取所述目标表间接依赖的源表对应关系集合包括:
根据所述目标表直接依赖的源表对应关系集合和所述任务依赖关系配置表,获取所述目标表间接依赖的所有源表任务号,形成间接依赖的源表任务号集合;
根据所述间接依赖的源表任务号集合中各个源表的任务号和所述任务属性表,获取所述间接依赖的源表任务号集合中各个源表任务号对应的表名;
根据所述间接依赖的源表任务号集合中各个源表的任务号和其表名之间的关系,形成作为所述目标表间接依赖的源表对应关系集合。
16.根据权利要求1所述的ETL任务依赖关系的检测方法,其特征在于,所述错误类型包括以下至少一种:依赖关系缺失,依赖关系不符合特定数据仓库特定模型分层顺序;所述可优化类型包括以下至少一种:依赖关系多余、重复依赖关系,循环依赖关系。
17.根据权利要求16所述的ETL任务依赖关系的检测方法,其特征在于,所述采用预设的规则,标识与所述任务相关的各个任务依赖关系的错误类型和可优化类型的至少一者是指:
若所述源表既不在所述第二源表对应关系集合中,也不在所述第三源表对应关系集合中,而在所述第一源表对应关系集合中,则将所述任务对该源表的任务依赖关系标识为依赖关系缺失;
若所述第二源表对应关系集合中存在的所述源表,所述源表的表名和目标表的表名符合数据仓库分层的源表表名和目标表表名的命名规则,则将所述任务对该源表的任务依赖关系标识为依赖关系不符合特定数据仓库特定模型分层顺序;
若所述源表在所述第二源表对应关系集合中,不在所述第一源表对应关系集合中,则将所述任务对该源表的任务依赖关系标识为依赖关系多余;
若所述源表既在所述第一源表对应关系集合中,又在所述第二源表对应关系集合中,同时也在所述第三源表对应关系集合中,则将所述任务对该源表的任务依赖关系标识为重复依赖关系;
若所述第二源表对应关系集合或所述第三源表对应关系集合中存在的所述源表,和目标表是同一个表,则将所述任务对该源表的任务依赖关系标识为循环依赖关系。
18.根据权利要求1所述的ETL任务依赖关系的检测方法,其特征在于,所述数据库包括以下任意一种:ORACLE数据库、SQL SERVER数据库、MYSQL数据库、GREENPLUM数据库。
19.根据权利要求1所述的ETL任务依赖关系的检测方法,其特征在于,在所述将所述数据操作指令插入到数据库内部表之前,还包括:
与所述数据库建立连接。
20.一种ETL任务依赖关系的检测装置,其特征在于,包括:
获取单元,用于针对ETL的每一个任务,获取所述任务包括的数据操作指令;
写入单元,用于将所述数据操作指令插入到数据库内部表;
第一生成单元,用于根据所述数据操作指令和任务属性表,生成源表对应关系集合和目标表对应关系集合,将所述源表对应关系集合作为第一源表对应关系集合;
第二生成单元,用于根据所述目标表对应关系集合、所述任务属性表和任务依赖关系配置表,生成目标表直接依赖的源表对应关系集合和目标表间接依赖的源表对应关系集合,将所述目标表直接依赖的源表对应关系集合作为第二源表对应关系集合,将所述目标表间接依赖的源表对应关系集合作为第三源表对应关系集合;
标识单元,用于遍历所述第一源表对应关系集合、所述第二源表对应关系集合和所述第三源表对应关系集合的各个源表,采用预设的规则,标识与所述任务相关的各个任务依赖关系的错误类型和可优化类型的至少一者;
其中,所述第一源表对应关系集合包括所述任务依赖的各个源表的表名和源表的任务号之间的对应关系;所述目标表对应关系集合包括所述任务中去除临时目标表后的各个目标表的表名和目标表的任务号之间的对应关系;
所述第二源表对应关系集合包括所述目标表对应关系集合中的目标表直接依赖的各个源表的表名和源表的任务号之间的对应关系;所述第三源表对应关系集合包括所述目标表对应关系集合中的目标表间接依赖的各个源表的表名和源表的任务号之间的对应关系。
21.根据权利要求20所述的ETL任务依赖关系的检测装置,其特征在于,还包括:
第一初始化单元,用于初始化所述任务属性表和所述任务依赖关系配置表;所述初始化所述任务属性表和所述任务依赖关系配置表,是指将在线任务属性表和在线任务依赖关系配置表同步到线下数据库。
22.根据权利要求20所述的ETL任务依赖关系的检测装置,其特征在于,还包括:
第二初始化单元,用于初始化所述任务的集合;所述初始化所述任务的集合,是指将在线任务的集合同步到线下服务器。
23.根据权利要求20所述的ETL任务依赖关系的检测装置,其特征在于,所述获取单元包括:
第一获取子单元,用于读取所述任务的集合,获取所述任务的集合中各个所述任务的名称;
第二获取子单元,用于根据各个所述任务的名称,读取所述任务,获取该任务包括的所述数据操作指令。
24.根据权利要求20所述的ETL任务依赖关系的检测装置,其特征在于,还包括:
规则化单元,对各个所述数据操作指令进行指令表达的规则化处理,具体是指,将所述数据操作指令中的特殊字符转换为空格、将字符转换为大写字符以及删除无效行;所述特殊字符至少包括空白符;所述无效行是指注释行、空白行和注释块。
25.根据权利要求24所述的ETL任务依赖关系的检测装置,其特征在于,所述规则化单元包括:
建表子单元,用于创建数据库外部表;
存储子单元,用于将各个所述数据操作指令存储到所述数据库外部表;
规则化子单元,用于读取所述数据库外部表中存储的各个所述数据操作指令,对各个所述数据操作指令进行所述规则化处理。
26.根据权利要求20所述的ETL任务依赖关系的检测装置,其特征在于,所述第一生成单元包括:
第一获取子单元,用于读取所述数据库内部表,获取所述数据操作指令;
第一解析子单元,用于解析所述数据操作指令,获取所述数据操作指令中from子句后的所有表名和join子句后的所有表名;
第一删除子单元,用于删除所有表名中重复的表名,形成所有非冗余的表名;
第二解析子单元,用于解析所述数据操作指令,获取所述数据操作指令中insertoverwrite table子句后的所有临时表表名;
第二删除子单元,用于将所有所述临时表表名从所述所有非冗余的表名中删除,形成源表集合;
第二获取子单元,用于根据所述源表集合中各个表的表名和所述任务属性表,获取所述源表集合中各个表的任务号;
第一生成子单元,用于根据所述源表集合中的各个源表的表名和源表的任务号之间的对应关系,形成所述源表对应关系集合。
27.根据权利要求20所述的ETL任务依赖关系的检测装置,其特征在于,所述第一生成单元还包括:
第三解析子单元,用于解析所述数据操作指令,获取所述数据操作指令中insertoverwrite table子句后的所有非临时表表名,形成目标表集合;
第三获取子单元,用于根据所述目标表集合中各个目标表的表名和所述任务属性表,获取所述目标表集合中各个目标表的任务号;
第二生成子单元,用于根据所述目标表集合中各个目标表的表名和其任务号之间的关系,形成所述目标表对应关系集合。
28.根据权利要求20所述的ETL任务依赖关系的检测装置,其特征在于,所述第二生成单元包括:
直接生成子单元,用于根据所述目标表对应关系集合、所述任务依赖关系配置表和所述任务属性表,获取所述目标表直接依赖的源表对应关系集合;
间接生成子单元,用于根据所述目标表直接依赖的源表对应关系集合、所述任务依赖关系配置表和所述任务属性表,获取所述目标表间接依赖的源表对应关系集合。
29.根据权利要求28所述的ETL任务依赖关系的检测装置,其特征在于,所述直接生成子单元包括:
第一获取子单元,用于根据所述目标表对应关系集合和所述任务依赖关系配置表,获取所述目标表直接依赖的所有源表任务号,形成直接依赖的源表任务号集合;
第二获取子单元,用于根据所述直接依赖的源表任务号集合中各个源表的任务号和所述任务属性表,获取所述直接依赖的源表任务号集合中各个源表任务号对应的表名;
生成子单元,用于根据所述直接依赖的源表任务号集合中各个源表的任务号和其表名之间的关系,形成所述目标表直接依赖的源表对应关系集合。
30.根据权利要求28所述的ETL任务依赖关系的检测装置,其特征在于,所述间接生成子单元包括:
第一获取子单元,用于根据所述目标表直接依赖的源表对应关系集合和所述任务依赖关系配置表,获取所述目标表间接依赖的所有源表任务号,形成间接依赖的源表任务号集合;
第二获取子单元,用于根据所述间接依赖的源表任务号集合中各个源表的任务号和所述任务属性表,获取所述间接依赖的源表任务号集合中各个源表任务号对应的表名;
生成子单元,用于根据所述间接依赖的源表任务号集合中各个源表的任务号和其表名之间的关系,形成作为所述目标表间接依赖的源表对应关系集合。
31.根据权利要求20所述的ETL任务依赖关系的检测装置,其特征在于,还包括:
连接数据库单元,用于与所述数据库建立连接。
32.一种ETL工具,包括:
根据上述权利要求20所述的ETL任务依赖关系的检测装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410569204.7A CN105589874B (zh) | 2014-10-22 | 2014-10-22 | Etl任务依赖关系的检测方法、装置及etl工具 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410569204.7A CN105589874B (zh) | 2014-10-22 | 2014-10-22 | Etl任务依赖关系的检测方法、装置及etl工具 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105589874A CN105589874A (zh) | 2016-05-18 |
CN105589874B true CN105589874B (zh) | 2019-03-15 |
Family
ID=55929461
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410569204.7A Active CN105589874B (zh) | 2014-10-22 | 2014-10-22 | Etl任务依赖关系的检测方法、装置及etl工具 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105589874B (zh) |
Families Citing this family (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108021563B (zh) * | 2016-10-31 | 2021-09-07 | 华为技术有限公司 | 一种指令间数据依赖的检测方法和装置 |
CN108268494B (zh) * | 2016-12-30 | 2021-11-02 | 中移(苏州)软件技术有限公司 | 一种数据处理与控制逻辑分离的etl调度方法和装置 |
CN107203633B (zh) * | 2017-05-31 | 2020-09-01 | 北京京东尚科信息技术有限公司 | 数据表推数处理方法、装置及电子设备 |
CN110019111B (zh) * | 2017-08-15 | 2021-11-23 | 北京国双科技有限公司 | 数据处理方法、装置、存储介质以及处理器 |
CN107832461B (zh) * | 2017-11-28 | 2021-11-23 | 中国银行股份有限公司 | 一种数据迁移方法及系统 |
CN108038248B (zh) * | 2017-12-28 | 2021-11-26 | 携程计算机技术(上海)有限公司 | Etl依赖自动识别方法与系统 |
CN109725993A (zh) * | 2018-06-01 | 2019-05-07 | 中国平安人寿保险股份有限公司 | 任务执行方法、装置、设备及计算机可读存储介质 |
CN109375993B (zh) * | 2018-08-21 | 2024-04-05 | 中国平安人寿保险股份有限公司 | 调度表的检测方法、装置、计算机设备以及存储介质 |
CN109584420A (zh) * | 2018-12-04 | 2019-04-05 | 上海掌腾信息科技有限公司 | 轨交人行通道系统中基于掌静脉识别的速通门智能通行控制系统及其智能通行控制方法 |
CN109636234B (zh) * | 2018-12-25 | 2021-07-13 | 江苏满运物流信息有限公司 | 任务频次转换方法、装置、电子设备、存储介质 |
CN109857818B (zh) * | 2019-02-03 | 2021-09-14 | 北京字节跳动网络技术有限公司 | 确定生产关系的方法、装置、存储介质及电子设备 |
CN110795455B (zh) * | 2019-09-06 | 2023-11-21 | 中国平安财产保险股份有限公司 | 依赖关系解析方法、电子装置、计算机设备及可读存储介质 |
CN111176718A (zh) * | 2019-12-24 | 2020-05-19 | 中国平安财产保险股份有限公司 | 脚本上线方法、装置、存储介质及电子设备 |
CN111061803A (zh) * | 2019-12-30 | 2020-04-24 | 北京三快在线科技有限公司 | 任务处理方法、装置、设备及存储介质 |
CN111324647A (zh) * | 2020-01-21 | 2020-06-23 | 北京东方金信科技有限公司 | 一种生成etl代码的方法及装置 |
CN111786854B (zh) * | 2020-06-30 | 2022-08-16 | 曙光信息产业(北京)有限公司 | 网卡测试方法、装置、电子设备及可读存储介质 |
CN111797157B (zh) * | 2020-07-21 | 2024-03-22 | 政采云有限公司 | 一种数据处理方法、系统及电子设备和存储介质 |
CN111782738B (zh) * | 2020-08-14 | 2021-08-17 | 北京斗米优聘科技发展有限公司 | 构建数据仓库表级别血缘关系的方法及装置 |
CN112256409B (zh) * | 2020-09-15 | 2022-03-04 | 中科驭数(北京)科技有限公司 | 基于多个数据库加速器的任务执行方法及装置 |
CN112416752B (zh) * | 2020-11-02 | 2023-06-06 | 四川新网银行股份有限公司 | 一种基于数据仓库etl分层测试的方法 |
CN112445600A (zh) * | 2020-12-15 | 2021-03-05 | 北京首汽智行科技有限公司 | 一种离线数据处理任务发布方法及系统 |
CN112506957A (zh) * | 2020-12-18 | 2021-03-16 | 杭州数梦工场科技有限公司 | 工作流依赖关系的确定方法及装置 |
CN112685325B (zh) * | 2021-01-22 | 2023-07-28 | 中信银行股份有限公司 | 一种etl软件研发测试管理方法及系统 |
CN113064704A (zh) * | 2021-03-18 | 2021-07-02 | 北京沃东天骏信息技术有限公司 | 任务处理方法、装置、电子设备和计算机可读介质 |
US11941441B2 (en) | 2021-04-15 | 2024-03-26 | Capital One Services, Llc | Data movement and monitoring system |
CN117608807A (zh) * | 2023-12-22 | 2024-02-27 | 无锡拈花云科技服务有限公司 | 数据调度任务自动创建及依赖自动构建方法、系统及介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101281461A (zh) * | 2007-04-04 | 2008-10-08 | 国际商业机器公司 | 用于迁移应用所依赖的系统环境的方法和装置 |
CN101969475A (zh) * | 2010-11-15 | 2011-02-09 | 张军 | 基于云计算的商业数据可控分发与融合应用系统 |
CN102945155A (zh) * | 2012-10-22 | 2013-02-27 | 中标软件有限公司 | 一种Linux操作系统软件包及其依赖关系缺失检测方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7805341B2 (en) * | 2004-04-13 | 2010-09-28 | Microsoft Corporation | Extraction, transformation and loading designer module of a computerized financial system |
CN102650996B (zh) * | 2011-02-28 | 2015-02-11 | 国际商业机器公司 | 确定数据库表之间的数据映射关系的方法和装置 |
-
2014
- 2014-10-22 CN CN201410569204.7A patent/CN105589874B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101281461A (zh) * | 2007-04-04 | 2008-10-08 | 国际商业机器公司 | 用于迁移应用所依赖的系统环境的方法和装置 |
CN101969475A (zh) * | 2010-11-15 | 2011-02-09 | 张军 | 基于云计算的商业数据可控分发与融合应用系统 |
CN102945155A (zh) * | 2012-10-22 | 2013-02-27 | 中标软件有限公司 | 一种Linux操作系统软件包及其依赖关系缺失检测方法 |
Also Published As
Publication number | Publication date |
---|---|
CN105589874A (zh) | 2016-05-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105589874B (zh) | Etl任务依赖关系的检测方法、装置及etl工具 | |
CN107958057B (zh) | 一种用于异构数据库中数据迁移的代码生成方法及装置 | |
EP3430529B1 (en) | Intelligent metadata management and data lineage tracing | |
CN107122368B (zh) | 一种数据校验方法、装置及电子设备 | |
CN108509185B (zh) | 用于任意软件逻辑建模的系统和方法 | |
US20140344817A1 (en) | Converting a hybrid flow | |
CN110472068A (zh) | 基于异构分布式知识图谱的大数据处理方法、设备及介质 | |
CN110737594B (zh) | 自动生成测试用例的数据库标准符合性测试方法及装置 | |
WO2014186057A1 (en) | Supporting combination of flow based etl and entity relationship based etl | |
CN103761189A (zh) | 一种测试用例管理方法及系统 | |
CN105144080A (zh) | 用于元数据管理的系统 | |
CN101901265B (zh) | 一种虚拟试验数据对象化管理系统 | |
US9563650B2 (en) | Migrating federated data to multi-source universe database environment | |
CN106095501B (zh) | 一种应用部署方法及装置 | |
US10621531B2 (en) | Executing a business process by a standard business process engine | |
CN110019116B (zh) | 数据追溯方法、装置、数据处理设备及计算机存储介质 | |
CN110866024B (zh) | 一种矢量数据库增量更新方法及系统 | |
US8918765B2 (en) | Auto-documenting based on real-time analysis of code execution | |
CN106951593B (zh) | 一种生成保护测控装置的配置文件的方法和装置 | |
CN112163017B (zh) | 一种知识挖掘系统及方法 | |
US10338891B2 (en) | Migration between model elements of different types in a modeling environment | |
CN105573763A (zh) | 一种支持rtos的嵌入式系统建模方法 | |
CN105760383B (zh) | 一种etl任务中指标变更的检测方法和装置 | |
CN106843822A (zh) | 一种执行代码生成方法及设备 | |
Puente et al. | Wiki refactoring as mind map reshaping |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20240202 Address after: Room 01, 45th Floor, AXA Building, 8 Shanton Road, Singapore Patentee after: Alibaba Singapore Holdings Ltd. Country or region after: Singapore Address before: A four-storey 847 mailbox in Grand Cayman Capital Building, British Cayman Islands Patentee before: ALIBABA GROUP HOLDING Ltd. Country or region before: Cayman Islands |
|
TR01 | Transfer of patent right |