首页> 中国专利> ETL任务依赖关系的检测方法、装置及ETL工具

ETL任务依赖关系的检测方法、装置及ETL工具

摘要

本申请公开了一种ETL任务依赖关系的检测方法和装置,所述方法包括:针对ETL的每一个任务,获取任务包括的数据操作指令;解析数据操作指令,获取任务相关的源表和目标表;根据目标表、任务属性表和任务依赖关系配置表,获取目标表直接依赖的源表和间接依赖的源表;遍历任务相关的源表、直接依赖的源表和间接依赖的源表,采用预设的规则标识与任务相关的各个任务依赖关系的错误类型和可优化类型。采用本申请提供的方法,通过将实际的任务依赖关系和预期的任务依赖关系按预定规则进行比对,自动发现错误和可优化的任务依赖关系,从而减少任务依赖问题导致的故障发生频率,节约测试人员手动排查任务依赖问题的时间,达到提高测试效率的效果。

著录项

  • 公开/公告号CN105589874A

    专利类型发明专利

  • 公开/公告日2016-05-18

    原文格式PDF

  • 申请/专利权人 阿里巴巴集团控股有限公司;

    申请/专利号CN201410569204.7

  • 发明设计人 吴媛媛;

    申请日2014-10-22

  • 分类号G06F17/30(20060101);

  • 代理机构11441 北京市清华源律师事务所;

  • 代理人沈泳;李赞坚

  • 地址 英属开曼群岛大开曼资本大厦一座四层847号邮箱

  • 入库时间 2023-12-18 15:20:54

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-03-15

    授权

    授权

  • 2016-06-15

    实质审查的生效 IPC(主分类):G06F17/30 申请日:20141022

    实质审查的生效

  • 2016-05-18

    公开

    公开

说明书

技术领域

本发明涉及数据仓库技术领域,具体涉及一种ETL任务依赖关系的检测方 法和装置。本发明同时涉及一种ETL工具。

背景技术

ETL(Extract-Transform-Load,数据抽取、转换、装载的过程)作为BI/DW (BusinessIntelligence/DataWarehouse,商业智能/数据仓库)的核心和灵魂,能 够按照统一的规则集成并提高数据的价值,是负责完成数据从数据源向目标数 据仓库转化的过程,是实施数据仓库的重要步骤。在数据仓库的整个项目中最 难部分是用户需求分析和模型设计,而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子句后的所有表名;

删除所有表名中重复的表名,形成所有非冗余的表名;

解析所述数据操作指令,获取所述数据操作指令中insertoverwritetable子 句后的所有临时表表名;

将所有所述临时表表名从所述所有非冗余的表名中删除,形成源表集合;

根据所述源表集合中各个表的表名和所述任务属性表,获取所述源表集合 中各个表的任务号;

根据所述源表集合中的各个源表的表名和源表的任务号之间的对应关系, 形成所述源表对应关系集合。

可选的,所述根据所述数据操作指令和任务属性表,生成目标表对应关系 集合包括:

读取所述数据库内部表,获取所述数据操作指令;

解析所述数据操作指令,获取所述数据操作指令中insertoverwritetable字 句后的所有非临时表表名,形成目标表集合;

根据所述目标表集合中各个目标表的表名和所述任务属性表,获取所述目 标表集合中各个目标表的任务号;

根据所述目标表集合中各个目标表的表名和其任务号之间的关系,形成所 述目标表对应关系集合。

可选的,所述根据所述目标表对应关系集合、所述任务属性表和任务依赖 关系配置表,生成目标表直接依赖的源表对应关系集合和目标表间接依赖的源 表对应关系集合包括:

根据所述目标表对应关系集合、所述任务依赖关系配置表和所述任务属性 表,获取所述目标表直接依赖的源表对应关系集合;

根据所述目标表直接依赖的源表对应关系集合、所述任务依赖关系配置表 和所述任务属性表,获取所述目标表间接依赖的源表对应关系集合。

可选的,所述获取所述目标表直接依赖的源表对应关系集合包括:

根据所述目标表对应关系集合和所述任务依赖关系配置表,获取所述目标 表直接依赖的所有源表任务号,形成直接依赖的源表任务号集合;

根据所述直接依赖的源表任务号集合中各个源表的任务号和所述任务属性 表,获取所述直接依赖的源表任务号集合中各个源表任务号对应的表名;

根据所述直接依赖的源表任务号集合中各个源表的任务号和其表名之间的 关系,形成所述目标表直接依赖的源表对应关系集合。

可选的,所述获取所述目标表间接依赖的源表对应关系集合包括:

