电信业务数据动态转换的方法及其系统转让专利

申请号 : CN200910152289.8

文献号 : CN101958987A

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 黄平向勇张青邹学锋何震苇刘春

申请人 : 中国电信股份有限公司

摘要 :

本发明公开了一种电信业务数据动态转换方法及其系统,方法包括获取预置的电信业务数据转换规则,根据数据转换规则和预置的业务实现类的模板,动态生成业务实现类的JAVA源代码,并编译生成JAVA程序代码;动态加载并执行业务实现类,将源数据文件生成目标数据文件。本发明针对电信业务数据特性建立了丰富的函数集,同时提供函数自定义接口,便于用户自定义和扩展函数集;不同于当前脚本解释型ETL工具,本发明采用动态编译、动态加载,以及JAVA反射技术,提高了数据转换效率,具有很强的跨平台特性和应用灵活性。

权利要求 :

1.一种电信业务数据动态转换的方法,其特征在于,所述方法包括:根据业务标识获取预置的电信业务数据转换规则;

根据所述数据转换规则和预置的业务实现类的模板,动态生成所述业务实现类的JAVA源代码,并编译生成JAVA程序代码;

动态加载并执行所述业务实现类,将源数据文件生成目标数据文件。

2.根据权利要求1所述的方法,其特征在于,所述动态加载并执行所述业务实现类的步骤包括:采用动态加载JAVA类技术和反射调用JAVA函数技术动态加载并执行所述业务实现类。

3.根据权利要求1所述的方法,其特征在于,所述方法还包括步骤:通过图形化界面接收用户对所述数据转换规则的配置。

4.根据权利要求1所述的方法,其特征在于,所述方法还包括步骤:通过图形化界面接收用户对函数集的定义和/或扩展。

5.根据权利要求4所述的方法,其特征在于,所述函数集包括从电话号码中拆分接入号码、区号、运营商信息的函数。

6.一种电信业务数据动态转换的系统,其特征在于,所述系统(300,900)包括:数据转换规则存储子系统(302,902),用于存储电信业务数据转换规则和函数集;

数据转换规则调度子系统(306,906),用于从所述数据转换规则存储子系统(302,

902)中获取所述电信业务数据转换规则;根据所述转换规则和预置的业务实现类的模板,动态生成业务实现类的JAVA源代码,并编译生成JAVA程序代码;以及动态加载并执行所述业务实现类,根据源数据文件生成目标数据文件。

7.根据权利要求6所述的系统,其特征在于,所述系统还包括数据转换规则生成环境子系统(304,904),用于通过图形化界面接收用户对所述电信业务数据转换规则的配置,将修改或增加的所述数据转换规则保存到所述数据转换规则存储子系统(302,902);以及提供用户自定义函数编程接口,供用户扩展所述函数集。

8.根据权利要求7所述的系统,其特征在于,所述数据转换规则生成环境子系统(904)包括:数据转换规则配置模块(9042),用于对预置的所述数据转换规则进行维护,引导用户配置新的数据转换规则,并负责导入/导出选定的所述数据转换规则;

函数集配置模块(9044),用于对预置的所述函数集进行维护,负责引导用户配置新的函数,以及导入/导出所述函数集或单个函数;

系统维护模块(9046),用于存储所述数据转换规则生成环境子系统(904)的系统参数和生成的系统日志。

9.根据权利要求8所述的系统,其特征在于,所述数据转换规则配置模块(9042)包括:数据转换规则维护子模块(90422),用于负责转换规则列表的树状展现和所述转换规则的信息展现;

数据转换规则配置向导子模块(90424),用于负责引导用户逐步完成所述数据转换规则的配置;

数据转换规则导入/导出子模块(90426),用于负责导入和导出选定的所述转换规则,供用户备份和/或部署。

10.根据权利要求8所述的系统,其特征在于,所述函数集配置模块(9044)包括:函数集维护子模块(90442),用于对预置的所述函数集进行维护;

自定义函数向导子模块(90444),用于负责引导用户完成所述函数的定义;

函数导入/导出子模块(90446),用于导入/导出所述函数集或单个函数,供用户备份和/或部署。

11.根据权利要求8所述的系统,其特征在于,所述系统维护模块(9046)包括:系统参数子模块(90462),用于配置和维护所述数据转换规则生成环境子系统(904)的系统参数;

系统日志子模块(90464),用于生成和存储所述数据转换规则生成环境子系统(904)的系统日志。

12.根据权利要求6所述的系统,其特征在于,所述数据转换规则调度子系统(906)包括:数据转换规则引擎(9062),用于从所述数据转换规则存储子系统(302,902)中获取电信业务数据转换规则;动态生成所述业务实现类的JAVA源代码,并编译生成所述JAVA程序代码;以及动态加载并执行所述业务实现类,将源数据文件生成目标数据文件;

系统维护模块(9064),用于存储所述数据转换规则调度子系统(906)的系统参数和生成的系统日志。

13.根据权利要求12所述的系统,其特征在于,所述数据转换规则引擎(9062)包括:源代码生成器(90622),用于根据所述数据转换规则和所述预置的业务实现类的模板,动态生成业务实现类的JAVA源代码文件;

源代码编译器(90624),用于编译所述业务实现类的JAVA源代码文件,生成所述JAVA程序代码;以及数据转换规则处理器(90626),用于读写数据文件,负责电信业务数据的转换;以及集中和处理系统错误。

14.根据权利要求12所述的系统,其特征在于,所述系统维护模块(9064)包括:系统参数子模块(90642),用于配置和维护所述数据转换规则调度子系统(906)的系统参数;

系统日志子模块(90644),用于生成和存储所述数据转换规则调度子系统(906)的系统日志。

15.根据权利要求6所述的系统,其特征在于,所述数据转换规则存储子系统(302,

902)存储的所述函数集包括用于从电话号码中拆分接入号码、区号、运营商信息的函数。

说明书 :

电信业务数据动态转换的方法及其系统

技术领域

[0001] 本发明涉及数据仓库中的抽取、转换和加载(ETL,Extract、Transform、Load)技术,尤其涉及一种电信业务数据动态转换的方法及其系统。

背景技术

