在google code上开了一个java版的ETL小工具project:jmyetl

以前,曾经利用各数据库底层C-API作wrapping,实现了若干异构数据库间数据导入导出的功能,但是代码复杂,不便开源。

下午,用java写了一个简单的数据抽取程序,实现MySQL数据库到Sybase ASE的数据移植。将它开源,放到:http://code.google.com/p/jmyetl/上边了。本来取名做myetl,结果已经有人在sf.net上申请了,后来在其前加上一个j。以示java版本。

有兴趣的可以试用一下。

目前,可以是某用户的全库数据导入,也可以选择性的导入若干张表。

因为刚实现一个初步框子,所以定为0.9.0版。

打算以后有空再写些别的库间ETL,最后再重构,组合。

使用方法:

当前目录下边有一个xml配置文件etl_config.xml,其格式如下:

直接运行myEtl.bat即可实现导入。如果去掉<table>那一块的注释,则全库导入。

注意字符集选项,如果没有这个配置,很容易出现乱码。

目前的限制条件是:

不要使用数据库超级用户来配置连接,因为目前程序里边没有对系统表进行过滤。

后期计划:

Sybase ASE --> Sybase ASE

Sybase ASA --> Sybase ASE

Sybase ASE --> Sybase ASA

Oracle --> Sybase ASE

DB2 --> Sybase ASE

SQL Server --> Sybase ASE

逆向导入,以后有时间再做。

已有功能:

1. 能保持表结构几乎一致,类型兼容

2. 日志文件etl.log里会记录导入的详细过程以及中间可能出现的出错信息

3. 目标表,会建立与源表一样的主键结构

4. 目标表会创建与源表一致的identity信息

5. 通过字符集一致性配置,会保持源表中的字符集到目标表,不致乱码。

待改进功能:(下述功能,是细致一些的功能,适用目的不同,如果只是简单的抽取数据,则不需要)

1. 添加与源表一致的foreign key constraints (这个稍微有点复杂,会增加导入时间)

2. 添加与源表一致的index功能,即附加创建的索引也在目标表上体现出来

其实,以前用C++ wrapper实现的原理与java版本比较接近,相比JDBC而言,它能操纵更多底层的API,获取更丰富的信息,只是代码量可能比较大。

<script type="text/javascript"><!-- google_ad_client = "ca-pub-7104628658411459"; /* wide1 */ google_ad_slot = "8564482570"; google_ad_width = 728; google_ad_height = 90; //--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>

你可能感兴趣的:(project)