根据所述目标表直接依赖的源表对应关系集合和所述任务依赖关系配置 表,获取所述目标表间接依赖的所有源表任务号,形成间接依赖的源表任务号 集合;

根据所述间接依赖的源表任务号集合中各个源表的任务号和所述任务属性 表,获取所述间接依赖的源表任务号集合中各个源表任务号对应的表名;

根据所述间接依赖的源表任务号集合中各个源表的任务号和其表名之间的 关系,形成作为所述目标表间接依赖的源表对应关系集合。

可选的,所述错误类型包括:依赖关系缺失,依赖关系不符合特定数据仓 库特定模型分层顺序;所述优化类型包括:依赖关系多余、重复依赖关系,循 环依赖关系。

可选的,所述采用预设的规则,标识与所述任务相关的各个任务依赖关系 的错误类型和可优化类型的至少一者是指:

若所述源表既不在所述第二源表对应关系集合中,也不在所述第三源表对 应关系集合中,而在所述第一源表对应关系集合中,则将所述任务对该源表的 任务依赖关系标识为依赖关系缺失;

若所述第二源表对应关系集合中存在的所述源表,所述源表的表名和目标 表的表名符合预设规则,则将所述任务对该源表的任务依赖关系标识为依赖关 系不符合特定数据仓库特定模型分层顺序;

若所述源表在所述第二源表对应关系集合中,不在所述第一源表对应关系 集合中,则将所述任务对该源表的任务依赖关系标识为依赖关系多余;

若所述源表既在所述第一源表对应关系集合中,又在所述第二源表对应关 系集合中,同时也在所述第三源表对应关系集合中,则将所述任务对该源表的 任务依赖关系标识为重复依赖关系;

若所述第二源表对应关系集合或所述第三源表对应关系集合中存在的所述 源表,和目标表是同一个表,则将所述任务对该源表的任务依赖关系标识为循 环依赖关系。

可选的,所述数据库包括:ORACLE数据库、SQLSERVER数据库、MYSQL 数据库、GREENPLUM数据库。

可选的,在所述将所述数据操作指令插入到数据库内部表之前,还包括:

与所述数据库建立连接。

相应的,本申请还提供一种ETL任务依赖关系的检测装置,包括:

获取单元,用于针对ETL的每一个任务,获取所述任务包括的数据操作指 令;

写入单元,用于将所述数据操作指令插入到数据库内部表;

第一生成单元,用于根据所述数据操作指令和任务属性表,生成源表对应 关系集合和目标表对应关系集合,将所述源表对应关系集合作为第一源表对应 关系集合;

第二生成单元,用于根据所述目标表对应关系集合、所述任务属性表和任 务依赖关系配置表,生成目标表直接依赖的源表对应关系集合和目标表间接依 赖的源表对应关系集合,将所述目标表直接依赖的源表对应关系集合作为第二 源表对应关系集合,将所述目标表间接依赖的源表对应关系集合作为第三源表 对应关系集合;

标识单元,用于遍历所述第一源表对应关系集合、所述第二源表对应关系 集合和所述第三源表对应关系集合的各个源表,采用预设的规则,标识与所述 任务相关的各个任务依赖关系的错误类型和可优化类型的至少一者;

其中,所述第一源表对应关系集合包括所述任务依赖的各个源表的表名和 源表的任务号之间的对应关系;所述目标表对应关系集合包括所述任务中去除 临时目标表后的各个目标表的表名和目标表的任务号之间的对应关系;

所述第二源表对应关系集合包括所述目标表对应关系集合中的目标表直接 依赖的各个源表的表名和源表的任务号之间的对应关系;所述第三源表对应关 系集合包括所述目标表对应关系集合中的目标表间接依赖的各个源表的表名和 源表的任务号之间的对应关系。

可选的,还包括:

第一初始化单元,用于初始化所述任务属性表和所述任务依赖关系配置表; 所述初始化所述任务属性表和所述任务依赖关系配置表,是指将在线任务属性 表和在线任务依赖关系配置表同步到线下数据库。

可选的,还包括:

第二初始化单元,用于初始化所述任务的集合;所述初始化所述任务的集 合,是指将在线任务的集合同步到线下服务器。

可选的,所述获取单元包括:

第一获取子单元,用于读取所述任务的集合,获取所述任务的集合中各个 所述任务的名称;

第二获取子单元,用于根据各个所述任务的名称,读取所述任务,获取该 任务包括的所述数据操作指令。

可选的,还包括:

规则化单元,用于根据预设的规则,对各个所述数据操作指令进行指令表 达的规则化处理。

可选的,所述规则化单元包括:

建表子单元,用于创建数据库外部表;

