`
kongshanxuelin
  • 浏览: 928094 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

通用数据抽取系统

阅读更多

基于文件,Web Service服务,数据库数据之间的数据导入与导出,全部的数据交换过程通过XML配置文件来完成,并且提供XML配置文件客户端方便编写,这是我在做项目过程中因为频繁处理数据交换而做的一个小系统,希望对大家有用

<!---->

数据抽取配置文件说明(初稿)

<!---->1.  <!---->定义数据源

在根节点 <extra-config> 下定义 1 N 个数据源信息,而数据源的类型包括以下三种 , 则对应的属性设置也有所不同,这是数据抽取的基础,必须设置准确无误,如下:

<!---->Ø         <!---->JDBC 连接

这是最普遍的使用方式 , 所有的参数设置根据名称也一目了然,具体的说明如下:

name: 数据源名称

connection-driver :数据库驱动

username :数据库登陆用户名(可加密)

password :密码(可加密)

url :数据库的 URL 连接字符串

dbtype :数据库类型,目前此参数做保留用,留待以后异构数据库之间抽取数据时使用,建议你将此参数填上,这样有利于结构清晰,可填的数据库类型为: ORACLE,SQLSERVER,DB2,ACCESS PI

<!---->Ø         <!---->XML

这种数据源的设置主要用在源数据源为 XML 文件的情况,则相应的参数意义有所变化,如下:

name: 数据源名称

connection-driver :填入常数 XML

username :可不填,无效

password :可不填,无效

url XML 文件所在的目录

dbtype :填入常数 file

<!---->Ø         <!---->WEB SERVICE

这种数据源的设置主要用在向外部 INTERNET 提供内部服务或者不能通过 JDBC 直连的情况,考虑到要绕过防火墙,所以使用目前流行的 WEB SERVICE 技术,具体的参数设置如下:

name: 数据源名称

connection-driver WS 服务端的 JDBC 的驱动字串

username WS 服务端的 JDBC 连接的用户名(可加密)

password WS 服务端的 JDBC 连接的密码(可加密)

url WS 服务端的 JDBC 连接的 URL

endpoint SOAP 所在路径

dbtype :填入以 WS: 或者 WP: 开头,后跟数据库类型的字符串,如 WS:ORACLE 或者 WP:ORACLE ,其中 WP 开头的是 WEB SERVICE 抽取数据的分页形式,以便抽取大记录集的情况。如果以 WP :开头,则应该写入分页的每页记录数,缺省为 100 ,如输入: WP:ORACLE:100

 

WEB SERVICE 如果发布到应用服务器上,请参看附录。

 

特别注意: XML WEB SERVICE 的数据源设置方式只针对源数据源的设置。如果你将目的数据源设置为这两种方式,系统将退出数据抽取操作。

 

<!---->2.  <!---->定义任务

定义 1 N 个任务,如下:

    <task id="ID1" name=" 测试 1" srcds="EPDSM" desds="FC">

<etra-class class="classa"/>   

<etra-class class="classb"/>

</task>

约定:在任务下可以定义 1 N 个实现类,如以上语句定义了两个实现类。 Srcds desds :源数据源和目的数据源的名称,与“定义数据源”中的名称要对应。 Name :任务名称。 Auto: 是否自动,其中 1 表示自动,其他手动。注意:目前可用的 JDBC 为两种,具体的配置方法看实例。其中 INET 用于大数据集的抽取, INET ORACLE 驱动普遍速度快 8 10 倍,一般情况下建议使用 INET 驱动。

<!---->3.  <!---->定义实现类

   <etra-class name="classa" type="longshine.extra.GenEtra">

<!- 该模块将被处理 - à

            <etra-module enable="true">

                    <etra-class-param name="from" value="SELECT 语句 "/>

                    <etra-class-param name="to"  value="INSERT 语句 "/>

                    <etra-class-param name="pk"  value="INSERT 语句 "/>

            </etra-module>

         <!- 该模块将被处理 - à

            <etra-module>

                    <etra-class-param name="from" value="SELECT 语句 "/>

                    <etra-class-param name="to"  value="INSERT 语句 "/>

                    <etra-class-param name="pk"  value="INSERT 语句 "/>

            </etra-module>

         <!- 该模块将不被处理 - à

            <etra-module enable=”false”>

                    <etra-class-param name="from" value="SELECT 语句 "/>

                    <etra-class-param name="to"  value="INSERT 语句 "/>

                    <etra-class-param name="pk"  value="INSERT 语句 "/>

            </etra-module>

  </etra-class>

约定:在实现类下可以定义 1-N 个实现类的抽取模块,

其中 name :定义实现类名,与任务中的类名对应, type :定义实现类的全名,如果你是简单的数据抽取应用,如记录集到记录集的抽取,可以直接写成 longshine.extra.GenEtra ,如果涉及到复杂的数据抽取,必须实现写实现类,如负荷预测库的实现类 ComEtra 类。

 

Enable :表示该模块是否在当前抽取中可用,默认为可用。

 

etra-class-param :定义参数,这里可以定义三种类型的参数: from,to,pk PK 参数可缺省不定义,这个参数仅仅用在需要对已存在的记录进行更新操作时要用到,其中 pk 参数填入的值为目的数据库对应的表的关键字字段,如果为多个,则用 , 隔开。

除非有必要一定要这么抽取数据,否则我们不建议你定义这个参数,定义这个参数后,系统的抽取进度将大大减慢。

WS 方式下, from 参数的定义可以使用 ID ,这个 ID 通过 wssqls 段来寻找相应的 SQL 语句,这样可以在 WS 发布方和客户端的 SQL 的分离和透明,定义 from value 时,在这种情况下,一定要以 ID: 打头,并且区分大小写。

特别注意 : 如果你需要进行如 create table DDL 语句 , 并且不需要用到源连接 , 则你无须定义 from 属性 , 系统会自动据此来执行相应的 DDL 语句。此功能只适用于 GenEtra 实现类。并且是非 web service 方式。

 

如果数据源为 XML 文件,则 FROM 属性有所变化,如不为空,则根据执行的文件名执行,如 H_2005051114 ,则数据直接从这个 XML 文件读取,而后按间隔的指定时间(如每隔一个小时)读取下一 XML 文件, H_2005051115 H_2005051116 ……,如为空,则按当前的小时读取,接下来按指定的时间间隔读取,这样的处理方式是为了和先前数据源为数据库的方式兼容。请特别注意:如果数据源为 XML ,则实现类的模块定义必须为 1 个。

 

<!---->4.  <!---->其他注意事项

<!---->Ø         <!---->在进行数据抽取前,必须保证数据源定义的正确,这里包括源数据源和目的数据源都必须能得到正确的数据库驱动加载程序。

<!---->Ø         <!---->由于 XML 语法本身的关系,在书写 SQL 语句中,务必要注意在书写类似 < 或者 > 符号时,必须书写成   &lt; &gt; 方式。具体的特殊语法可参看任何一本XML 语法规范书。

<!---->Ø         <!---->XML 文件必须严格按照指定的方式编写,请在抽取数据之前仔细检查 XML 文件的正确性。

<!---->Ø         <!---->务必注意任务中定义的实现类必须在 classes 块中对此实现类进行定义,否则系统会出错。

 

建议:使用我们提供的 data.xml 检验工具小软件来书写该文件,并按 F8 快捷键进行文件的检验,检验通过后再进行数据抽取操作,特别注意:检验通过的 data.xml 并不保证能正确执行数据抽取操作,这还要取决于你书写的 SQL 的正确性。

 

 

<!---->5.  <!---->详细实例

该实例涵盖了基本所有的数据抽取功能,包括所有的数据源的配置方法,实现类定义方法,任务定义方法等

 

<?xml version = '1.0' encoding = 'GBK'?>

<extra-config>

<data-sources>

 

<!--ORACLE JDBC -->

  <data-source name="FC" connection-driver="oracle.jdbc.driver.OracleDriver"

  username="fc" password="fc" url="jdbc:oracle:thin:@172.20.112.148:1521:epcrm"

  dbtype="ORACLE"/>

  <data-source name="EPDSM" connection-driver="oracle.jdbc.driver.OracleDriver"

  username="epdsm" password="epdsm" url="jdbc:oracle:thin:@172.20.112.148:1521:epcrm"

  dbtype="ORACLE"/>

  <data-source name="CESHI1" connection-driver="oracle.jdbc.driver.OracleDriver"

  username="epdsm" password="epdsm" url="jdbc:oracle:thin:@172.20.112.148:1521:epcrm"

  dbtype="ORACLE"/>

  <data-source name="CESHI2" connection-driver="oracle.jdbc.driver.OracleDriver"

  username="epdsm" password="epdsm" url="jdbc:oracle:thin:@172.20.112.148:1521:epcrm"

  dbtype="ORACLE"/>

 

<!-- INET JDBC 超过百万的数据抽取一定要用这个驱动 -->

  <data-source name="SQLSERVERTEST" connection-driver="com.inet.tds.TdsDriver"

  username="dlyx" password="dlyx" url="jdbc:inetdae7:172.20.0.200:1433?database=fktl"

  dbtype="SQLSERVER"/>

  <data-source name="INETORADES" connection-driver="com.inet.ora.OraDriver"

  username="fc" password="fc" url="jdbc:inetora:172.20.112.148:1521:epcrm"

  dbtype="ORACLE"/>

  <data-source name="INETORASRC" connection-driver="com.inet.ora.OraDriver"

  username="epdsm" password="epdsm" url="jdbc:inetora:172.20.112.148:1521:epcrm"

  dbtype="ORACLE"/>

 

<!--XML 文件的数据源的配置 -->

<data-source name="FXML" connection-driver="xml" username="username"

password="xml" url="newdata\datah" dbtype="file"/>

 

<!--WEB SERVICE 的数据源的配置 -->

<data-source name="WSTEST"

               connection-driver=""

                username=""

               password=""

               url="http://172.20.99.101:9001/WS_FC-extra-context-root/LSGetRs"

               dbtype="WS:ORACLE"/>

</data-sources>

<etra-classes>

<!-- 一般的数据抽取实现类定义 -->

   <etra-class name="genclass" type="longshine.extra.GenEtra">

            <etra-module enable="true">

                    <etra-class-param name="from"

                    value="select dept4_id,custor_id,custname,custaddr,eptype2_id,volt_id,

trade4_id,capacity,produce_mode from dw_f_custor where capacity>315

and dept4_id is not null"/>

                    <etra-class-param name="to"

                    value="insert into cust_info(compno,custid,name,address,eptype_id,

volt_id,trade_id,capacity,produce_mode)values(?,?,?,?,?,?,?,?,?)"/>

            </etra-module>

  </etra-class>

 

<!--WEB SERVICE 的实现类定义 , 其中 SQL 传递的是 ID -->

  <etra-class name="wsclaassbyid" type="longshine.extra.GenEtra">

       <etra-module>

                    <etra-class-param name="from"

  value="ID:id1"/>

                    <etra-class-param name="to"

   value="insert into temptbl (str) values(?)"/>

<!— 定义的 line_info 表的关键字字段,这样对存在表中的记录将做更新操作 -->

        <etra-class-param name="pk" value="compno,lineid"/>

          </etra-module>

<!--WEB SERVICE 的实现类定义 -->

  <etra-class name="wsclass" type="longshine.extra.GenEtra">

       <etra-module>

                    <etra-class-param name="from"

  value="select substation_id,line_no,line_name,line_cap from opc_line_info"/>

                    <etra-class-param name="to"

   value="insert into line_info(compno,lineid,name,cap) values(?,?,?,?)"/>

<!— 定义的 line_info 表的关键字字段,这样对存在表中的记录将做更新操作 -->

         <etra-class-param name="pk" value="compno,lineid"/>

          </etra-module>

<!—DDL 语句定义 -->

          <etra-module enable="true">

                    <etra-class-param name="to"

                    value="create table a_test(varchar(20))"/>

          </etra-module>

  </etra-class>

 

<!-- 复杂实现类的定义 -->

  <etra-class name="comclass" type="longshine.extra.ComEtra"/>

 

<!--XML 文件为数据源的实现类定义 -->

<etra-class name="xmlclass" type="longshine.extra.XmlEtra">

<etra-module enable="true">

  <etra-class-param name="from" value="h_2005051114"/>

  <etra-class-param name="to" value="insert into DD_DLB(XLBH,RQ,FDL,GDL,PDL)VALUES(?,?,?,?,?)"/>

</etra-module>

</etra-class>

 

</etra-classes>

 

<tasks>

    <task id="genTask" name=" 测试 1" system=" 一般任务 " srcds="EPDSM" desds="FC">

      <etra-class class="genclass"/>

     </task>

    <task id="comTask" name=" 测试 2" system=" 复杂任务 " srcds="EPDSM" desds="FC">

      <etra-class class="comclass"/>

    </task>

    <task id="WSTask" name=" 测试 3" system="WEB SERVICE 任务 " srcds="EPDSM" desds="FC">

      <etra-class class="wsclass"/>

    </task>

    <task id="XMLTask" name=" 测试 4" system="XML 任务 " srcds="EPDSM" desds="FC">

      <etra-class class="xmlclass"/>

    </task>

</tasks>

<wssqls>

  <sql id=”id1” value=”select dept from tj_aa_bm”/>

  <sql id=”id2” value=”select custor_id from dw_f_custor”/>

</wssqls>

</extra-config>

 

<!---->

 

 

分享到:
评论
8 楼 volunteer521 2015-06-16  
楼主,以下的引用类没有对应的jar包,麻烦共享以下,谢谢!
import longshine.data.DataUtils;
import longshine.data.ETLConstant;
import longshine.data.ETL_Func;
import longshine.data.ETL_Obj;
7 楼 sure_1987 2012-02-15  
请问楼主,假如我现在要分别从公安和民政两个系统中抽取数据到我的ODS中,能否用这个通用数据抽取系统实现呢
6 楼 springjj 2009-03-15  
请问楼主怎么测试呢?或者说怎么来部署它?
5 楼 kongshanxuelin 2009-03-12  
脑袋雷劈的 写道
很好,和我的需求很像。想问一下楼主,怎么实现异构库之间的数据抽取,例如IBM DB2到Oracle之间的数据抽取。

OK的,只要select,insert语句的数据能对应起来就行,数据源可以来源于任何数据库或者文件,WebService
4 楼 脑袋雷劈的 2009-03-12  
很好,和我的需求很像。想问一下楼主,怎么实现异构库之间的数据抽取,例如IBM DB2到Oracle之间的数据抽取。
3 楼 kongshanxuelin 2008-10-06  
guwei0530 写道

看了半天也没能明白,配置抽取任务生成的xml文件到底是应该按照日期、小时方式命名,还是就是data.xml?

整个配置文件是通过data.xml来进行的,里面主要配置数据源,实现类(如果为了实现复杂数据抽取的时候,一般也可不定义),任务(定义抽取任务,如每隔多长时间在什么时候执行),程序就会自动按任务去执行数据抽取了
2 楼 guwei0530 2008-10-05  
看了半天也没能明白,配置抽取任务生成的xml文件到底是应该按照日期、小时方式命名,还是就是data.xml?
1 楼 guwei0530 2008-10-05  
说实话,配置好复杂。最好有个良好的可操作界面就方便使用了

相关推荐

    通用全量抽取.rar

    1. `通用数据导出.kjb`:这是Kettle的工作流文件,可能包含了整个数据抽取过程的流程控制,如启动、结束、错误处理等。工作流可以调用一个或多个转换,并按照预定义的顺序执行它们。 2. `通用数据导出.ktr`:这是一...

    一种通用的多数据库间数据抽取方法及应用.docx

    ### 一种通用的多数据库间数据抽取方法及应用 #### 摘要解析与扩展 在当前信息化时代,企业或组织通常拥有多个不同类型的数据库系统(即异构数据库),这些数据库可能来自不同的供应商,有着各自的数据结构和访问...

    ETL数据增量抽取方案.zip

    9. **错误处理和重试机制**:在Java实现ETL过程中,必须考虑到数据抽取可能出现的错误,如网络中断、数据不一致等。实现错误处理和重试机制是保证ETL稳定运行的关键。 10. **性能优化**:为了提高数据抽取效率,...

    基于CWM的企业元数据集成中元数据抽取与导出研究 (2008年)

    ### 基于CWM的企业元数据集成中元数据抽取与导出研究 #### 一、引言 近年来,随着信息技术的快速发展,企业对于数据的需求日益增加,如何有效地管理和利用这些数据成为了企业管理的重要议题之一。元数据作为描述...

    异构数据源通用数据转换工具的设计与实现(幻灯片报告

    本文将深入探讨一种针对异构数据源的通用数据转换工具的设计与实现,这是一份编程资源,旨在解决复杂的数据整合问题。 首先,我们要理解异构数据源下的数据转换问题。在大数据时代,数据可能来自各种不同的系统,如...

    (源码)基于Python的API关系抽取系统.zip

    本项目是一个基于Python开发的关系抽取系统,旨在通过API接口从文本数据中提取实体间的结构化关系信息。系统采用Bootstrapping方法,能够自动识别和提取指定关系的三元组实体。 ## 项目的主要特性和功能 三元组...

    【多易教育】Titan数据运营系统-v.6.2.pdf

    数据采集阶段可能会用到flume(分布式日志数据汇聚)和sqoop(离线批量抽取数据库),而实时数据捕获则可能会使用canal(数据库数据逐条监听抽取)。前端存储系统则可能包括HDFS、MySQL、Redis以及HBase或Elastic...

    基于机器学习的多语言文本抽取系统实现.pdf

    为了解决现有的信息抽取系统局限于特定应用、特定算法和单一语言的问题,文章提出了一个通用的多语言信息抽取框架。该框架具备以下特点: 1. **通用性**:系统设计考虑了多种信息抽取任务的需求,可以适应不同的...

    易得网站数据通用采集系统.7z

    《易得网站数据通用采集系统》是一款用于自动化获取和处理网络数据的专业工具,它能够帮助用户从各种网站中批量提取所需信息,适用于市场研究、数据分析、SEO优化等多个领域。这款系统的核心在于其强大的数据抓取...

    基于元数据通用查询

    2. **元数据捕获**:系统需要有能力从各种数据源自动或手动抽取元数据,这可能涉及到ETL(提取、转换、加载)过程。 3. **元数据整合**:不同来源的元数据可能格式不一,需要进行统一和标准化,以便于查询和分析。 ...

    最全数据中台相关规范.

    * 数据抽取:从源系统中抽取数据 * 数据转换:将抽取的数据转换为目标系统所需的格式 * 数据加载:将转换后的数据加载到目标系统中 ETL 设计的工具包括 datax、streamsets 等,同步方式包括全量同步和增量同步两种...

    基于行块分布函数的通用网页正文抽取

    能不能高效、准确的将一个页面的正文抽取出来,并做到在大规模网页范围内通用,这是一个直接关系上层应用的难题。 采用建 DOM 树的方法虽然直观也有效,但建树和搜索是多项式时间,且饱受病态 HTML 的痛苦;采用机器...

    基于深度学习的关系抽取系统实现.pdf

    在关系抽取系统设计时,远监督方法被用于构建适合各领域的关系列表的数据集信息抽取方法。远监督方法利用已有的知识库或数据库与文本进行对齐,尽管这种方法可能会引入噪声,但它极大地减少了人工标注数据的需求,...

    通用抽签系统 v1.11.zip

    支持记忆功能,在下次重新进入系统时,恢复到上次的抽签状态,已抽取的不会被重复抽取。 用户分为三个等级,每个级别有不同的权限,每个用户登录、退出、重要的操作等均被记录到日志中,所有的操作都有可追溯性,...

    SSD.zip_Web Service 数据_service_service delphi_xml_抽取

    在IT行业中,数据抽取是一项至关重要的任务,它涉及到从各种数据源获取信息并转换为统一格式,以便进一步处理、分析或存储。在这个“SSD.zip”压缩包中,重点是Web Service、服务(Service)、Delphi编程语言以及XML...

    基于行块分布函数的通用网页正文抽取算法1

    【基于行块分布函数的通用网页正文抽取算法】 网页正文抽取是信息检索领域的一个核心问题,它涉及到如何从复杂的HTML文档中准确、高效地提取出主要内容。正则表达式可以处理特定格式的页面,但在处理多样化的HTML时...

Global site tag (gtag.js) - Google Analytics