`
kongshanxuelin
  • 浏览: 913170 次
  • 性别: 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  
说实话,配置好复杂。最好有个良好的可操作界面就方便使用了

相关推荐

    基于语义的通用数据抽取方法 (2010年)

    为便于数据复制以及共享,在进行数据抽取时,往往既要使语义上相关的数据一起抽取,又要使得抽取的数据尽量逻辑上独立。将多根树作为语义上相关、逻辑独立的数据集,给出了关系数据抽取方法并进行了实现。在Oracle中...

    通用抽签系统 v1.11.zip

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

    WDO 通用信息数据采集 v0.9

    技术特点:ADO近似的程序接口,程序员广为熟知的ADO操作方式,易于理解掌握和方便使用。纯ASP(VBScript)代码,任何ASP空间支持,有无数据库均可。...VBS“正则表达式”,实现对采集数据的“精确”匹配抽取

    数据统计和分析论文的matlab源代码

    数据仓库架构建立后,以数据仓库结构为目标对日志源进行ETL, ETL过程基于Hadoop分布式计算框架,摒弃日志文件中的多余信息,将需要的数据抽取、计算,并装载入Hive数据仓库。 随后基于Hive数据仓库及其提供的数据查询...

    北京中科信软数据仓库培训

    决策支持系统的数据抽取流程所带来的数据仓库技术 使用数据仓库技术的原因 如何使用数据仓库来加速商业决策和提高决策的质量 中间休息十分钟 数据仓库的概念和术语 通用的,被广泛接受的数据仓库定义 独立和非...

    基于Python实现的电力运检知识图谱-知识抽取算法项目代码+电力运检知识图谱管理系统前后端源代码

    ac-code 属性抽取代码及数据 entities-base 实体库 filters 过滤器 filters-data 过滤器所使用的相关资源 ner-data 命名实体识别数据 ner-code 命名实体识别最新代码 rc-code 关系抽取代码及数据 .gitignore git忽略...

    论文研究-通用互联网信息采集系统的设计与初步实现.pdf

    通过建立网页资源库,结合Spider技术、内容分析技术、引入用户数据项和替换抽取指令编辑器等,提供和定制可视化通用性较强的互联网信息采集系统,能定期自动跟踪相关网站或网页,进行比较分析、抽取、规整入库、分类...

    史上最大规模1.4亿知识图谱数据下载,知识图谱,通用知识图谱,融合了两千五百多万的实体,拥有亿级别的实体属性关系。.zip

    构建知识图谱的过程通常包括数据抽取、知识融合、实体识别、关系抽取等多个步骤,涉及到自然语言处理、机器学习、数据库技术等多种技术手段。知识图谱的不断完善有助于实现从海量信息中挖掘深层次、有价值的知识,...

    python数据可视化分析毕业设计(源码+文档).zip

    伴随着网页的抓取又不断从抓取到的网页中抽取新链接放入到链接队列中,直到爬虫系统满足了停止条件。该课题主要涉及到了HTTP和SSL协议,BeautifulSoup,pyecharts,jieba,Tkinter的使用等相关技术。  本说明书叙述...

    北京中科信软oracle培训课件

    决策支持系统的数据抽取流程所带来的数据仓库技术 使用数据仓库技术的原因 如何使用数据仓库来加速商业决策和提高决策的质量 中间休息十分钟 数据仓库的概念和术语 通用的,被广泛接受的数据仓库定义 独立和非...

    数据库系统-招标参数---模板.doc

    数据库系统 "序号 "指标项 "技术规格要求 " " "数据库通用功能 "支持ANSI/ISO SQL-89、ANSI/ISO SQL-92标准; " " " "支持中文汉字内码,符合双字节编码; " " " "数据库产品应具有良好的图形化用户界面(GUI) " " ...

    基于BeautifulSoup,pyecharts,jieba,Tkinter的Python版通用网络爬虫

    伴随着网页的抓取又不断从抓取到的网页中抽取新链接放入到链接队列中,直到爬虫系统满足了停止条件。该课题主要涉及到了HTTP和SSL协议,BeautifulSoup,pyecharts,jieba,Tkinter的使用等相关技术。  本说明书叙述...

    JAVA上百实例源码以及开源项目源代码

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    在线考试系统源码PHP

    1.shijuan_ertui.php为抽取坛友抽题逻辑代码所编写的文件,想看原本的可查看shijuan_kangfu.php 2.通用入口为index.html 3.想增加账号的可至xueyuan.php增加 复制代码 隐藏代码 $xueyuans = array( array('...

    OracleToElasticSearch:将数据从Oracle数据库拉至Elastic Search

    给定的库为现有系统提供Oracle查询通知功能。 它可以通过Zookeeper用作具有领导者选举功能的独立应用程序,并且可以将RowID通知发送到任何消息队列,例如Apollo或Kafka。 队列的使用者可以使用消息并查询数据库以...

    论文研究-异构数据集成采集交换平台中安全审计技术的设计与实现.pdf

    以自行开发的基于异构数据源通用ETLA工具为背景,讨论了其审计监控子系统的设计方法和实现。该子系统具有完整的审计安全保护、监控整个数据的ETLA过程和日志分析功能。

    盛世桃源网络存储系统 v.2010.5.1.rar

    该系统源于北京盛世桃源网络科技有限公司的盛世桃源网络硬盘管理系统和盛世桃源通用文件管理系统,在应用机制上沿用了B/S C/S混合应用模式,在功能上主要提供了前台访问、存储、后台管理、个人中心、开发接口等模块...

    2022大数据与人工智能领域的年度盛会(公开)PPT汇总(68份).zip

    事件抽取工具包 OmniEvent 数据湖查询引擎架构和实践 数据治理开展路径及实践 开放版 数据治理与数据中台架构 数字人,智能人机交互的新载体 智能写作助手Effidit介绍 图计算在风控的应用 图数据库应用分享 图算法在...

    学生成绩信息管理系统论文 JSP 完整版

    我们知道,所谓的数据库就是一些结构化的数据的联合体,要提供对这些数据的存取、增加、修改、删除或更加复杂的数据抽取等操作,需要有一个支撑系统,这就是数据库管理系统(DBMS),MySQL完全具有这方面的功能。...

Global site tag (gtag.js) - Google Analytics