存储子单元,用于将各个所述数据操作指令存储到所述数据库外部表;

规则化子单元,用于读取所述数据库外部表中存储的各个所述数据操作指 令,对各个所述数据操作指令进行所述规则化处理。

可选的,所述第一生成单元包括:

第一获取子单元,用于读取所述数据库内部表,获取所述数据操作指令;

第一解析子单元,用于解析所述数据操作指令,获取所述数据操作指令中 from子句后的所有表名和join子句后的所有表名;

第一删除子单元,用于删除所有表名中重复的表名,形成所有非冗余的表 名;

第二解析子单元,用于解析所述数据操作指令,获取所述数据操作指令中 insertoverwritetable子句后的所有临时表表名;

第二删除子单元,用于将所有所述临时表表名从所述所有非冗余的表名中 删除,形成源表集合;

第二获取子单元,用于根据所述源表集合中各个表的表名和所述任务属性 表,获取所述源表集合中各个表的任务号;

第一生成子单元,用于根据所述源表集合中的各个源表的表名和源表的任 务号之间的对应关系,形成所述源表对应关系集合。

可选的,所述第一生成单元还包括:

第三解析子单元,用于解析所述数据操作指令,获取所述数据操作指令中 insertoverwritetable字句后的所有非临时表表名,形成目标表集合;

第三获取子单元,用于根据所述目标表集合中各个目标表的表名和所述任 务属性表,获取所述目标表集合中各个目标表的任务号;

第二生成子单元,用于根据所述目标表集合中各个目标表的表名和其任务 号之间的关系,形成所述目标表对应关系集合。

可选的,所述第二生成单元包括:

直接生成子单元,用于根据所述目标表对应关系集合、所述任务依赖关系 配置表和所述任务属性表,获取所述目标表直接依赖的源表对应关系集合;

间接生成子单元,用于根据所述目标表直接依赖的源表对应关系集合、所 述任务依赖关系配置表和所述任务属性表,获取所述目标表间接依赖的源表对 应关系集合。

可选的,所述直接生成子单元包括:

第一获取子单元,用于根据所述目标表对应关系集合和所述任务依赖关系 配置表,获取所述目标表直接依赖的所有源表任务号,形成直接依赖的源表任 务号集合;

第二获取子单元,用于根据所述直接依赖的源表任务号集合中各个源表的 任务号和所述任务属性表,获取所述直接依赖的源表任务号集合中各个源表任 务号对应的表名;

生成子单元,用于根据所述直接依赖的源表任务号集合中各个源表的任务 号和其表名之间的关系,形成所述目标表直接依赖的源表对应关系集合。

可选的,所述间接生成子单元包括:

第一获取子单元,用于根据所述目标表直接依赖的源表对应关系集合和所 述任务依赖关系配置表,获取所述目标表间接依赖的所有源表任务号,形成间 接依赖的源表任务号集合;

第二获取子单元,用于根据所述间接依赖的源表任务号集合中各个源表的 任务号和所述任务属性表,获取所述间接依赖的源表任务号集合中各个源表任 务号对应的表名;

生成子单元,用于根据所述间接依赖的源表任务号集合中各个源表的任务 号和其表名之间的关系,形成作为所述目标表间接依赖的源表对应关系集合。

可选的,还包括:

连接数据库单元,用于与所述数据库建立连接。

此外,本申请还提供一种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数据库、SQLSERVER数据库、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:解析所述数据操作指令,获取所述数据操作指令中insert overwritetable子句后的所有临时表表名。

步骤S10315:将所有所述临时表表名从所述所有非冗余的表名中删除,形 成源表集合。

步骤S10316:根据所述源表集合中各个表的表名和所述任务属性表,获取 所述源表集合中各个表的任务号。

步骤S10317:根据所述源表集合中的各个源表的表名和源表的任务号之间 的对应关系,形成所述源表对应关系集合。

在本实施例中,通过解析任务的数据操作指令,得到图2所示的脚本文件 中的源表有dataware_example_source1、dataware_example_source2和 dataware_example_source3,再通过表名查询任务属性表,得到每个源表对应的 任务号。

在本实施例中,所述根据所述数据操作指令和任务属性表,生成目标表对 应关系集合包括:

步骤S10321:读取所述数据库内部表,获取所述数据操作指令。

步骤S10322:解析所述数据操作指令,获取所述数据操作指令中insert overwritetable字句后的所有非临时表表名,形成目标表集合。

步骤S10323:根据所述目标表集合中各个目标表的表名和所述任务属性表, 获取所述目标表集合中各个目标表的任务号。