[0002] 随着电信市场的逐步开放,新的运营商不断产生,电信市场的竞争日趋激烈。为了能够在竞争中生存和持续发展,各电信运营商都对企业的经营和管理提出了更高的要求。ETL技术对于电信运营商管理电信运营系统、分析业务数据、把握业务发展方向,以及提升服务水平至关重要。
[0003] 目前,市场上主流的商业化ETL工具主要有数据整合平台(DI,DataIntegrator)、DataStage、Informatica等。这些商业化的ETL工具在功能上都各有千秋,能满足一般数据转换处理的需求。但是,电信业务极其繁多,而且业务更新频繁,如电信运营商不断推出的各类套餐业务。这就要求ETL工具具有良好的灵活性和跨平台性。由于商业化ETL工具缺乏对电信业务数据深入分析和理解,只是提供通用的处理模块供用户调用;而且所开放的接口比较简单,一旦遇到性能瓶颈问题而需要做优化调整时往往比较困难,或者代价较高。因此,这类工具比较适合用于数据量不大,业务较为单一且变化不大的数据转换场合。
[0004] 电信运营系统生成的数据主要是电话通话清单、电话客户资料等,通常此类数据数量巨大,动辄有上亿条记录,尤其是清单数据,如固定电话的市话详单,其数据量更加庞大。而且电信业务数据具有特定的业务含义,采用通用的商业化ETL工具对这些电信业务数据进行处理时,由于没有充分利用电信业务数据自身的特点,其转换效率比较低。此外,目前市场上提供的一些脚本解释型的ETL工具,在解释脚本时需要花费较多的时间,所以其数据转换效率也比较低。无疑,电信业务的高速发展、数据量的急剧增加对数据转换工具造成很大的性能压力。因此,对于如此庞大的数据量,如何有效提高系统的处理效率成为本领域亟待解决的技术问题。此外,如果直接将上述ETL工具应用到电信系统时,存在软件开发复杂、灵活性较差等不足之处,系统跨平台性能差。
[0005] 基于前述商业化的ETL工具开发的支撑各项业务运营的计算机管理系统难以满足企业管理的要求,电信企业迫切需要寻找一种新的数据转换手段,使其能够低成本、高效率地实现电信业务数据动态转换,从而使管理人员能够及时准确地了解市场资源使用情况和业务发展状况,以便及时发现并解决问题。

发明内容

[0006] 本发明所要解决的技术问题是提供一种电信业务数据动态转换的方法及其系统,其针对电信业务自身特点定制函数集,配置电信业务数据转化规则,并结合JAVA动态编译以及反射技术,克服了通用ETL工具灵活性差、转换效率低等缺点。本发明提供如下技术方案:
[0007] 本发明的一个方面提供了电信业务数据动态转换的方法,该方法包括:根据业务标识获取预置的电信业务数据转换规则;根据数据转换规则和预置的业务实现类的模板,动态生成业务实现类的JAVA源代码,并编译生成JAVA程序代码;动态加载并执行业务实现类,将源数据文件生成目标数据文件。
[0008] 本发明提供的电信业务数据动态转换方法的一个实施例中,动态加载并执行业务实现类的步骤包括:采用动态加载JAVA类技术和反射调用JAVA函数技术动态加载并执行业务实现类。
[0009] 本发明提供的电信业务数据动态转换方法的一个实施例中,该方法还包括步骤:通过图形化界面接收用户对数据转换规则的配置。
[0010] 本发明提供的电信业务数据动态转换方法的一个实施例中,该方法还包括步骤:通过图形化界面接收用户对函数集的定义和/或扩展。
[0011] 本发明提供的电信业务数据动态转换方法的一个实施例中,函数集包括从电话号码中拆分接入号码、区号、运营商信息的函数。
[0012] 本发明另一个方面提供了一种电信业务数据动态转换系统,该系统包括:数据转换规则存储子系统,用于存储电信业务数据转换规则和函数集;数据转换规则调度子系统,用于从数据转换规则存储子系统中获取电信业务数据转换规则;根据转换规则和预置的业务实现类的模板,动态生成业务实现类的JAVA源代码,并编译生成JAVA程序代码;以及动态加载并执行业务实现类,将源数据文件生成目标数据文件。
[0013] 本发明提供的电信业务数据动态转换系统的一个实施例中,该系统还包括数据转换规则生成环境子系统,用于通过图形化界面接收用户对电信业务数据转换规则的配置,将修改或增加的数据转换规则保存到数据转换规则存储子系统;以及提供用户自定义函数编程接口,供用户扩展函数集。
[0014] 本发明提供的电信业务数据动态转换系统的一个实施例中,数据转换规则生成环境子系统包括:数据转换规则配置模块,用于对预置的数据转换规则进行维护,引导用户配置新的数据转换规则,并负责导入/导出选定的数据转换规则;函数集配置模块,用于对预置的函数集进行维护,负责引导用户配置新的函数,以及导入/导出函数集或单个函数;系统维护模块,用于存储数据转换规则生成环境子系统的系统参数和生成的系统日志。
[0015] 本发明提供的电信业务数据动态转换系统的一个实施例中,数据转换规则配置模块包括:数据转换规则维护子模块,用于负责转换规则列表的树状展现和转换规则的信息展现;数据转换规则配置向导子模块,用于负责引导用户逐步完成数据转换规则的配置;数据转换规则导入/导出子模块,用于负责导入和导出选定的转换规则,供用户备份和/或部署。
[0016] 本发明提供的电信业务数据动态转换系统的一个实施例中,函数集配置模块包括:函数集维护子模块,用于对预置的函数集进行维护;自定义函数向导子模块,用于负责引导用户完成函数的定义;函数导入/导出子模块,用于导入/导出函数集或单个函数,供用户备份和/或部署。
[0017] 本发明提供的电信业务数据动态转换系统的一个实施例中,系统维护模块包括:系统参数子模块,用于配置和维护数据转换规则生成环境子系统的系统参数;系统日志子模块,用于生成和存储数据转换规则生成环境子系统的系统日志。
[0018] 本发明提供的电信业务数据动态转换系统的一个实施例中,数据转换规则调度子系统包括:数据转换规则引擎,用于从数据转换规则存储子系统中获取电信业务数据转换规则;动态生成业务实现类的JAVA源代码,并编译生成JAVA程序代码;以及动态加载并执行业务实现类,将源数据文件生成目标数据文件;系统维护模块,用于存储数据转换规则调度子系统的系统参数和生成的系统日志。
[0019] 本发明提供的电信业务数据动态转换系统的一个实施例中,数据转换规则引擎包括:源代码生成器,用于根据数据转换规则和预置的业务实现类的模板,动态生成业务实现类的JAVA源代码文件;源代码编译器,用于编译业务实现类的JAVA源代码文件,生成JAVA程序代码;以及数据转换规则处理器,用于读写数据文件,负责电信业务数据的转换;以及集中和处理系统错误。
[0020] 本发明提供的电信业务数据动态转换系统的一个实施例中,系统维护模块包括:系统参数子模块,用于配置和维护数据转换规则调度子系统的系统参数;系统日志子模块,用于生成和存储数据转换规则调度子系统的系统日志。
[0021] 本发明提供的电信业务数据动态转换系统的一个实施例中,数据转换规则存储子系统存储的函数集包括用于从电话号码中拆分出接入号码、区号、运营商信息的函数。
[0022] 电信运营系统生成的数据量都很大,尤其是详单数据,其数据量更加庞大,这无疑对数据转换工具造成了一定的性能压力。同时,电信业务极其繁多,而且变化很快,如电信推出的各类套餐业务。这就要求ETL工具具有很好的灵活性。另外,目前市场上的ETL工具没有针对电信业务数据特点进行优化处理,不能在灵活性和效率之间取得平衡;对于庞大的电信业务数据量,如何有效提高系统的处理效率,也是需要考虑的问题。本发明针对电信业务数据特性建立了丰富的函数集,同时提供函数自定义接口,便于用户扩展函数集;不同于当前脚本解释型ETL工具,本发明采用动态生成源代码,动态编译,以及动态加载并执行代码的方式,有效地提高了数据转换效率,具有很强的实用性。本发明创新地提出采用函数集,采用JAVA为设计语言,良好的跨平台特性有利于各子系统的兼容与集成。使用JAVA反射技术,可以灵活动态地执行数据规则JAVA代码来生成电信业务数据文件;从而避免在电信业务数据转换需求发生变更时引起修改ETL工具程序代码的繁杂工作量。动态实现电信业务数据转换,为电信系统提供准确、统一的数据文件。

