具体实施方式
针对现有技术存在的上述问题,本申请的实施例提供了一种ETL数据处理过程的监控方法及其系统,通过对ETL整个处理流程中的独立的ETL数据处理环节(如数据抽取、转换或加载)进行监控,以及在监控过程中根据每个处理环节的处理任务自动生成该处理环节的监控指标,从而一方面可以及时发现问题数据以及进一步分析问题数据产生的原因,因而提高了ETL的监控效率以及提高了监控结果的准确性,另一方面可以不依赖于人工进行监控指配的配置,从而在进一步提高效率的同时还简化了ETL监控的实现过程,以及因减少了人为因素的影响从而进一步提高了ETL监控结果以及对ETL处理过程的质量判断的准确性。
ETL数据处理过程通常由ETL系统进行,在ETL系统开发过程中或者在建立之后,需要进行系统测试。ETL系统测试通常采用黑盒测试,即不考虑ETL数据处理的具体实现,仅通过对输入数据和输出数据的分析来确定ETL数据处理过程是否正常或处理质量是否达到要求,即向ETL系统输入数据,获取ETL系统的输出数据,并将实际输出数据与预期输出数据进行比较以发现问题数据,并找出问题数据产生的原因,从而逐步完善ETL系统,使其数据处理质量达到要求。
本申请的实施例可以应用在ETL系统的开发测试阶段,可以对ETL数据处理的每个处理环节(如数据抽取、转换或加载)单独进行监控,输出相应处理环节的监控报告,从而为ETL系统开发人员提供有价值的参考数据,为进一步查明问题数据产生的原因以及进一步维护或改善ETL系统提供比较可靠的依据。
下面结合附图对本申请的实施例进行详细描述。
如图1所示,本申请的实施例所提供的ETL数据处理过程的监控系统10主要包括:监控指标配置模块101、监控处理模块102。图中的ETL处理单元20是执行ETL数据处理的功能模块,通常ETL数据处理过程由相应的ETL处理单元执行,如数据抽取、转换或加载分别由相应的ETL处理单元执行。图1中的ETL处理单元20可以是执行数据抽取、转换或加载等数据处理过程的功能单元。
监控系统10中的各模块的主要功能包括:
监控指标配置模块101,根据输入到ETL处理单元20的ETL任务信息,确定ETL处理单元20的输出数据的各字段的类型,并根据确定出的字段类型,生成ETL处理单元20的监控指标;
监控处理模块102,根据监控指标配置模块101所生成的监控指标,对ETL处理单元20的输出数据进行统计或运算,得到监控指标的结果值,该监控指标的结果值即为ETL处理单元20的监控结果。监控处理模块102还可以将监控结果以报表形式输出。
ETL处理单元20在进行数据处理之前,通常要接收ETL数据处理任务,然后根据接收到的数据处理任务获取指定的源数据作为输入数据进行数据处理,并将数据处理之后得到的输出数据存储到ETL数据处理任务所指定的位置或存为指定的文件或输出为指定的输出数据表。其中,数据处理任务中可以包括ETL处理单元20的输入数据的描述信息(如输入数据表的名称、标识或存储位置等),ETL处理单元20的输出数据的描述信息(如输出数据表的名称、标识或存储位置等)。各数据表(包括输入数据表和输出数据表)的字段描述信息可以存储为元数据表,元数据表中包括相应数据表(如输入数据表或输出数据表)中各字段的名称、数据类型等字段描述信息。因此,监控指标配置模块101可以通过解析ETL处理单元20的数据处理任务信息获得输出数据表的信息,然后通过查询相应的元数据表获得输出数据表中各字段的描述信息。
监控指标配置模块101所生成的监控指标是指监控对象,如按照指定方式对ETL处理单元20的输出数据或对该输出数据中的指定字段进行统计或运算,例如,将一个ETL处理过程中的输出数据的记录数作为监控对象,将输出数据中的数值型字段的数值累加求和作为监控对象,将输出数据中的数值型字段的数值平均值作为监控对象等。通常,对于有总量统计意义的数值型字段(如销售数量),可以将该字段的值累加求和作为监控指标;对于有平均值统计意义的数值型字段(如温度值),可以将该字段的值求平均值作为监控指标。监控指标可以包括一个或多个,通常包括多个。本领域技术人员应该理解,监控指标的定义不仅限于以上所举实例。
监控指标的生成通常可依据预先设置的监控指标生成策略来实现,从而提供统一的监控指标生成标准。例如,监测指标的生成策略可以包括:对于有总量统计意义的数值型字段,将该字段的值累加求和作为监控指标。监控指标的生成策略可以预先配置到监控指标配置模块101中,也可以配置到存储有监控指标策略的存储模块103中。
监控处理模块102在输出的监控结果报表中还可以包括对ETL处理单元20的数据处理质量的评价信息。如果ETL处理单元20的监控指标的结果值与期望的结果值相同或在允许的误差范围内,则可以认为ETL处理单元20的数据处理质量满足要求;否则不满足要求,需要进一步完善ETL处理单元20。
数据处理质量的评价通常可依据预先设置的质量评价策略来实现。例如,质量评价策略可以包括:如果ETL处理单元20的监控指标的结果值与期望的结果值相同或在允许的误差范围内,则可以认为ETL处理单元20的数据处理质量满足要求;否则不满足要求。质量评价策略可以预先配置在监控处理模块102中,也可以配置到存储有质量评价策略的存储模块104中。
采用图1所示的监控系统对ETL数据处理过程进行监控的流程,可如图2所示。该流程可以发生在ETL处理单元20完成数据处理之后,也可以与ETL处理单元20进行数据处理的过程并行进行。该流程可以通过输入监控指令触发执行,也可以将触发ETL处理单元20执行数据处理的指令也作为触发该流程的指令。该流程主要包括:
步骤201、获取ETL数据处理过程的数据处理任务信息。
该步骤中,监控指标配置模块101可以根据对ETL处理单元20进行监控的指令,获取输入给ETL处理单元20的数据处理任务信息。
步骤202、解析获取到的数据处理任务信息,得到输入数据和输出数据中的字段描述信息,如字段名称和字段的数据类型。
对于基于oracle(oracle是一种数据库系统)的数据处理过程,其数据处理任务通常存在于procedure(过程)代码中,监控指标配置模块101获得该procedure代码后,可以利用编译原理的词法分析和语法分析进行代码解析。目前有许多词法分析和语法分析的软件工具可支持对procedure代码的解析,比如基于C语言的lex和yacc,基于java的javacc和antlr等。本流程中选用javacc,其过程可以包括:
编写针对plsql(PL/SQL是ORACLE对标准数据库语言的扩展)的Grammar(语法)文件PLSql.jjt;
利用JJTree(jjTree可以看成是JavaCC的预处理程序)编译PLSql.jjt文件生成PLSql.jj;
利用javacc编译PLSql.jj文件生成解析的Java类生成可运行的二进制文件;
利用javac编译所有生成的java类生成class(类)文件,该class文件将用于procedure代码的解析。
运行解析程序,利用生成的class文件解析指定的procedure代码,解析出数据处理任务所指定的input表(即输入数据表)和output表(即输出数据表)的描述信息(如表标识或表名称),并通过查询oracle的meta信息(即元数据信息)获取input表和output表的字段描述信息(如字段名称和字段的数据类型)。
步骤203、根据获取到的字段描述信息生成监控指标。
该步骤中,监控指标配置模块101可以根据解析出的输出数据表以及输出数据表的字段的数据类型确定监控指标。如对于output表所生成的监控指标可以包括output表的数据记录数量,对于具有总量统计意义的数值型字段求和,对于具有平均值统计意义的数值型字段求平均值。其中,对于哪些类型字段属于具有总量统计意义的字段,哪些类型字段属于具有平均值统计意义的字段,可以预先进行定义。例如,对于名称为“销售量”或“销售额”等的字段,可以统计其总量,对于名称为“温度”或“气温”等的字段,可以统计其平均值。
步骤204、根据生成的监控指标,对ETL数据处理过程的输出数据进行相应统计或/和运算,得到控制指标的结果值。
该步骤中,监控处理模块102接收到监控指标配置模块101生成的监控指标后,读取ETL处理单元20的输出数据,并根据监控指标所指定的统计或运算方式,对输出数据表或表中的相应字段进行统计或/和运算,从而得到监控指标的结果值。根据生成的监控指标,监控处理模块102得到的监控结果值可以包括:ETL处理单元20的输出数据的数据记录总数量,指定的数值型字段的数值累加和,以及指定的数值型字段的数值平均值等。
步骤205、输出监控结果,并可进一步给出ETL数据处理的质量评价。
该步骤中,监控处理模块102可以将监控指标的结果值以报表形式输出作为监控结果,还可以根据预先设置的质量评价策略,将监控指标的结果值与期望的结果值进行比较,从而对ETL处理单元20的数据处理质量进行评价,并将评价结果显示在输出的报表中。ETL系统对数据的处理需要满足期望的结果值,若监控指标的结果值与期望的结果值不符,则说明ETL系统的业务逻辑有问题,需要做进一步的修正。
上述流程的步骤202中,监控指标配置模块101解析出的input表和output表的描述信息可以表1的形式存储,output表的字段描述信息可以表2的形式存储;步骤203中,监控指标配置模块101所生成的监控指标可以被配置到如表3所示的监控指标配置表中,以使监控处理模块102根据该监控指标配置表进行监控,并可将监控结果记录在该表结构中,从而以该表为依据生成监控结果的报表。
表1、输入/输出数据表的信息配置表结构
序号 |
字段名称 |
中文名称 |
数据类型 |
说明 |
1 |
ETL_id |
ETL唯一标识 |
Int |
|
2 |
ETL_name |
ETL应用名称 |
Varchar2(80) |
|
3 |
Type |
输入输出类型 |
Int |
1-输入;2-输出 |
4 |
Tab_id |
输入/输出表唯一标识 |
int |
|
表2、输出数据表的字段信息表结构
序号 |
字段名称 |
中文名称 |
数据类型 |
说明 |
|
Tab_id |
输出表唯一标识 |
Int |
|
|
Tab_name |
输出表名 |
Varchar2(40) |
|
|
Field_id |
输出表字段唯一标识 |
int |
|
|
Field_name |
输出字段名称 |
Varchar2(40) |
|
|
Field_type |
输出字段类型 |
Int |
1-维度;2-指标 |
其中,如果Field_type为1,则表示不可以进行集合运算的字段;如果Field_type为2,则表示可以进行集合运算的字段。
表3、监控指标配置表结构
序号 |
字段名称 |
中文名称 |
数据类型 |
说明 |
|
Gmtdate |
监控日期 |
d ate |
|
|
tab_id |
输出表唯一标识 |
int |
|
|
Index_id |
指标唯一标识 |
int |
|
|
Index_type |
指标类型 |
Int |
表记录数字段指标 |
|
Index_value |
当天值 |
number |
|
|
Index_avg_value |
移动平均值 |
number |
|
|
Index_Variance |
差值 |
number |
|
考虑到业务变化,对于期望的监控指标结果值可以根据业务的变化进行修订,从而可以根据监控结果对ETL数据处理过程进行准确的评价。为了达到这一目的,本申请的实施例中,在确定出监控指标的期望值后,可以对该监控指标的期望值进行更新,以使更新后的监控指标期望值跟随业务的变化而变化。由于每个指标是取一个周期性的移动平均值,故随着系统的运行,可以对监控指标进行移动修复以适应业务的增长与变化。例如,对于统计用户数的监控指标,可以根据用户数的增长情况进行修正,如,2009年1月1日时注册用户数为2000万,假如每天增长10万,到2009年1月5日时的用户数应该是:2000+2010+2020+2030+2040+2050)/6=2025,因此,将用于统计用户数的监控指标的期望值调整为2050。对监控指标期望值的更新或修复可由监控指标配置模块101执行。
以下以一个具体实例对本申请实施例的实现过程进行详细描述。该实例描述了使用商品销售数据对ETL数据转换过程进行监控以及评价的实现过程。
该实例中,ETL数据转换的任务是将各个地区上传的商品销售数据表进行格式转换以及合并处理,转换并输出为统一格式的数据表,以便下一步进行数据挖掘处理。该ETL数据转换的操作由相应的ETL处理单元实现。
输入给ETL处理单元的任务信息中包括输入数据表的表名称以及存储位置等信息,如:
sale_region 1,url_1
……
sale_region n,url_n
其中,sale_region n表示作为输入数据的数据表名称,url_n表示相应输入数据表的URL(Uniform Resource Locator,统一资源定位符),即输入数据表的存储位置。
输入给ETL处理单元的任务信息中还包括处理后得到的输出数据表的表名称以及存储位置等信息,如:
tab_id,sale_summary,url_summary
其中,tab_id表示输出数据表的唯一标识,sale_summary表示输出数据表名称,url_summary表示相应输出数据表的URL。
对应于输出数据表sale_summary的元数据信息描述了输出数据表sale_summary的表结构,可包括该表中所包含的字段的属性信息,如字段名称、字段的数据类型等信息。本实例中,sale_summary数据表的字段名称及其属性包括:
regionID(即地区标识),整型(如int);
time(即销售时间),时间型(如date);
……
amount(即销售数量),数值型(如int);
sum(即销售额),数值型。
监控开始后,对ETL数据处理过程进行监控的系统(以下称监控系统)获取输入给被监控的ETL处理单元的任务信息,从中可以获得输出数据表的描述信息,并可存储为表4所描述的形式;根据该输出数据表的名称或标识可以从存储有数据表元数据的位置获取到描述该输出数据表的元数据,然后根据该元数据可以获知该输出数据表中包含有哪些字段以及各字段的数据类型,并可存储为表5所描述的形式;然后,监控系统就可以根据输出数据表中的字段及其数据类型来设置监控指标,并可将监控指标配置信息存储为表6所描述的形式。本实例中,配置的监控指标包括:对名为amount的字段,累计各数据记录中该字段的字段值;对名为sum的字段,累计各数据记录中该字段的字段值;此外,还可以统计数据记录的数目。
监控系统配置完成监控指标后,根据ETL数据转换的任务信息获取输出数据表的存储位置,从该位置获取输出数据表;然后,根据配置的监控指标,从该输出数据表中各数据记录中的字段值中读取指定字段值并进行指定的运算,从而得到监控指标的结果值,例如,输出数据表中的记录包括:
10 2009-1-1 ...... 5 200
10 2009-1-2 ...... 6 240
……
20 2009-1-1 ...... 10 400
其中,字段依次为:地区标识,销售日期,......,销售数量,销售额。根据配置的监控指配,监控系统将销售数量进行累加(5+6+......+10),将销售额进行累加(200+240+......+400),并统计数据记录的总数量,并可将监控指标的结果值存储到表6中。
表4、输出数据表的信息配置表结构
序号 |
字段名称 |
数据类型 |
说明 |
1 |
ETL_id |
Int |
ETL单元标识 |
2 |
ETL_name |
Varchar2(80) |
ETL单元描述 |
3 |
Type |
Int |
表示输出数据表 |
4 |
Tab_id |
int |
输出数据表标识 |
表5、输出数据表的字段信息表结构
序号 |
字段名称 |
数据类型 |
说明 |
|
Tab_id |
Int |
输出表唯一标识 |
|
Tab_name |
Varchar2(40) |
输出表名 |
|
Field_id |
int |
输出表字段唯一标识 |
|
Field_name |
Varchar2(40) |
输出字段名称 |
|
Field_type |
Int |
1-维度;2-指标 |
其中,如果Field_type为1,则表示不可以进行集合运算的字段;如果Field_type为2,则表示可以进行集合运算的字段,即用于指标监控的字段。
表6、监控指标配置表结构
序号 |
字段名称 |
数据类型 |
说明 |
|
Gmtdate |
date |
监控日期 |
|
tab_id |
int |
输出表唯一标识 |
|
Index_id |
int |
指标唯一标识 |
|
Index_value |
number |
监控到的销售数量 |
|
Index_avg_value |
number |
移动平均值 |
|
Index_Variance |
number |
差值 |
根据表6,Index_id表示监控指标的ID,其中,可用1代表对销售数量进行累加,对应的监控结果值记录在相应的Index_value字段中;可用2代表对销售额进行累加,对应的监控结果值记录在相应的Index_value字段中;可用3代表对数据记录数进行统计,对应的监控结果值记录在相应的Index_value字段中。Index_avg_value字段的值表示移动平均值,其值可设为0,也可根据业务增长或变化情况设置。Index_Variance字段的值是Index_value字段值(监控结果值)与期望的监控结果值的差值,在Index_avg_value不为零的情况下,还要将Index_value字段值与Index_avg_value字段值求和后再与期望的监控结果值求差值。本实例中,实际监控结果值与期望的监控结果值差值为0,则表示被监控的ETL处理单元的数据处理过程正常。
综上所述,本申请的上述实施例通过监控系统自动根据procedure解析出要ETL数据处理过程的输出数据表作为被监控的数据表,然后自动生成监控指标对被监控的数据表进行监控,还能自动根据业务的变化修正监控指标,实现监控与ETL应用一起上线,及时监控及时告警,实现监控自动化。
本申请的实施例所提供的监控系统可通过计算机程序实现。本领域技术人员应该能够理解,上述的模块划分方式仅是众多模块划分方式中的一种,如果划分为其他模块或不划分模块,只要监控系统具有上述功能,都应该在本申请的保护范围之内。
本申请是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。