步骤S10324:根据所述目标表集合中各个目标表的表名和其任务号之间的 关系,形成所述目标表对应关系集合。

在本实施例中,通过解析任务的数据操作指令,得到图2所示的脚本文件 中的目标表有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子句后的所有表名;

第一删除子单元,用于删除所有表名中重复的表名,形成所有非冗余的表 名;

第二解析子单元,用于解析所述数据操作指令,获取所述数据操作指令中 insertoverwritetable子句后的所有临时表表名;

第二删除子单元,用于将所有所述临时表表名从所述所有非冗余的表名中 删除,形成源表集合;

第二获取子单元,用于根据所述源表集合中各个表的表名和所述任务属性 表,获取所述源表集合中各个表的任务号;

第一生成子单元,用于根据所述源表集合中的各个源表的表名和源表的任 务号之间的对应关系,形成所述源表对应关系集合。

可选的,所述第一生成单元103还包括:

第三解析子单元,用于解析所述数据操作指令,获取所述数据操作指令中 insertoverwritetable字句后的所有非临时表表名,形成目标表集合;

第三获取子单元,用于根据所述目标表集合中各个目标表的表名和所述任 务属性表,获取所述目标表集合中各个目标表的任务号;

第二生成子单元,用于根据所述目标表集合中各个目标表的表名和其任务 号之间的关系,形成所述目标表对应关系集合。

可选的,所述第二生成单元104包括:

直接生成子单元,用于根据所述目标表对应关系集合、所述任务依赖关系 配置表和所述任务属性表,获取所述目标表直接依赖的源表对应关系集合;

间接生成子单元,用于根据所述目标表直接依赖的源表对应关系集合、所 述任务依赖关系配置表和所述任务属性表,获取所述目标表间接依赖的源表对 应关系集合。

可选的,所述直接生成子单元包括:

第一获取子单元,用于根据所述目标表对应关系集合和所述任务依赖关系 配置表,获取所述目标表直接依赖的所有源表任务号,形成直接依赖的源表任 务号集合;

第二获取子单元,用于根据所述直接依赖的源表任务号集合中各个源表的 任务号和所述任务属性表,获取所述直接依赖的源表任务号集合中各个源表任 务号对应的表名;

生成子单元,用于根据所述直接依赖的源表任务号集合中各个源表的任务 号和其表名之间的关系,形成所述目标表直接依赖的源表对应关系集合。

可选的,所述间接生成子单元包括:

第一获取子单元,用于根据所述目标表直接依赖的源表对应关系集合和所 述任务依赖关系配置表,获取所述目标表间接依赖的所有源表任务号,形成间 接依赖的源表任务号集合;

第二获取子单元,用于根据所述间接依赖的源表任务号集合中各个源表的 任务号和所述任务属性表,获取所述间接依赖的源表任务号集合中各个源表任 务号对应的表名;

生成子单元,用于根据所述间接依赖的源表任务号集合中各个源表的任务 号和其表名之间的关系,形成作为所述目标表间接依赖的源表对应关系集合。

可选的,还包括:

连接数据库单元,用于与所述数据库建立连接。

本申请实施例还提供了一种ETL工具,该工具包括上述实施例所述的ETL 任务依赖关系的检测装置。通过ETL任务依赖关系的检测装置,解析ETL任务 的数据操作指令,并结合任务属性表和任务依赖关系配置表,自动发现实际的 任务依赖关系中的缺失、多余、重复的依赖关系,以及循环依赖、不符合特定 数据仓库特定模型分层顺序的依赖关系。对于依赖关系缺失、不符合特定数据 仓库特定模型分层顺序的依赖关系识别为错误依赖关系展示给相关的ETL责任 开发人员,对其进行修复;而对于多余、重复、循环任务依赖关系则识别为待 优化的依赖关系展示给相关的ETL责任开发人员,考虑到这几种依赖关系可能 影响ETL任务调度系统的任务延迟或者影响系统性能,故需要让相关的ETL责 任开发人员自行判断是否有必要进行优化操作。此外,通过crontab定时调度, 系统能够实现持续集成的任务依赖关系检查。

本发明虽然以较佳实施例公开如上,但其并不是用来限定本发明,任何本 领域技术人员在不脱离本发明的精神和范围内,都可以做出可能的变动和修改, 因此本发明的保护范围应当以本发明权利要求所界定的范围为准。

在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出 接口、网络接口和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器 (RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flashRAM)。 内存是计算机可读介质的示例。

1、计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由 任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程 序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存 (PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其 他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存 储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器 (CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁 盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设 备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒 体(transitorymedia),如调制的数据信号和载波。

2、本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机 程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件 和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计 算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、 CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号