发明内容
有鉴于此,本发明的目的在于提供一种元数据管理方法及装置,实现元数据管理的自动化,减少用户干预。
为达到上述目的,本发明提供的技术方案如下:
一种元数据管理方法,该方法包括以下步骤:
A、对于每一步ETL操作,首先获取输入元数据,并将输入元数据转换为ETL系统统一的ETL元数据;
B、针对每一个输出字段,根据ETL数据处理逻辑规则对ETL元数据进行调整;
C、根据输出数据源类型将调整后的ETL元数据转换为输出元数据,并根据输出元数据在输出数据源中创建输出数据结构。
所述步骤B具体包括:
当针对输出字段的ETL数据处理逻辑规则是字段映射时,无需对ETL元数据进行调整;
当针对输出字段的ETL数据处理逻辑规则是算术运算时,根据算术运算的最外层运算结果对ETL元数据进行调整;
当针对输出字段的ETL数据处理逻辑规则是函数运算时,根据函数输出的类型和格式对ETL元数据进行调整。
步骤A所述获取输入元数据的过程包括:
确定输入数据源类型,根据输入数据源类型获取输入元数据。
一种元数据管理装置,包括:输入元数据获取模块、元数据调整模块和输出元数据管理模块,其中,
输入元数据获取模块针对每一步ETL操作,获取输入元数据,将获取的输入元数据转换为ETL系统统一的ETL元数据,并将转换后的ETL元数据发送给元数据调整模块;
元数据调整模块针对每一个输出字段,根据ETL数据处理逻辑规则对ETL元数据进行调整,并将调整后的ETL元数据发送给输出元数据管理模块;所述调整具体为:
当针对输出字段的ETL数据处理逻辑规则是字段映射时,所述元数据调整模块无需对ETL元数据进行调整;
当针对输出字段的ETL数据处理逻辑规则是算术运算时,所述元数据调整模块根据算术运算的最外层运算结果对ETL元数据进行调整;
当针对输出字段的ETL数据处理逻辑规则是函数运算时,所述元数据调整模块根据函数输出的类型和格式对ETL元数据进行调整;
输出元数据管理模块根据输出数据源类型将调整后的ETL元数据转换为输出元数据,并根据输出元数据在输出数据源中创建输出数据结构。
由此可见,在本发明所提供的技术方案中,ETL系统可以自动根据ETL数据处理逻辑规则实现中间数据的存储,ETL中间处理过程对用户来说是透明的,用户无需关心每一步中间过程数据的存储类型和格式,从而减少了用户干预,实现了ETL元数据管理的自动化,提高了ETL系统的智能性和易用性。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,下面参照附图并举实施例,对本发明作进一步详细说明。
针对现有技术中所存在的问题,本发明旨在提供一种新的ETL元数据管理方法,使得在ETL处理过程中,用户只需要配置ETL数据处理逻辑规则,而无需关心每一步中间过程数据的存储类型和格式,实现ETL元数据管理的自动化,增加ETL系统的智能性和易用性。
图2示出了本发明中的ETL元数据管理方法流程图,包括以下步骤:
步骤201:对于每一步ETL操作(抽取、转换或加载),首先确定输入数据源类型,然后根据输入数据源类型调用相应方法,获取输入数据的描述信息即输入元数据。
步骤202:将获取的输入数据描述信息转换为ETL系统统一的数据描述信息即ETL元数据。
步骤203:分析ETL数据处理逻辑规则,对于每一个输出字段,根据该字段的处理过程对ETL元数据进行调整。
ETL元数据的调整根据字段处理过程的不同分为以下三种情况:
如果字段处理过程是字段映射(即直接将该字段的原始值输出),则输出字段的类型与格式与输入保持一致,此时无需对ETL元数据进行调整;
如果字段处理过程是算术运算(即将一个或多个字段进行加减乘除等),则输出字段的类型和格式视算术运算的最外层运算结果而定,此时需要根据最外层运算结果调整ETL元数据;
如果字段处理过程是函数运算,则输出字段的类型和格式与函数输出的类型和格式一致,此时需要根据函数输出的类型和格式调整ETL元数据。
步骤204:确定输出数据源类型,将调整后的ETL元数据转换为输出数据源对应的元数据即输出元数据。
步骤205:根据输出元数据,在输出数据源中创建输出数据结构。
下面通过一个具体的例子对本发明中的元数据管理方法进行说明。
假设ETL任务功能需求为:将SQL Server数据库A中表tbl_flux存放的流量信息flux按照app_id进行聚合(即将app_id相同的flux求和),然后存放到Oracle数据库B中,并将表tbl_flux中的app_id参照表tbl_application_map转换为app_name。
列名 | 含义 | 数据类型 | 强制 |
id | 主键,自增型 | Bigint | 是 |
flux | 流量信息 | Bigint | 否 |
app_id | 应用类型ID | Bigint | 否 |
表1a
id | flux | app_id |
1 | 12539 | 393296 |
2 | 45789 | 393296 |
3 | 47865 | 393296 |
4 | 234322 | 393237 |
5 | 12343 | 393237 |
6 | 12112 | 393237 |
7 | 12332 | 393237 |
8 | 12312 | 393241 |
9 | 34232 | 393241 |
10 | 32342 | 393241 |
表1b
表1a示出了tbl_flux表结构,包括id、flux和app_id三个字段;表1b示出了表tbl_flux中的具体数据。
列名 | 含义 | 数据类型 | 强制 |
app_id | 主键 | Bigint | 是 |
app_name | 应用名称 | Varchar | 否 |
app_desc | 应用描述 | Varchar | 否 |
表2a
app_id | app_name | app_desc |
393237 | ftp | 文件传输协议数据控制服务 |
393241 | smtp | 简单邮件传输协议 |
393296 | http | 用于万维网服务的超文本传输协议 |
表2b
表2a示出了tbl_application_map表结构,包括app_id、app_name和app_desc三个字段;表2b示出了表tbl_application_map中的具体数据。
为了完成上述ETL任务功能需求,用户需要配置的处理规则(即SQL语句)如下:
抽取规则:select*form tbl_flux;select*form tbl_application_map;
聚合规则:select TO_CHAR(sum(flux))as flux,app_id,fromtmp_tbl_flux group by app_id;
转换规则:select a.flux,b.app_name from tmp_agg_flux a,tmp_tbl_application_map b where a.app_id=b.app_id。
图3示出了上述需求下的ETL处理过程示意图,包括以下步骤:
步骤301:根据配置的抽取规则,将A.tbl_flux数据抽取到工作空间,在输出数据源Oracle数据库中创建临时表tmp_tbl_flux。
所述工作空间是ETL系统用于存放临时数据的存储空间,这里假设是目的数据库B。在此步骤中,数据的存储位置发生了变化,由用户表空间变化到临时表空间,同时数据源类型也发生了变化,由SQL Server变化到Oracle。
步骤301具体包括以下步骤:
步骤3011:判断输入数据源(数据库A)的类型。
步骤3012:调用SQL Server数据库相应方法,获取tbl_flux表各个字段的类型和格式,即获取输入元数据。
步骤3013:将获取的输入元数据转换为ETL系统统一的ETL元数据。
由于在抽取过程中只需将A.tbl_flux中的字段抽取出来放到临时空间,属于字段映射,因此无需对ETL元数据进行调整,直接执行步骤3014。
步骤3014:判断输出数据源(数据库B)的类型。
步骤3015:将ETL元数据转换为Oracle数据库对应的输出元数据。
步骤3016:根据输出元数据,在输出数据源Oracle数据库中创建临时表tmp_tbl_flux。
其中,临时表是用来存放ETL处理过程中中间数据的临时空间,这些中间数据可能是抽取操作的输出、加载操作的输入或者转换操作的输入/输出。临时表的命名遵循统一的命名规则,用户可以根据命名规则引用临时表。
表3示出了临时表tmp_tbl_flux的结构。其中,SQL Server中的bigint(长整)类型在Oracle中被转换为number(19,0)。
列名 | 含义 | 数据类型 | 强制 |
Id | 主键,自增型 | number(19,0) | 是 |
Flux | 流量信息 | number(19,0) | 否 |
app_id | 应用类型ID | number(19,0) | 否 |
表3
步骤302:将A.tbl_application_map数据抽取到工作空间,在输出数据源中创建临时表tmp_tbl_application_map。
步骤302的具体操作过程与步骤301一致,这里不再赘述。
表4示出了临时表tmp_tbl_application_map的结构。其中,SQL Server中的bigint类型在Oracle中被转换为number(19,0),SQL Server中的varchar在Oracle中被转换为varchar2。
列名 | 含义 | 数据类型 | 强制 |
app_id | 主键 | number(19,0) | 是 |
app_name | 应用名称 | varchar2 | 否 |
app_desc | 应用描述 | varchar2 | 否 |
表4
步骤303:根据配置的聚合规则,对临时表tmp_tbl_flux中的流量flux按照app_id进行聚合,创建输出临时表tmp_agg_flux。
表5a示出了输出临时表tmp_agg_flux的结构;表5b示出了输出临时表tmp_agg_flux中的具体数据。
列名 | 含义 | 数据类型 | 强制 |
Flux | 流量信息 | varchar2 | 否 |
app_id | 应用类型ID | number(19,0) | 否 |
表5a
flux | app_id |
271109 | 393237 |
78886 | 393241 |
106193 | 393296 |
表5b
在此步骤中,app_id属于字段映射,类型不变;输出字段flux使用了sum()、TO_CHAR()函数,最终转换后的类型为varchar2;id字段被丢弃,没有输出。
需要说明的是,在步骤303所述的聚合操作中,由于输入(表tmp_tbl_flux)和输出(表tmp_agg_flux)的数据源类型相同,都是Oracle,因此步骤303中就省去了图2中所示的不同数据源之间的元数据转换过程,而只是说明了根据配置的处理规则对输出字段的元数据进行调整的过程。
步骤304:参照表tmp_tbl_application_map将表tmp_agg_flux中的app_id转换为app_name。
在此步骤中,输出字段flux和app_name都属于字段映射,输出字段flux的类型和格式同tmp_agg_flux中flux;输出字段app_name的类型和格式同tmp_tbl_application_map中app_name。
根据输出字段app_name和flux的描述信息,在数据库B中创建表etl_tbl_flux,并将处理结果存入表etl_tbl_flux中,完成数据在数据库B中的加载。
表6a示出了表etl_tbl_flux的结构,表6b示出了表etl_tbl_flux中的具体数据。
列名 | 含义 | 数据类型 | 强制 |
flux | 流量信息 | varchar2 | 否 |
app_name | 应用名称 | varchar2 | 否 |
表6a
flux | app_name |
271109 | ftp |
78886 | smtp |
106193 | http |
表6b
与步骤303类似,在步骤304所述的转换操作中,由于输入和输出的数据源类型相同,都是Oracle,因此步骤304中就省去了不同数据源之间的元数据转换过程,而只是说明了根据配置的处理规则对输出字段的元数据进行调整的过程。
通过以上描述可见,在本发明所提供的技术方案中,ETL系统可以自动根据ETL数据处理逻辑规则实现中间数据的存储,ETL中间处理过程对用户来说是透明的,用户无需关心每一步中间过程数据的存储类型和格式,从而减少了用户干预,实现了ETL元数据管理的自动化,提高了ETL系统的智能性和易用性。
相应地,本发明还提供了一种元数据管理装置,其结构参见图4所示,包括:输入元数据获取模块、元数据调整模块和输出元数据管理模块,其中,
输入元数据获取模块针对每一步ETL操作,获取输入元数据,将获取的输入元数据转换为ETL系统统一的ETL元数据,并将转换后的ETL元数据发送给元数据调整模块;
元数据调整模块针对每一个输出字段,根据ETL数据处理逻辑规则对ETL元数据进行调整,并将调整后的ETL元数据发送给输出元数据管理模块;
输出元数据管理模块根据输出数据源类型将调整后的ETL元数据转换为输出元数据,并根据输出元数据在输出数据源中创建输出数据结构。
当针对输出字段的ETL数据处理逻辑规则是字段映射时,所述元数据调整模块无需对ETL元数据进行调整;
当针对输出字段的ETL数据处理逻辑规则是算术运算时,所述元数据调整模块根据算术运算的最外层运算结果对ETL元数据进行调整;
当针对输出字段的ETL数据处理逻辑规则是函数运算时,所述元数据调整模块根据函数输出的类型和格式对ETL元数据进行调整。
需要说明的是,本发明所提供的元数据管理方案不仅适用于ETL系统,也适用于其它系统。
以上所述对本发明的目的、技术方案和有益效果进行了进一步的详细说明,所应理解的是,以上所述并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。