附图说明

[0023] 图1示出根据本发明的电信业务数据动态转换的方法的一个实施例的流程图;
[0024] 图2示出根据本发明的电信业务数据动态转换的方法的一个实施例的流程图;
[0025] 图3示出根据本发明的电信业务数据动态转换的系统的一个实施例的结构示意图;
[0026] 图4示出本发明由数据转换规则生成环境子系统的一个实施例提供的图形化界面;
[0027] 图5示出了数据转换规则调度子系统的一个实施例将目标数据文件中的记录装载到数据库系统中的进度监控界面;
[0028] 图6示出根据本发明的电信业务数据动态转换的系统的一个实施例的结构示意图;
[0029] 图7示出根据本发明的电信业务数据动态转换的系统的一个实施例的结构示意图;
[0030] 图8示出根据本发明的电信业务数据动态转换的方法的一个具体应用例的流程图;
[0031] 图9示出根据本发明的电信业务数据动态转换的系统的一个具体应用例的流程图。

具体实施方式

[0032] 下面参照附图对本发明进行更全面的描述,来说明本发明示例性的各种实施例。
[0033] 图1示出根据本发明的电信业务数据动态转换方法的一个实施例的流程图。
[0034] 如图1所示,步骤102,根据业务标识获取预置的电信业务数据转换规则。本发明提供的电信业务数据动态转换方法的一个实施例中,根据业务标识(通常为数字化的业务代码)从存储的电信业务数据转换规则信息中直接获取电信业务数据转换规则。本发明提供的数据动态转换方法的一个实施例中,在系统数据库中存储有用户预先定制好的电信业务数据转换规则信息和函数集等信息。稍后对电信业务数据转换规则信息和函数集进行简要介绍。
[0035] 步骤104,根据数据转换规则和预置的业务实现类的模板,动态生成业务实现类的JAVA源代码。例如,在步骤104中根据业务标识获取已配置好的业务规则信息,随后根据业务实现类模版文件,动态实例化生成业务实现类JAVA源代码文件。稍后对JAVA源代码存储格式进行简要介绍。
[0036] 步骤106,编译业务实现类的JAVA源代码生成JAVA程序代码。稍后对动态编译业务实现类的JAVA源代码生成JAVA虚拟机能执行的程序代码技术进行简要介绍。
[0037] 步骤108,动态加载并执行业务实现类,将源数据文件生成目标数据文件。例如,采用动态加载JAVA类和反射调用JAVA函数的技术,加载并执行业务实现类模板文件,读取源数据文件,生成目标数据文件。源数据文件包括系统参数或业务标识,如电信业务的种类、套餐名称等信息。生成的目标数据文件提供给其他系统使用(如利用数据库自带的数据文件导入工具,将目标数据文件中的记录装载到数据库系统中)。稍后对动态加载技术、反射(JAVA Reflection)调用技术以及目标数据文件进行简要介绍。
[0038] 本发明提供的电信业务数据动态转换方法的一个实施例中,电信业务数据转换规则信息包括电信业务数据转换规则和对应转换规则的编译状态信息。本发明中所提及的转换规则的编译状态信息主要存放在编译状态信息表中(参见下表1)。
[0039]
[0040] 表1
[0041] 本发明提供的电信业务数据动态转换方法的一个实施例中,其根据电信业务数据特点定制一些函数集合,主要包括维表查询函数、日期分析函数、字符串转换函数、时间戳格式化函数、日期格式化函数、分析接入号函数、分析区号函数、分析用户号码函数、分析运营商函数和分析网络类型函数等。以下对所涉及的10种主要函数进行简要说明:
[0042] (1)、维表查询函数:其根据指定的N(N≥1)字段值对查询表“tableName”,返回“resultColumnName”字段的值,无查询结果则返回“resultColumnValue”指定的值。
[0043] public final static String lookupOneByFour(String tableName,[0044] String queryColumnName1,//所用查询字段1的名称
[0045] String queryColumnValue1,//所用查询字段1的值
[0046] String queryColumnName2,//所用查询字段2的名称
[0047] String queryColumnValue2,//所用查询字段2的值
[0048] …
[0049] …
[0050] String queryColumnNameN,//所用查询字段N的名称
[0051] String queryColumnValueN,//所用查询字段N的值
[0052] String resultColumnName,//需要返回字段的名称
[0053] String resultColumnValue//需要返回字段的默认值
[0054] );
[0055] (2)、日期分析函数:分析str字符串是否为日期格式,不是,则返回默认值defaultDate。
[0056] public final static String parseDate(String str,StringdefaultDate);
[0057] (3)、字符串转换函数:将字符串转换成数字(整型、浮点…)。
[0058] public final static String str2Double(String str,StringdefaultVaD;
[0059] public final static String str2Int(String str,String defaultVal);
[0060] …
[0061] (4)、时间戳格式化函数:将date字符串格式化为“YYYY-MM-DD HH:MM:SS”的时间戳格式,失败则返回默认值defaultDate。
[0062] public final static String formatTimestamp(String date,StringdefaultDate);
[0063] (5)、日期格式化函数:将date字符串格式化为“YYYY-MM-DD”的日期格式,失败则返回默认值defaultDate。
[0064] public final static String formatDate(String date,StringdefaultDate);
[0065] (6)、分析接入号函数:分析指定的电话号码serviceNo,从中拆分出业务接入号码,如17909,17951等。失败则返回默认值defaultValue。
[0066] public final static String analyzeAccessCode(
[0067] String serviceNo,//业务号
[0068] String hasAccessCode,//业务号中是否含接入码
[0069] String hasAreaCode,//业务号中是否带区号
[0070] String recAreaCode,//话单下发地区号
[0071] String defaultValue //默认值
[0072] );
[0073] (7)、分析区号函数:分析指定的电话号码serviceNo,从中拆分出区号,如020、757等。失败则返回默认值defaultValue。
[0074] public final static String analyzeAreaCode(
[0075] String serviceNo,//业务号
[0076] String hasAccessCode,//业务号中是否含接入码
[0077] String hasAreaCode,//业务号中是否带区号
[0078] String recAreaCode,//话单下发地区号
[0079] String defaultValue //默认值
[0080] );
[0081] (8)、分析用户号码函数:分析指定的电话号码serviceNo,从中拆分出用户电话号码,如13388888888、87654114等。失败则返回默认值defaultValue。
[0082] public final static String analyzeUserNo(
[0083] String serviceNo,//业务号
[0084] String hasAccessCode,//业务号中是否含接入码
[0085] String hasAreaCode,//业务号中是否带区号
[0086] String recAreaCode,//话单下发地区号
[0087] String defaultValue //默认值
[0088] );
[0089] (9)、分析运营商函数:分析指定的电话号码serviceNo,从中拆分出运营商信息,如中国电信、中国移动等。失败则返回默认值defaultValue。
[0090] public final static String analyzeCarrierID(
[0091] String serviceNo,//业务号
[0092] String hasAccessCode,//业务号中是否含接入码
[0093] String hasAreaCode,//业务号中是否带区号
[0094] String recAreaCode,//话单下发地区号
[0095] String defaultValue //默认值
[0096] );
[0097] (10)、分析网络类型函数:分析指定的电话号码serviceNo,从中拆分出网络类型信息,如固定电话、小灵通、手机等。失败则返回默认值defaultValu e。
[0098] public final static String analyzeNetTypeID(
[0099] String serviceNo,//业务号
[0100] String hasAccessC ode,//业务号中是否含接入码
[0101] String hasAreaCode,//业务号中是否带区号
[0102] String recAreaCode,//话单下发地区号
[0103] String defaultValue //默认值
[0104] );
[0105] 本发明提供的电信业务数据动态转换方法的一个实施例中,使用前述新颖的函数集(例如,分析区号函数、分析用户号码函数和分析运营商函数),能够从呼叫用户拨号的数字中拆分接入号码、区号、运营商等信息。
[0106] 本发明提供的电信业务数据动态转换方法的一个实施例中,方法包括:提供基础函数集;以及提供用户自定义函数编程接口,供用户扩展函数集。函数集相关信息分别存放在函数集信息表(参见下表2)和函数参数信息表中(参见下表3)。
[0107]
[0108]
[0109] 表2
[0110]
[0111] 表3
[0112] 本发明提供的电信业务数据动态转换方法的一个实施例中,保存有业务实现类JAVA源代码的源数据文件在系统中存储,产生与之相关的源数据文件基本信息表(参见下表4)和源数据文件字段信息表(参见下表5)
[0113]
[0114]
[0115] 表4
[0116]属性序号 属性名称 数据类型 属性描述
1 FORMAT_ID BIGINT 格式标识
2 COLUMN_INDEX SMALLINT 字段序号
3 COLUMN_NAME VARCHAR(100) 字段名称
4 COLUMN_LENGTH SMALLINT 字段长度
5 COLUMN_DESCRIPTION VARCHAR(100) 字段描述
[0117] 表5
[0118] 本发明提供的电信业务数据动态转换方法的一个实施例中,对动态编译业务实现类源代码文件生成JAVA虚拟机能执行的程序代码的命令行参数如下:
[0119] “String[]compileArgs=
[0120] new String[]{″-d″,classFilePath,sourceFileName};
[0121] int retCode=
[0122] com.sun.tools.javac.Main.compile(compileArgs,logFile);
[0123] ”
[0124] 其中,“classFilePath”:编译生成的class文件存放目录;
[0125] “sourceFileName”:源代码文件名(含路径);
[0126] “logFile”:日志文件句柄。
[0127] 本发明提供的电信业务数据动态转换方法的一个实施例中,动态加载技术,即将编译生成的业务实现类class类装载进内存的代码如下:
[0128] “ Class svcImpl;
[0129] try{
[0130] svcImpl=Class.forName(serviceImplementClassName);
[0131] }catch(ClassNotFoundException e)
[0132] {
[0133] //异常处理
[0134] }
[0135] ”
[0136] 其中,“serviceImplementClassName”:动态编译时生成的业务实现类class文件名。
[0137] 本发明提供的电信业务数据动态转换方法的一个实施例中,为了能够灵活调用业务实现类的实现方法,业务实现类都需要实现一个接口函数doTransform()。采用反射技术调用代码如下:
[0138] “try{
[0139] Class []parameterClasses=new Class[1];
[0140] parameterClasses[0]=ServiceRule.class;
[0141] Object[]methodArgs=new Object[1];
[0142] methodArgs[0]=serviceRule;
[0143] Method implMethod=svcImpl.getMethod(″doTransform″,
[0144] parameterClasses);
[0145] implMethod.invoke(svcImpl.newInstance(),methodArgs);
[0146] }catch(Exception ex){
[0147] //异常处理
[0148] }
[0149] ”
[0150] 其中,“ServiceRule”:业务规则对象定义;
[0151] “serviceRule”:业务规则对象实例;
[0152] “svcImpl”:业务实现类实例。
[0153] 本发明提供的电信业务数据动态转换方法的一个实施例中,动态生成电信业务数据文件(目标文件)装载在数据库系统中,相关数据信息主要涉及目标文件基本信息表(参见下表6)、目标文件字段信息表(参见下表7)、目标文件字段转换规则(函数调用)信息表(参见下表8)、和目标文件字段函数调用实例信息表(参见下表9)。
[0154]
[0155] 表6
[0156]
[0157]
[0158] 表7
[0159]属性序号 属性名称 数据类型 属性描述
1 INSTANCE_ID BIGINT 实例标识
2 COLUMN_ID BIGINT 字段标识
3 FUNCTION_INDEX SMALLINT 调用序号
4 FUNCTION_ID INTEGER 函数标识
[0160] 表8
[0161]
[0162] 表9
[0163] 图2示出根据本发明的电信业务数据动态转换方法的一个实施例的流程图。
[0164] 如图2所示,步骤202,存储电信业务数据转换规则信息和函数集。例如,系统数据库中存储有用户预先定制好的电信业务数据转换规则信息和函数集等信息。
[0165] 步骤204,获取电信业务数据转换规则编译状态信息。例如,用户从系统数据库中获取电信业务数据转换规则信息中直接获取转换规则编译状态信息,用于判断该转换规则是否已经编译过。
[0166] 步骤206,判断转换规则是否已编译。如果根据获取的转换规则编译状态信息确认该转换规则未编译过,则执行步骤208;否则直接跳转到步骤214。
[0167] 步骤208,根据业务标识获取预置的电信业务数据转换规则。本发明提供的电信业务数据动态转换方法的一个实施例中,根据业务标识(通常为数字化的业务代码)从存储的电信业务数据转换规则信息中直接获取电信业务数据转换规则。
[0168] 步骤210,根据数据转换规则和预置的业务实现类的模板,动态生成业务实现类的JAVA源代码。例如,在步骤208中根据业务标识获取已配置好的业务规则信息,随后根据业务实现类模版文件,动态实例化生成业务实现类JAVA源代码文件。
[0169] 步骤212,编译业务实现类的JAVA源代码生成JAVA程序代码。例如,将业务实现类的JAVA源代码编译生成JAVA虚拟机能执行的程序代码。
[0170] 步骤214,动态加载并执行业务实现类,将源数据文件生成目标数据文件。例如,采用动态加载JAVA类和反射调用JAVA函数的技术,加载并执行业务实现类模板文件,读取源数据文件,生成目标数据文件。源数据文件包括系统参数或业务标识,如电信业务的种类、套餐名称等信息。生成的目标数据文件提供给其他系统使用(如利用数据库自带的数据文件导入工具,将目标数据文件中的记录装载到数据库系统中)。
[0171] 图3示出根据本发明的电信业务数据动态转换系统的一个实施例的结构示意图。如图3所示,电信业务数据动态转换系统300主要包括:数据转换规则存储子系统302、数据转换规则生成环境子系统304和数据转换规则调度子系统306。
[0172] 其中,数据转换规则存储子系统302用来存放存储电信业务数据转换规则信息和函数集,包括用户已经定制好的电信业务数据的转换规则、转换规则的编译状态,以及函数集等信息。
[0173] 数据转换规则生成环境子系统304用于从数据转换规则存储子系统302调用函数集定制电信业务数据转换规则,将修改或增加的转换规则的信息保存到数据转换规则存储子系统302;以及提供用户自定义函数编程接口,供用户扩展函数集。本发明提供的电信业务数据动态转换系统的一个实施例中,数据转换规则生成环境子系统304提供图形化的界面(如图4所示),供用户进行数据转换规则配置和维护函数集,以及提供编程接口给(具备JAVA编程经验的)高级用户进行自定义和扩展函数集,从而满足用户个性化的需求。
[0174] 数据转换规则调度子系统306用于从数据转换规则存储子系统302中获取电信业务数据转换规则;根据转换规则动态生成业务实现类的JAVA源代码;根据业务实现类的JAVA源代码编译生成JAVA虚拟机能执行的代码;以及动态生成电信业务数据文件。本发明提供的电信业务数据动态转换系统的一个实施例中,数据转换规则调度子系统306根据业务标识(通常为数字化的业务代码),从数据转换规则存储子系统302中获取已配置好的电信业务数据转换规则信息,并根据业务实现类模版文件,动态实例化生成业务实现类JAVA源代码文件,接着编译生成JAVA虚拟机能执行的程序代码,采用动态加载JAVA类和反射调用JAVA函数的技术,加载并执行业务实现类,读取源数据文件,生成目标数据文件,以备其他系统使用(例如,利用数据库自带的数据文件导入工具,将目标数据文件中的记录装载到数据库系统中),其进度监控界面如图5所示。
[0175] 本发明提供的电信业务数据动态转换系统的一个实施例中,数据转换规则调度子系统306先从数据转换规则存储子系统302中获取转换规则状态信息以判断该转换规则是否已经编译过;如果该转换规则的状态被标记为“已编译”,则电信业务数据动态转换系统300直接跳过JAVA源代码动态生成和编译生成JAVA虚拟机能执行的代码,由数据转换规则调度子系统306执行动态生成电信业务数据文件。
[0176] 本发明提供的基于函数集的电信业务数据动态转换方法,针对电信运营数据的特点进行定制,系统开发成本较低,其处理效率较高。此外,用户可以在转换规则生成环境子系统中很方便地对电信运营分析数据的转换规则进行增加、删除和修改等操作,从而能够适应于频繁变化的分析需求。本发明创新地提出采用函数集,具有良好的灵活性,而后台采用动态编译的方式动态实现电信业务数据转换,为电信系统提供准确、统一的数据文件。
[0177] 图4示出本发明数据转换规则生成环境子系统的一个实施例提供的图形化界面。如图4所示,该图形化的界面在通常的窗口界面内除了设置有“文件”、“显示”、“规则管理”和“帮助”工具栏外,在窗口的左侧设置有“业务转换规则树”,其具有树形结构,用户可以从树形节点中选取合适的转换规则。当用户选取某个节点的转换规则后,随即展开该规则相关的定制界面,如“输入定义”栏、“输出定义”栏、“映射关系定义”栏。以“映射关系定义”栏为例,其按序号排列出“字段名称”以及与“ID”对应的“转换函数”。在图4右侧还给出添加、删除等按键,用于对所列出的函数进行修改操作。
[0178] 图5示出了数据转换规则调度子系统的一个实施例将源数据文件转换成目标数据文件并装载到数据库系统中的进度监控界面。用户将获取的业务数据转换规则编译生成JAVA虚拟机能执行的程序代码,采用动态加载JAVA类和反射调用JAVA函数的技术调度执行数据转换规则业务实现类,生成目标数据文件并装载入数据库系统中。如图5所示,对业务名称“TMAS06_CT_LDIST_200_CDR”进行装载保存时,该界面会显示当前文件的名称,读取记录量、当前进度、开始时间、已用时间和剩余时间,以及平均速度等信息。
[0179] 图6示出根据本发明的电信业务数据动态转换系统的一个具体实施例的结构示意图。如图6所示,电信业务数据动态转换系统600主要包括:数据转换规则存储子系统602、数据转换规则生成环境子系统604和数据转换规则调度子系统606。
[0180] 其中,数据转换规则存储子系统602用来存放存储电信业务数据转换规则信息和函数集,包括用户预先定制好的电信业务数据的转换规则、转换规则的编译状态,以及函数集等信息。
[0181] 数据转换规则生成环境子系统604用于通过图形化界面接收用户对电信业务数据转换规则的配置,将修改或增加的转换规则的信息保存到数据转换规则存储子系统602;以及提供用户自定义函数编程接口,供用户扩展函数集。本发明提供的电信业务数据动态转换系统的一个实施例中,数据转换规则生成环境子系统604提供图形化的界面(如图4所示),供用户进行数据转换规则配置和维护函数集,以及提供编程接口给(具备JAVA编程经验的)高级用户进行自定义和扩展函数集,从而满足用户个性化的需求。
[0182] 数据转换规则调度子系统606用于从数据转换规则存储子系统602中获取电信业务数据转换规则;根据转换规则和预置的业务实现类的模板,动态生成业务实现类的JAVA源代码,并编译生成JAVA程序代码;以及动态加载并执行业务实现类,将源数据文件生成目标数据文件。本发明提供的电信业务数据动态转换系统的一个实施例中,数据转换规则调度子系统606根据业务标识(通常为数字化的业务代码),从数据转换规则存储子系统602中获取已配置好的电信业务数据转换规则信息,并根据业务实现类模版文件,动态实例化生成业务实现类JAVA源代码文件,接着编译生成JAVA虚拟机能执行的程序代码,采用动态加载JAVA类和反射调用JAVA函数的技术,加载并执行业务实现类,读取源数据文件,生成目标数据文件,以备其他系统使用(例如,利用数据库自带的数据文件导入工具,将目标数据文件中的记录装载到数据库系统中),其进度监控界面如图5所示。
[0183] 本发明提供的电信业务数据动态转换系统的一个实施例中,数据转换规则调度子系统606先从数据转换规则存储子系统602中获取转换规则状态信息以判断该转换规则是否已经编译过;如果该转换规则的状态被标记为“已编译”,则电信业务数据动态转换系统600直接跳过JAVA源代码动态生成和编译生成JAVA虚拟机能执行的代码,由数据转换规则调度子系统606执行动态生成电信业务数据文件。
[0184] 本发明提供的电信业务数据动态转换系统的一个实施例中,数据转换规则生成环境子系统604提供图形化的界面供用户定制电信业务数据转换规则,其主要包括数据转换规则图形化展示模块6041、数据转换规则配置向导模块6042、数据转换规则导入/导出模块6043、函数集配置模块6044、自定义函数向导模块6045和函数导入/导出模块6046。
[0185] 其中,数据转换规则图形化展示模块6041,用于负责转换规则列表的树状展现和转换规则的信息展现。具体来说,数据转换规则图形化展示模块6041将用户已经定制的转换规则的业务标识信息,如业务名称等,以树状方式显示;当选中某树节点时,在显示区域显示该业务对应数据转换规则的详细信息,并可以对选定的转换规则进行修改和删除。
[0186] 数据转换规则配置向导模块6042,用于负责引导用户逐步完成转换规则的定义。具体来说,数据转换规则配置向导模块6042对转换规则的定义包括:业务标识定义,该项业务源数据文件的格式定义,该项业务目标数据文件的格式定义,以及该项业务目标数据文件格式中每个字段的转换规则的定义。其中该项业务源数据文件的格式定义包括定义记录行分隔符号、记录字段间的分割类型和分割符号,以及记录中各字段的名称、类型和长度等信息。该项业务目标数据文件的格式定义包括定义记录行分隔符号、记录字段间的分隔符号、目标文件名,各记录字段的名称、类型、长度和输出顺序,以及转换顺序等信息。该项业务目标数据文件格式中每个字段的转换规则的定义包括按一定顺序调用函数集中的一些函数来定义该业务目标数据文件格式中每个字段的转换规则;具体来说,主要包括函数名和函数参数。其中,函数参数可以为:系统参数(如业务标识、源数据文件名、账期等)、源数据文件格式中的某字段值的引用、目标数据文件格式中的某字段值的引用、该函数调用前的任意一个其它函数调用的返回值,以及常量。
[0187] 数据转换规则导入/导出模块6043,用于负责导入和导出选定的转换规则,供用户备份和/或部署。该数据转换规则导入/导出模块6043能方便用户及时备份数据转换规则信息和快速迁移部署。
[0188] 函数集配置模块6044,用于对已定制的函数集进行维护;具体涉及对所选定的函数的修改、删除等操作。
[0189] 自定义函数向导模块6045,用于负责引导用户完成函数的定义。用户可以根据自定义函数向导模块6045的引导一步步地完成对补充函数的自定义,具体涉及括定制函数名、函数所需包(package)、函数输入参数、函数输出参数和函数体等信息。
[0190] 函数导入/导出模块6046,用于导入/导出函数集或单个函数,供用户备份和/或部署。该函数导入/导出模块6046能方便用户及时备份函数信息和快速迁移部署。
[0191] 本发明提供的电信业务数据动态转换系统的一个实施例中,数据转换规则生成环境子系统604还包括:系统参数模块和系统日志模块;其中系统参数模块,用于负责配置和维护数据库服务器参数、访问账号等信息;系统日志模块,用于负责集中收集和存储数据转换规则生成环境子系统604中出现的错误,如异常错误、操作日志等信息。
[0192] 图7示出根据本发明的电信业务数据动态转换系统的一个具体实施例的结构示意图。如图7所示,电信业务数据动态转换系统700主要包括:数据转换规则存储子系统702、数据转换规则生成环境子系统704和数据转换规则调度子系统706。
[0193] 其中,数据转换规则存储子系统702用来存放存储电信业务数据转换规则信息和函数集,包括用户预先定制好的电信业务数据的转换规则、转换规则的编译状态,以及函数集等信息。
[0194] 数据转换规则生成环境子系统704用于通过图形化界面接收用户对电信业务数据转换规则的配置,将修改或增加的转换规则的信息保存到数据转换规则存储子系统702;以及提供用户自定义函数编程接口,供用户扩展函数集。本发明提供的电信业务数据动态转换系统的一个实施例中,数据转换规则生成环境子系统704提供图形化的界面(如图4所示),供用户进行数据转换规则配置和维护函数集,以及提供编程接口给(具备JAVA编程经验的)高级用户进行自定义和扩展函数集,从而满足用户个性化的需求。
[0195] 数据转换规则调度子系统706用于从数据转换规则存储子系统702中获取电信业务数据转换规则;根据转换规则和预置的业务实现类的模板,动态生成业务实现类的JAVA源代码,并编译生成JAVA程序代码;以及动态加载并执行业务实现类,将源数据文件生成目标数据文件。本发明提供的电信业务数据动态转换系统的一个实施例中,数据转换规则调度子系统406根据业务标识(通常为数字化的业务代码),从数据转换规则存储子系统702中获取已配置好的电信业务数据转换规则信息,并根据业务实现类模版文件,动态实例化生成业务实现类JAVA源代码文件,接着编译生成JAVA虚拟机能执行的程序代码,采用动态加载JAVA类和反射调用JAVA函数的技术,加载并执行业务实现类,读取源数据文件,生成目标数据文件,以备其他系统使用(例如,利用数据库自带的数据文件导入工具,将目标数据文件中的记录装载到数据库系统中),其进度监控界面如图5所示。
[0196] 本发明提供的电信业务数据动态转换系统的一个实施例中,数据转换规则调度子系统706先从数据转换规则存储子系统702中获取转换规则状态信息以判断该转换规则是否已经编译过;如果该转换规则的状态被标记为“已编译”,则电信业务数据动态转换系统700直接跳过JAVA源代码动态生成和编译生成JAVA虚拟机能执行的代码,由数据转换规则调度子系统706执行动态生成电信业务数据文件。
[0197] 本发明提供的电信业务数据动态转换系统的一个实施例中,数据转换规则调度子系统706包括源代码生成器7062和源代码编译器7064。其中,源代码生成器7062用以根据数据转换规则,实例化业务实现类源代码模板文件,生成业务实现类JAVA源代码文件;源代码编译器7064用以编译业务实现类JAVA源代码文件,生成JAVA虚拟机能执行的代码。
[0198] 本发明提供的电信业务数据动态转换系统的一个实施例中,数据转换规则调度子系统706还包括:数据转换模块、数据文件读写模块、错误处理模块、系统参数模块和系统日志模块。其中数据转换模块,用于动态加载JAVA类,采用反射技术调度执行业务规则的JAVA可执行代码程序,对读取的源数据文件记录转换成目标数据文件记录,并写入目标数据文件中。数据文件读写模块,用于负责数据源文件的读取和目标数据文件的写入。错误处理模块,用于负责集中收集和处理系统错误,如文件读写错误、数据转换错误等情况。系统参数模块,用于负责配置和维护数据库服务器参数、访问账号、数据转换线程数、数据文件读写缓冲区大小等信息。系统日志模块,用于负责记录系统运行过程中的日志信息,包括编译信息、数据转换信息等。
[0199] 图8示出根据本发明的电信业务数据动态转换方法的一个具体应用例的流程图。
[0200] 如图8所示,步骤802,启动数据转换规则生成环境子系统。
[0201] 步骤804,选择转换规则配置向导。例如,用户在数据转换规则生成环境子系统中业务规则配置向导,用以引导用户逐步完成对电信业务数据转换规则的配置过程。
[0202] 步骤806,配置输入数据格式。例如,用户在业务规则配置向导的引导下完成源数据文件的格式定义,包括定义记录行分隔符号、记录字段间的分割类型和分割符号,以及记录中各字段的名称、类型和长度等信息。
[0203] 步骤808,配置输出数据格式。例如,用户在业务规则配置向导的引导下完成目标数据文件的格式定义,包括定义记录行分隔符号、记录字段间的分隔符号、目标文件名,各记录字段的名称、类型、长度和输出顺序,以及转换顺序等信息。
[0204] 步骤810,配置转换规则。例如,用户在业务规则配置向导的引导下完成目标数据文件格式中每个字段的转换规则的定义,包括按一定顺序调用函数集中的一些函数来定义该业务目标数据文件格式中每个字段的转换规则;具体来说,主要包括函数名和函数参数。其中,函数参数可以为:系统参数(如业务标识、源数据文件名、账期等)、源数据文件格式中的某字段值的引用、目标数据文件格式中的某字段值的引用、该函数调用前的任意一个其它函数调用的返回值,以及常量。
[0205] 步骤812,启动数据转换规则调度子系统。
[0206] 步骤814,获取电信业务数据转换规则编译状态信息。例如,数据转换规则调度子系统从数据转换规则存储子系统中获取与业务代码参数对应的电信业务数据转换规则信息,并直接读取转换规则编译状态信息,用于判断该转换规则是否已经编译过。
[0207] 步骤816,判断转换规则是否已编译。如果根据获取的转换规则编译状态信息确认该转换规则未编译过,则执行步骤818;否则直接跳转到步骤824。
[0208] 步骤818,根据业务标识获取预置的电信业务数据转换规则。本发明提供的电信业务数据动态转换方法的一个实施例中,根据业务标识(通常为数字化的业务代码)从存储的电信业务数据转换规则信息中直接获取电信业务数据转换规则。
[0209] 步骤820,根据数据转换规则和预置的业务实现类的模板,动态生成业务实现类的JAVA源代码。例如,在步骤818中根据业务标识获取已配置好的业务规则信息,随后根据业务实现类模版文件,动态实例化生成业务实现类JAVA源代码文件。
[0210] 步骤822,编译业务实现类的JAVA源代码生成JAVA程序代码。例如,调用JAVA开发包中的API函数(如compile API)编译JAVA源代码生成JAVA虚拟机能执行的程序代码。
[0211] 步骤824,动态加载并执行业务实现类,将源数据文件生成目标数据文件。例如,采用动态加载JAVA类和反射调用JAVA函数的技术,加载并执行业务实现类模板文件,读取源数据文件,生成目标数据文件。源数据文件包括系统参数或业务标识,如电信业务的种类、套餐名称等信息。生成的目标数据文件提供给其他系统使用(如利用数据库自带的数据文件导入工具,将目标数据文件中的记录装载到数据库系统中)。
[0212] 图9示出根据本发明的电信业务数据动态转换的系统的一个具体应用例的流程图。如图9所示,电信业务数据动态转换的系统900包括:数据转换规则存储子系统902、数据转换规则生成环境子系统904和数据转换规则调度子系统906。
[0213] 其中,数据转换规则存储子系统902用来存放存储电信业务数据转换规则信息和函数集,包括用户预先定制好的电信业务数据的转换规则、转换规则的编译状态,以及函数集等信息。
[0214] 转换规则生成环境子系统904用于通过图形化界面接收用户对电信业务数据转换规则的配置,将修改或增加的转换规则的信息保存到数据转换规则存储子系统902;以及提供用户自定义函数编程接口,供用户扩展函数集。本发明提供的电信业务数据动态转换系统的一个实施例中,数据转换规则生成环境子系统904提供图形化的界面供用户定制电信业务数据转换规则,其包括:数据转换规则配置模块9042、函数集配置模块9044,系统维护模块9046;其中,数据转换规则配置模块9042包括:数据转换规则维护子模块90422,用于负责转换规则列表的树状展现和转换规则的信息展现;数据转换规则配置向导子模块90424,用于负责引导用户逐步完成转换规则的定义;数据转换规则导入/导出子模块90426,用于负责导入和导出选定的转换规则,供用户备份和/或部署。函数集配置模块
9044包括:函数集维护子模块90442,用于对预置的函数集进行维护,涉及对选定函数的修改、删除等操作;自定义函数向导子模块90444,用于负责引导用户完成函数的定义;函数导入/导出子模块90446,用于导入/导出函数集或单个函数,供用户备份和/或部署。系统维护模块9046包括系统参数子模块90462和系统日志子模块90464,分别用于配置和维护数据转换规则生成环境子系统904的系统参数,生成并存储系统日志。
[0215] 数据转换规则调度子系统906用于从数据转换规则存储子系统902中获取电信业务数据转换规则;根据转换规则和预置的业务实现类的模板,动态生成业务实现类的JAVA源代码,并编译生成JAVA程序代码;以及动态加载并执行业务实现类,将源数据文件生成目标数据文件。本发明提供的电信业务数据动态转换系统的一个实施例中,数据转换规则调度子系统906包括:数据转换规则引擎9062和系统维护模块9064;其中,数据转换规则引擎9062包括:源代码生成器90622,用于根据数据转换规则和预置的业务实现类的模板,动态生成业务实现类的JAVA源代码文件;源代码编译器90624,用于编译业务实现类的JAVA源代码文件,生成JAVA程序代码;以及数据转换规则处理器90626,用于读写数据文件,负责电信业务数据转换;以及集中和处理系统错误。系统维护模块9064包括:系统参数子模块90642,用于配置和维护数据转换规则调度子系统906的系统参数;系统日志子模块90644,用于生成和存储数据转换规则调度子系统906的系统日志。
[0216] 本发明提供的电信业务数据动态转换系统的一个实施例中,数据转换规则调度子系统906先从数据转换规则存储子系统902中获取转换规则状态信息以判断该转换规则是否已经编译过;如果该转换规则的状态被标记为“已编译”,则电信业务数据动态转换系统900直接跳过JAVA源代码动态生成和编译生成JAVA虚拟机能执行的代码,由数据转换规则调度子系统906执行动态生成电信业务数据文件。
[0217] 目前市场上的ETL工具,因为没有针对电信业务数据特点进行优化处理,因此,在灵活性和效率之间未能取得较好的平衡。本发明针对电信业务数据特性建立了丰富的函数集,同时提供函数自定义接口,便于用户扩展函数集;不同于当前脚本解释型ETL工具,本发明采用动态生成源代码,动态编译,以及动态加载并执行代码的方式,有效地提高了数据转换效率,可以避免在电信业务数据转换需求发生变更时引起的ETL工具程序代码的修改,具有很强的实用性。作为本发明提供的电信业务数据动态转换方法及其系统的一个具体实施例,电信业务数据动态转换系统已经成功地在中国电信广东电信分公司的电信运营系统中进行应用,并取得了良好的预期效果。
[0218] 本发明提供的基于函数集的电信业务数据动态转换方法及其系统一次性生成电信业务数据转换规则的可执行JAVA代码。在进行某指定业务的数据转换时,系统会先检查该项业务对应的转换规则的编译状态;如果该转换规则的编译状态标记为已编译,则系统跳过JAVA源代码生成和JAVA代码编译环节,而直接使用JAVA反射技术启动该项业务的“动态生成电信业务数据文件”;从而更加高效、灵活地实现本发明对电信业务数据转换和挖掘。
[0219] 此外、本发明在电话号码拆分过程中,优先按长度对常见接入号码和区号的进行匹配(例如,对国内区号,优先匹配长度为3的区号),这样可以适当的减少匹配次数,从而提高数据的转换效率。而且使用多线程和多模块协同工作等技术和方法,提高系统的并行处理能力;将数据转换过程中需要用来标准化的维表数据,同步到内存中,提高数据标准化查询速度。本发明从整体上看,由于期采用纯JAVA设计整个电信业务数据动态转换系统,因而能够获得良好的跨平台性。
[0220] 虽然已经参考示例性实施例描述了本发明,但是应该理解,本发明并不局限于公开的示例性实施例。很多修改和变化对于本领域的普通技术人员而言是显而易见的。选择和描述实施例是为了更好说明本发明的原理和实际应用,并且使本领域的普通技术人员能够理解本发明从而设计适于特定用途的带有各种修改的各种实施例。