




免费预览已结束,剩余39页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本科生毕业设计论文数据库转换工具的设计与实现 计算机科学与技术院 系_ 专业班级_姓 名_ 学 号_指导教师_ 年 月 日摘 要本文设计与实现了一个数据库的数据转换工具,能够实现多数据源间的数据的导入导出和数据整合。该工具基于开源ETL工具Kettle,使用纯java语言编写,可用于二次开发。而数据转换工具的设计是在kettle的源码基础上,进行功能扩展。数据库转换工具是在kettle的数据抽取、数据转换、数据加载三个方面的插件功能上进行了添加,从通用的数据库连接方式中分离出了DM数据库的连接,实现达梦数据库和oracle数据库之间的数据转换。总共增加的步骤插件有7个。数据抽取:word输入,word文件作为数据源,兼容doc和docx格式的文件。数据以表格形式存储在word文件中,Word输入是从一个word文件的表格中抽取数据;数据加载:word输出,生成一个docx格式的文件,数据存储在word文件的表格中;数据清洗:单位换算,支持长度、重量、频率、速度、功率及角度这6种单位的换算;字段清理,可根据设置的分隔符字符和位置清理掉其前或其后的字符串;提取数字,仅保留字符串中带符号的数字;全半角转换,将字符串中全角符号全部转换为半角符号;日期规格化,将不合法的日期规格化。关键字:kettle,元数据,插件,数据转换,数据清洗,word输入输出AbstractThe main purpose of this paper is to design and implement a data transformation tool to achieve data import and export from multiple sources and data integration.Kettle is an open source ETL tool,using pure java language,whose source code is able to be redeveloped.The tool is based on kettles source code to add the rules of data cleaning according to the problems when data is integrated between old database and new database.Kettle is an application that consists of a platform and plugin structure.In this topic,the modification of kettle is in plugin structure.We mainly add the function about data extraction ,data transformation and data loading,as well as separating the DM database connection from the general database connection.Totally,seven steps of plugin are added,including word input in data extraction ,that word files is regarded as a data source.Data is stored in table.Data extracting from a table in word files.Word files supports doc and docx format., word output in data loading which generates a word whose extension is docx.Data is stored in table .and in data transformation, including unit conversion that supports 6 units conversion which including length ,quality,speed,frequency,power and angle ; field cleaning, a string that can be cleaned before or after according to the setting of the separator string ;extraction of digital, Only the number with sign can be reserved in a string;full-to-half , ll full width symbols will be into half width symbols;Date Standard ,it standardizes illegal date string.Key Words:kettle,metadata,plugin,data transformation,data cleaning,word input and output.II目 录(格式?)摘 要IAbstractII1 绪论11.1 课题背景及目的11.2 课题国内外转换工具概况21.2.1 DM数据迁移工具21.2.2 DMETL数据交换平台31.2.3 Oracle Warehouse Builder31.2.4 Kettle41.3 课题的主要工作和论文构成51.3.1 主要工作51.3.2 论文构成52 核心技术72.1 数据库驱动程序JDBC72.2 Apache POI组件72.3 正则表达式82.4 元数据库93 Kettle系统结构简介113.1 Kettle系统结构113.2 kettle插件结构123.2.1 Kettle的插件扩展机制123.2.2 步骤插件的组成143.2.3 步骤插件间的通信163.3 本章小结174 数据库转换工具的设计与实现184.1 转换的选择与不足184.2 新增插件word输入194.2.1 Word输入插件的注册及显示204.2.2 Word输入插件的调用224.2.3 Word输入插件的实例化224.2.4 Word输入插件的实现234.3 新增插件数据转换254.3.1 单位换算254.3.2 字段清理284.3.3 提取数字294.3.4 全半角转换304.3.5 日期规格化304.4 新增插件word输出314.5 新增功能DM数据库连接334.6 本章小结34结束语35论文总结35未来展望36致谢37参考文献38IV1 绪论1.1 课题背景及目的随着互联网技术的发展与普及,信息交流速度加快,计算机给各行业带来了近乎革命性的变化。传统的办公方式,如纸质的信息传播存储、口头告知等效率低下,严重制约着企业的发展。由于信息技术的快速更新和实体间选择的差异,企业的不同部门使用不同的数据库管理系统的现象十分普遍。因此,异构数据库间数据转换的要求是十分普遍的,不同部门之间的数据交换问题也越来越突出。另外,当数据库系统升级时,为了最大程度地利用现有企业内外部的资源、避免重复开发导致的的浪费,异种数据库操作的问题也必须得到解决。在数据库需要使用外部数据时也存在着异构数据库操作问题。那些基于不同平台不同类型的分布式的关系数据库如access,DM,oracle等需要数据共享和转换,如何实现异构数据间转换及如何提高其性能显得非常重要和迫切。关于数据转换工具的功能需求,只要从两个方面的要求来说:数据导入导出和数据整合。l 数据的导入导出a. 提供达梦数据库与oracle数据库之间的数据转换工具;b. 提供excel文件与数据库之间的数据导入导出工具;c. 提供数据库到文本文件(txt、doc)的导出工具。l 数据整合数据整合是共享或合并来自于两个或多个数据源的数据,创建一个更多功能的应用的过程。课题中主要实现数据库数据结构的整合,为了实现旧数据库数据向新的数据库的导入导出,需分析新旧数据库的数据结构的变化,在保证源数据库表结构不变的情况下,在中间过程对数据库表结构进行重整,使得数据能够完整、正确的导入到目标数据库中,从而到达实现数据整合的目的。数据转换工具将提供数据库之间的数据相互转换,如果只是库表字段不统一,那么将两表之间意思相同的字段进行对应,缺少的字段可以新增,多余的字段进行删减,然后利用转换工具将两表对应,实现数据库表之间的数据转换。1.2 课题国内外转换工具概况大多数的大型主流的数据库管理系统都有自带的或是所在公司研发的数据导入导出工具,现今也有很多的ETL工具能够实现数据转换。这里主要介绍DM和oracle数据库的数据导入导出工具以及常见的开源ETL工具。1.2.1 DM数据迁移工具参考文献应该大部分都引用,可加上达梦的用户手册作为参考文献武汉达梦数据库带有一个数据迁移工具,DM数据迁移工具提供了主流大型数据库Oracle、SQLServer、MySQL、DB2、PostgreSQL、Informix、Kingbase、Sybase的模式、表、视图、序列、索引迁移到DM13。它主要支持:l ODBC数据源、JDBC数据源的模式、表、视图迁移到DM;l DM数据库的模式、表、视图、序列、索引迁移到主流大型数据库Oracle、SQLServer、MySQL;l DM数据库之间模式、表、序列、视图、存储过程/函数、包、类、同义词、触发器、对象权限的迁移;l DM数据库模式、表、序列、视图、存储过程/函数、包、类、同义词、触发器、对象权限迁移到XML文件;l DM数据库模式、表、序列、视图、存储过程/函数、包、类、同义词、触发器、对象权限迁移到SQL脚本文件;l DM数据库的表、视图数据迁移到文本文件;l DM数据库的表、视图数据迁移到Excel文件;l DM数据库的表、视图数据迁移到Word文件;l SQL脚本文件迁移到DM数据库;l XML文件迁移到DM数据库;l 指定格式的文本文件、Word文件和Excel文件迁移到DM数据库。1.2.2 DMETL数据交换平台达梦也有自己研发的一款ETL工具DMETL。在数据转换方面,达梦数据交换平台提供丰富的数据源和转换规则。DMETL支持各种主流数据库(达梦、Oracle、SQLServer、 DB2、Mysql、Sybase、PostgreSql等)的全量和增量数据抽取和装载,还支持TXT、CSV、Excel、XML文件、消息服务器、LDAP服务器、WebService等数据的抽取和装载。DMETL提供的数据转换规则包括:联合、聚合、排序、设置变量、删除重复行、数据集查找、数据质量检测、行转列、列转行、SQL脚本、数据集查找和数据清洗转换。其中数据清洗转换内置了40多种的数据清洗规则,对于简繁体、汉字拼音、乱码处理、字符集转换、中文数字的中国特有的问题提供内置的转换规则进行处理。数据清洗规则具体如图 1.1所示。图 1.1 DMETL支持的数据清洗规则1.2.3 Oracle Warehouse Builder作为三级目录是否太短了点?Oracle Warehouse Builder(OWB)12是oracle公司于1998年推出的一个集成工具,主要用于帮助企业构建数据仓库。OWB提供了一个易于使用的图形环境,用于快速设计、部署和管理商务智能系统。其功能包括:数据模型构造和设计、数据抽取、转换和装载(ETL),元数据库管理,数据仓库的管理和分析工具的整合。OWB的核心领域为企业元数据管理、企业业数据集成、完整的系统设计、集成质量及开放性。OWB支持复杂的提取、转换和传输过程。OWB通过oracle提供的透明网关技术,从ODBC数据源、oracle数据库和大型主机系统中快速提取和有效的装载数据。但是DMETL和OWB的使用具有局限性,它们属于各自特定的数据库管理系统的,较依赖于具体的数据库相关产品,通用性不强3。1.2.4 KettleKettle是一个开源的ETL(Extract-Transform-Load的缩写,即数据抽取、转换、装载的过程)项目,它是由纯java语言编写,具有较好的移植性,绿色无需安装,数据抽取方面性能高效稳定。Kettle的目的是:把一种或多种数据源放入到一个kettle中,经过kettle对数据的处理,从“水壶中流出”的是按某一种指定的数据格式存储的数据14。ETL项目很大一部分工作是在做数据转换。在输入和输出之间,数据要经过检验、连接、分割、合并、转置、排序、合并、克隆、排重、过滤、删除、替换或其他操作。Kettle支持类型广泛的数据源和数据格式并从中抽取数据,数据源包括普通关系型数据库,如常见的oracle、MS SQL Server、IBM DB/2、Ingres、MySQL和PostgresSQL;有分隔符或固定格式的ASCII码文件;XML文件;流行的办公软件,如Access数据库和Excel电子表格;一些ERP系统,如SAP/R3、oracle E-Business Suite。还能从Web Service或RSS中获取数据。除了类型广泛的数据源外,kettle也提供了丰富的转换功能。包括:值映射、去除重复记录、合并字段、合并记录、增加常量、增加序列、字段选择、字符串剪切(string cut)、过滤记录、字符串替换(Replace in string)、字段拼接(Concat Fields)、拆分字段、排序记录、列转行、行转列(Row Normaliser)、行扁平化、计算器、合并连接、AddXML、Add a checksum、Add value fields changing sequence、Closure Generator、Example Plugin、Get ID from slave server、Number range、String operations、Unique rows (HashSet)、XSL Transformation、Split fields to rows。提供缓慢变更维度、查询值、行列转换、条件分割、排序、合并、连接、聚集这些最基本的数据整合功能。然而世界上没有哪一个工具能为你提供所有能想象到的数据转换的能力,kettle也是如此。这意味着必须要有扩展功能的方法。因为kettle是开源的免费软件,是以java平台为基础开发出来的,适合于二次开发,可以通过调用外部库或是第三方API来为工具扩展数据转化功能。尽管kettle有很多的有点,它也有许多的不足之处。Kettle不支持权限管理和批量装载功能。Kettle的数据抽取性能较不稳定,数据转换的速度较慢。1.3 课题的主要工作和论文构成1.3.1 主要工作数据转换工具的设计是在kettle的源码基础上,针对kettle在数据抽取、转换、加载功能这三个方面的缺陷,对其功能进行修改和添加。在数据导入导出方面,主要是增加了数据源word文件。在数据抽取和数据加载方面,分别新增插件word输入和word输出。Word输入是以word文件作为数据源,兼容doc和docx格式的文件。数据以表格形式存储在word文件中,Word输入是从一个word文件的表格中抽取数据。Word输出是生成一个docx格式的文件,数据存储在word文件的表格中。再有就是改进了DM数据库的连接功能,从通用的数据库连接方式中分离出DM数据库的连接,更加便于DM数据库和oracle数据库之间的数据转换。数据转换工具是通过对数据的转换、清洗实现对数据库表结构和数据类型的整合,使得数据能正确的导入到目标文件或数据库中。实现过程中,在分析总结kettle自带的功能插件的缺点与不足后,在数据转换方面,最终设计增加的步骤插件有:单位换算,支持长度、重量、频率、速度、功率及角度这6种单位的换算;字段清理,可根据设置的分隔符字符和位置清理掉其前或其后的字符串;提取数字,仅保留字符串中带符号的数字;全半角转换,将字符串中全角符号全部转换为半角符号;日期规格化,将不合法的日期规格化。1.3.2 论文构成本文共分为四章,每章的内容和组织如下:第1章 是数据库转换工具设计与实现的绪论部分。主要是介绍本课题的背景和目的,介绍了DM迁移工具和三种ETL工具的功能。第2章 是本课题中使用的核心技术。包括数据库连接的JDBC和ODBC技术,对word文件进行操作的POI组件,字符串处理使用的正则表达式,插件体系结构以及重要的元数据库的技术原理。第3章 是关于数据转换工具的原理。具体介绍课题利用到的kettle的插件结构部分,讲述了kettle的插件结构和每个插件必要的模块功能。一个转换任务一般分成三个方面:数据抽取、数据转换和数据加载。这里还介绍了转换的基本流程和转换步骤间的通信方式。第4章 是数据库转换工具的设计与实现部分。首先列出了在数据整合和数据清洗方面的问题,针对不能使用kettle已有功能解决的问题,提出了相应的插件设计方法并实现,在本章中,通过从数据抽取、数据转换、数据加载三个方面来介绍新增的方法。总共实现的插件有:数据抽取:word输入;数据加载:word输出;数据清洗:单位换算、字段清理、提取数字、全半角转换、日期规格化。第5章 是全文总结。总结了本课题的核心工作,并说明课题中存在的问题和未来的研究方向。392 核心技术2.1 数据库驱动程序JDBCJDBC是Java语言访问数据库的一种规范,全称Java Database Connectivity,是一套API。JDBC API,即Java数据库编程接口,是一套规范的Java语言中的接口和类,通过利用这些接口和类,Java应用程序可以连接访问各种不同类型的数据库。比如创建数据库连接、执行SQL语句或是进行数据的读写操作。JDBC标准运用接口和实现分离的设计思想设计了Java数据库编程的框架。接口包含在java.sql及javax.sql包中,其中java.sql属于JavaSE,javax.sql属于JavaEE。这些接口的实现类就是数据库驱动程序,由数据库管理系统的厂商或个体或其它的厂商提供。. 通常使用JDBC实现数据库连接的步骤为:1)加载JDBC驱动程序;2)提供JDBC连接的URL;3)创建数据库的连接;4)创建一个Statement;5)执行SQL语句;6)处理结果,其中查询返回一个ResultSet对象;7)关闭JDBC对象。2.2 Apache POI组件Apache POI是Apache公司开发的一套用于访问微软 Office 格式文档 的 Java API。其中对 Excel 格式文件操作的 API 是 HSSF、XSSF,对Word 格式文件操作的是 HWPF、XWPF,以及对 PPT格式文件操作的是 HSLF、XSLF。因为kettle已经拥有Excel文件输入、输出功能,所以在本课题中,主要是增加针对word文件的操作,这里主要讲POI对word的操作。HWPF接口主要用来处理doc文件对象,由于Apache公司负责这部分的程序员离开公司,没有人继续其后续的功能补充,所以用于word文件操作的POI API部分相较于Excel的来说是不太成熟的,但是对于word文件中表格的操作还是可以做一些基本的读写操作。HWPF提供给我们使用的对象在 org.apache.poi.hwpf.extractor 和 org.apache.poi.hwpf.usermodel 包中,主要部分包括 Word 对象,表格,单元格等。主要有以下几种对象:org.apache.poi.hwpf.usermodel.Table:对应word doc文件中的一个表格table,没有表格名称,只有相对应的表格索引。org.apache.poi.hwpf.usermodel.TableCell:对应Word doc文件中表格的一个单元格。org.apache.poi.hwpf.usermodel.Range:是 HWPF 对象模型的核心类,适合Word doc文件中的字符的范围的所有属性扩展这个类。通过遍历范围内的内容,可知文件中表格的数量。 XWPF模块是POI中对word docx文件进行操作的部分,其核心是XWPFDocument。一个XWPFDocument就是一个docx文件,它可以读、写docx文件。XWPFDocument中主要包含下面这几种对象:XWPFParagraph:代表一个段落。XWPFRun:代表具有相同属性的一段文本。XWPFTable:代表一个表格。XWPFTableRow:表格的一行。XWPFTableCell:表格对应的一个单元格。2.3 正则表达式正则表达式主要用于对字符串的处理。和普通的字符串处理函数相比,使用正则表达式更加简单方便。一个正则表达式就是由普通字符(例如数字0到9,英文字母)以及特殊字符(元字符,例如,?)组成的逻辑公式Error! Reference source not found.,用来匹配符合某个规则的字符串。该公式表达对字符串的一个过滤逻辑。正则表达式可以匹配在字符串中符合公式逻辑的字符串,或是过滤掉我们不想要的部分字符串。正则表达式的特点是灵活,逻辑性强且功能强大,可以通过及其简单的方式达到对字符串的复杂处理。正则表达式有两种模式:贪婪与非贪婪模式。它们影响的是被量词修饰的子表达式的匹配行为。贪婪模式,就是在表达式匹配成功的情况下,尽可能多的匹配,也就是所谓的“贪婪”,就是符合正则表达式规则的字符(串),有多少就选择多少,除非没有了。非贪婪模式,就是在整个表达式匹配成功的情况下,尽可能少的匹配,就是只要匹配找到一个符合表达式的字符(串)就可以了,至于还有没有符合表达式规则的就不理会了,即使有也不会选择。匹配优先量词后加上“?”,即变成属于非贪婪模式的量词。优先量词包括:“m,n”、“m,”、“?”、“*”、“+”。常用的正则表达式语法及作用描述见表 2.1。表 2.1 部分正则表达式语法字符作用描述转义符号。为了标记一个特殊字符、原义字符、向后引用或一个八进制转义符。匹配输入字符串的开始位置。也有“非”的意思。$匹配行结束符。*匹配零次或多次。+匹配一次或多次。?匹配零次或一次。当该字符紧跟在优先量词 (*, +, ?, n, n, n,m) 后面时,该模式是非贪婪模式。.匹配除 n 之外的任何单个字符。如果要匹配n 字符,可使用.n。 匹配括号中的任何一个字符。x反向字符范围。匹配不是x的任意字符。u4e00-u9fa5匹配中文字符。uFF00-uFFFF匹配全角符号。-?d+.?d*匹配带符号的浮点数。u0391-uFFE5匹配双字节字符,包括汉字和符号。2.4 元数据库Metadata,元数据5是“关于数据的数据”,即元数据是关于数据的组织、数据域及其关系的信息。元数据是数据转换的核心,其作用体现在:首先,实现数据转换所需要的各种规则必须要用元数据来定义;其次,用来表达数据转换的次序流程;最后,为保证数据质量而定义的各种“质量特征”也需要来描述。根据元数据发挥的作用,可将其划分为“数据”和“数据处理规则”两类。其中“数据”主要用来描述数据源中有什么数据以及数据之间的关系,包括数据类型、关系表结构与属性和目标数据库的层次等技术性的细节,因此也成为技术元数据;“数据处理规则”定义了数据集成过程中所有的数据处理规则,包括数据清洗规则、字段的映射、数据转换以及数据质量特征的描述规则,是数据集成工具开发的指导原则,也称为业务元数据。数据集成中的元数据主要根据转换步骤的功能所需而设计:定义该步骤所需各种数据源的信息,包括所在计算机平台、数据结构、使用该数据源的处理过程等。定义数据抽取的规则,以便从每个数据源中抽取所需的数据。定义数据的转化规则、装载到哪个步骤的哪个数据库模式的某个表中。集成任务的元数据包括数据源信息、源字段信息、转换规则信息、目标字段信息等。其中源字段信息可能包括一个或零个或多个字段信息,在包括多个源字段时,还存在先后顺序,这要根据具体的抽取任务和转换规则而定。转换规则可能包含零个、一个、或多个转换规则信息,这个根据用户设置而定,如果是多个转换规则时,还存在各个转换规则先后顺序的制约。对于这两种复杂情况,采用分阶段的方法一个阶段一个阶段的执行,然后作为元数据存储到元数据库中。在识别数据源时需要将数据源文件名和文件格式类型存入元数据中,以便文件的识别。用户选择定义的源数据库表与目标数据库的目标表的映射关系以及数据列之间的变换处理,这些信息都需要存储到元数据库中。最后确定的映射关系则会以树型结构存入元数据库映射关系表(Mapping)中。元数据存储在临时数据缓冲区,转换过程为:首先提取数据源的各种信息,将其写入到元数据库中心当中,转换程序会自动读取元数据当中的默认规则,调用转换函数和存储过程,以及字段的信息供用户选择进行字段的选择和数据类型的转换等,生成本次转换任务的信息一并作为元数据保存到转换文件ktr中。3 Kettle系统结构简介3.1 Kettle系统结构在第一章中,已经对kettle在数据转换方面的功能做了简单的讲述。本小节中主要介绍kettle的整体结构,以及转换在总体结构所扮演的角色。从数据转换的角度来讲,kettle大致的系统结构如图 3.1所示。图 3.1 kettle系统结构从图中可以看出,kettle的转换功能包括数据抽取、数据转换、数据加载((Extract,Transform,Load))三个方面。数据抽取:一般抽取过程需要连接到不同的数据库源,以便为随后的步骤提供数据。这一部分看上去简单而琐碎,实际上它是ETL解决方案成功实施的一个主要障碍。数据加载:将数据加载到目标系统的所有操作。数据转换:在抽取和加载之间的,任何对数据的处理过程都是转换。这些处理过程通常包括移动数据、根据规则验证数据、数据内容和数据结构的修改、集成多个数据源的数据、根据处理后的数据计算派生值和聚集值。Kettle从多个异构的数据源中,依据一定的抽取规则获取数据,模块对象化后加载到缓存中,待数据转换模块进一步处理。在数据转换模块中,将数据从数据缓存中取出,按照设定的转换规则处理数据,处理完毕后再次将数据存入下一下数据缓存中。数据加载模块从数据缓存中读取数据,将数据按照定义的数据格式存入到目的数据源中,完成数据转换的过程。如果再进一步划分,数据抽取、数据转换、数据加载这三个模块也分别是由许多个功能组成的。每一个功能是实现转换的一个步骤。这些功能不管是后面扩展的还是系统本身集成的功能,本质上都是插件,它们的管理方式和运行机制是相同的,只是插件的说明有所不同而已。从插件的角度来看kettle,它的系统架构又有所不同。3.2 kettle插件结构3.2.1 Kettle的插件扩展机制插件是一种按照统一的预定义接口标准编写的程序,应用程序在运行时通过接口标准对插件进行调用,用以扩展和加强应用程序的功能。插件也被称为plug-in、plugin或是plug inError! Reference source not found.。插件的建立不会修改程序的主体,但是它依赖于程序支持的系统平台,不能脱离平台单独运行。任何人都可以利用公用的插件接口自己编写插件来增加新的功能,也就是实现“即插即用”的软件开发。“平台+插件软件结构”是将一个待开发的目标程序分为两部分,一部分为程序的主体或主框架,另一部分为功能扩展或补充模块,可定义为插件。Kettle也是“平台+插件结构”的程序。从插件的角度进行分类,kettle可分为平台和各类插件两部分。Kettle的插件系统架构图如图 3.2所示。图 3.2 kettle插件系统架构其中kettle平台是整个系统的基础,包括UI、插件管理、元数据管理和数据集成引擎。UI表示的是Spoon的界面,利用xulError! Reference source not found.文件的设置实现菜单栏和工具栏的定制,显示插件界面的接口元素。元数据管理引擎主要管理ktr、kjb或者元数据库,插件通过该引擎获取基本的元数据信息。插件管理引擎主要负责插件的注册。数据集成引擎负责调用插件,并返回相应信息Error! Reference source not found.。Kettle是众多扩展点和扩展共同组成的集合体。就像电源接线板就是一种“扩展点”,可以在它上面插入很多的“扩展”,也就是其他电线的插头。从图 3.2中可以看出,Kettle的扩展点有:step、job entry、Database、Partioner、debugging插件,在这里我们只讲step(步骤)插件和database插件。为了方便理解步骤插件的结构,在下面将细分解释。Kettle的步骤插件扩展接口10和Database扩展接口分别见表 3.1和表 3.2。表 3.1 step扩展接口Java接口基类主要功能StepMetaInterfaceBaseStepMeta存储step设置信息验证step设置信息序列化step设置信息提供获取step类的方法StepDialogInterfaceBaseStepDialogstep属性信息配置窗口StepInterfaceBaseStep处理rowsStepDataInterfaceBaseStepData为数据处理提高数据存储表 3.2 Database扩展接口Java接口基类主要功能DatabaseInterfaceBaseDatabaseMeta访问各类数据库其中,BaseStep实现了StepInterface接口类的方法,是各种step步骤具体实现类的基类,完成了公用的处理函数,但是行处理函数processRow()的具体实现在StepBase的子类中,也就是step步骤插件的实现类中。StepBase的主要成员包括步骤输入成员对象inputRowSets和输出成员对象outputRowSets。插件实现类每次调用getRow函数从inputRowSets中取出一行数据,调用putRow函数向outputRowSets中写入一行数据。在基类BaseStep中,统一调用子类processRow函数的核心代码为:while (stepIcessRow(meta, data)& !stepInterface.isStopped();processRow( )函数一般实现过程是:调用基类的getRow函数从队列中读取一行数据,根据设置的元数据对一行数据进行相应的处理,处理之后调用基类的putRow函数将数据保存到输出队列outputRowSets中(即next step的inputRowSets)。3.2.2 步骤插件的组成1) 插件组成的四个类在kettle中,除了步骤的基类外,其他的转换步骤插件都是具有共同点的。从图 3.2中也可以看出,步骤插件包括插件的处理和UI。下面的四个类构成了kettle的步骤插件,每一个类都有其特定的目的及角色。l 步骤类:一般命名如TemplateStep 。步骤类实现了StepInteface接口,继承于基类BaseStep。在转换运行时,它的实例将是数据实际处理的位置,processRow函数在此类中实现。每一个执行线程都表示一个此类的实例。l 数据类:一般命名如TemplateStepData。数据类用来存储数据,继承于基类BaseStepData。当插件执行时,对于每个执行的线程都是唯一的。执行时里面存储的东西主要包括数据库连接、文件句柄、缓存等等其他东西。l 元数据类:一般命名如TemplateStepMeta。元数据类实现了StepMetaInterface接口,继承于基类BaseStepMeta。它的职责是保存和序列化特定步骤实例的配置,在我们这个例子中,它负责保存用户设置的步骤名称和输出字段的名称。l 对话框类:一般命名如TemplateStepDialog。对话框类实现了该步骤与用户交互的UI界面,继承于基类BaseStepDialog。它显示一对话框,通过对话框用户可以自己的喜好设定步骤的操作。对话框类与元数据类关系非常紧密 (元数据类可以追踪用户的设置)。2) 插件显示所需的配置除了实现插件的组成部分外,还需要将插件显示在主界面中,这样才能使用插件。Kettle的步骤插件的说明信息都在/src/kettle-steps.xml配置文件中,插件说明信息中包括描述信息、类名(包括package,反射用)、父级目录(Spoon左侧栏目录)、提示信息和图片信息。只有在配置文件中正确设置插件的信息,插件管理模块才能在运行时正确显示、成功调用插件,实现插件的功能。配置文件中每个插件信息的格式都很类似,下面以全角转半角插件的配置信息为例进行说明介绍。 i18n:org.pentaho.di.trans.step:BaseStep.TypeLongDesc.FulltoHalf org.pentaho.di.trans.steps.fulltohalf.FulltoHalfMeta i18n:org.pentaho.di.trans.step:BaseStep.Category.Transform i18n:org.pentaho.di.trans.step:BaseStep.TypeTooltipDesc.FulltoHalf ui/images/fulltohalf.png 插件信息的解释为:ID:在kettle插件中必须全局唯一,因为被kettle序列化了,所以不要随便改变。Description:插件描述,显示在树形菜单里面。Classname:元数据类。Category:插件显示的父目录,输入、输出、转换等。Tooltip:树形菜单中,鼠标滑过的时候显示的提示信息。Iconfile:kettle插件中显示的照片,必须是png格式。需要说明的是,Description和Tooltip的文字描述需要在步骤基类的语言包org.pentaho.di.trans.step.messages的文件中具体赋值。3) 插件信息的文字描述成功将插件显示到主界面的菜单栏后,还需要注意的就是插件自身界面的显示了。不同的计算机系统可能支持不同的字符编码集,为了防止这种情况导致的文字乱码,Kettle使用国际化(i18n)方式编程。支持在不修改程序内部代码的情况下,能根据不同语言及地区显示相应的界面。Kettle中包括错误提示和界面显示在内的所有文字描述均由messages_*.properties提供。每个插件都会创建一个相应的语言包,用于国际化插件中的文字说明。Kettle中,用于汉化的文件一般命名为messages_zh_CN.properties。3.2.3 步骤插件间的通信一个数据转换任务需要多个步骤插件组合而成,例如图 3.3所示,这是一个转换示例,其中包括数据抽取(Excel输入)、数据转换(日期规格化、单位换算、保留数字)和数据加载(表输出)。如何控制步骤插件间的通信是一个重要的问题。图 3.3 转换步骤示例转换的每一个步骤都会对应一个独立的线程,线程之间通过RowSet相互进行通信。RowSet的实现类,负责步骤之间的通信,rowset对象即使前一个step的成员也是后一个step的成员,访问线程是安全的。步骤之间的通信机制如图 3.4所示。图 3.4 步骤之间的通信机制RowSet类中包括源step,目标step和由源向目标发送的一个rowMeta和一组data。其中rowMeta中存储了每列数据的名称和类型,data数据是在以行为单位的队列(queArray)中。一个RowSet作为源步骤 的outputrowsets的一部分,同时作为目标步骤的inputRowsets的一部分。源步骤每次调用基类的putRow()函数向队列中写入一行数据,目标步骤调用getRow()函数从队列中读取一行数据。步骤与步骤之间是以行为单位进行数据的处理,所以需要每一行数据的元数据,至少包括数据的类型、名称,还可能包括字段的长度、精度等内容。每个步骤的行元数据都会保存在.ktr文件中,所以可以根据步骤名称从TransMeta对象中获取元数据。TransMeta定义了一个转换,并提供存储和加载XML文件等方法。Private List steps;/存储每一步组件元数据Private List hops;/存储组件之间的连接信息3.3 本章小结本章中主要从数据转换和插件的角度分别介绍了kettle的系统结构框架。Kettle在数据转换功能上分为数据抽取、数据转换和数据加载三个模块,而从插件的角度看待kettle的转换部分,每一个功能的本质都是插件。项目利用的是kettle的转换功能,所以本章中还详细说明了插件的构成以及插件间实现通信的方法。4 数据库转换工具的设计与实现4.1 转换的选择与不足根据数据转换工具的实际需求,选择了kettle部分的转换步骤。具体的功能如下。1) 数据抽取:Excel输入、文本文件输入、XML输入。2) 数据转换:值映射、去除重复记录、合并字段、合并记录、增加常量、增加序列、字段选择、字符串剪切、字符串替换、字段拼接、拆分字段、排序记录、行扁平化、行转列、计算器、过滤记录、合并连接11。3) 数据加载:Excel输出、XML输出、文本文件输出、表输出。除了上述的转换步骤外,和课题的目的相比,kettle还有不足之处,首先缺少数据源word文件。为了分析kettle功能的不足,使用的测试数据库是一个军事武器管理平台的后台数据库,其中的数据量多达万行,该数据库的数据转换时遇到的问题基本具有常规性。虽然kettle中可以通过generic database的连接方式连接DM数据库,但是不方便,需要手工输入连接的URL和驱动类名,数据转换工具的设计中可以简化DM数据库的连接配置。全半角转换问题。全半角的问题是中国特有的问题,在kettle的使用中并没有发现能解决这个问题的功能插件,所以数据转换工具中可以增加全半角转换的功能。日期格式不正确。Kettle有数据校验的功能,其中包括对日期的校验。但这仅仅也是一个校验,并不能对不合法的日期进行修正。例如日期【1986】、【1956/12】,可以通过校验得知其存在问题,但是并不能解决问题,数据库还是需要这个数据。所以数据转换工具中可以增加对不合法日期进行规格化的功能。字符串操作问题。在kettle中有一个“字符串替换”功能插件,提供正则表达式方式替换字符串,对于常见的数字提取尤其的有用。但是需要手工输入正则表达式,不便于使用。可以将提取数字的正则表达式封装在代码内部。提取数字的时候,如果字符串中有多个数值,那么如何提取到正确的数字是一个问题。可以先清理部分的字符串。数据转换工具中可以增加按照位置删除字符串的功能。单位换算问题。Kettle中有“计算器”的功能,可以实现简单的计算,实现单位的换算。但是这是在一个字段的单位一致的情况下才可以实现的,如果数据最初是带有单位的数值,那么如何实现单位的换算呢?这种情况的单位换算需要增加。根据这些问题的分类,最终增加了几个插件:word文件输入、word文件输出、全半角转换、日期规格化、保留数字、字段清理、单位换算。还从通用连接方式中分离出来了DM数据库的连接。它们在kettle插件系统架构中所处的位置如图 4.1所示。图 4.1 新增功能在系统中的位置4.2 新增插件word输入Kettle自带的文本文件输入可以实现word文件的输入,以word文件作为数据源,只是数据是采用文本形式存储在Word文件中的。为了区分和增加word输入的功能,故新增了word输入的插件。在该插件的设计中,数据是以word表格形式存储的。利用POI组件对word表格进行操作。要真正实现word输入插件的功能,必不可少的过程是:首先是插件管理模块进行插件的注册;然后查找插件信息将其显示在主界面的左侧栏中,便于调用;其次调用word输入插件,进行元数据的设置;最后是在转换执行时,实例化word输入的线程,能够根据设置的规则从word文件表格中正确抽取数据。下面分别对每一步的实现进行说明。4.2.1 Word输入插件的注册及显示在上一章节中已知,每个步骤插件的配置信息都在/src目录下的文件kettle-steps.xml中。第一步,在kettle-st
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 篮球赛活动总结
- 园林喷灌系统讲解课件
- 度假酒店商业空间设计
- 2025地铁站厅制作安装合同
- 2025标准设计印刷合同范例
- 2025房产交易居间合同
- 2025x物业管理有限公司物业管理服务合同
- 小学生公共安全教育主题班会
- 幼儿园体验与探究课程开展汇报
- 2025电影配音录制委托合同
- 出租羊场合同范例
- 任务5 制作学院网站导航条
- 卫星导航定位技术与应用知到智慧树章节测试课后答案2024年秋南京工业大学
- 开封市第二届职业技能大赛无人机装调检修项目技术文件(国赛项目)
- 开题报告:高等职业院校双师型教师评价指标体系构建研究
- 医疗救助政策
- 浙江省宁波市余姚市2024年中考英语模拟试题(含答案)
- 服务质量保障措施方案
- 机场能源管理
- 高速公路路基及土石方工程施工方案与技术措施
- 技能人才评价新职业考评员培训在线考试(四川省)
评论
0/150
提交评论