Java ETL:很难找到合适的

时间:2010-11-22 23:36:15

标签: java etl embeddable

我正在寻找一个可嵌入的Java ETL,即可以从Java代码调用的Extract Transform Load引擎。

我发现很难找到合适的产品。

我主要是将分隔的文本文件加载到数据库表中,并在此过程中进行一些小的转换。

我想要以下功能:

  • 能够在外部指定简单映射,例如,将第5列文本添加到数据库列foo,指定一些xml映射文件
  • 为数据库节点提供javax.sql.Datasource
  • 的能力

CloverETL允许在XML中指定映射,但数据库连接必须是JNDI名称或指定driverClass,url,dbusername,password等的属性文件。因为我的依赖项已经设置了javax.sql.Datasource注入框架,属性文件看起来很痛苦且不健壮,特别是如果我希望它在多个环境中工作(dev,test,prod)。

KETL告诉我“我们目前正在全面检修KETL™的文档。因此,只更新了安装指南。”诚实,但没有帮助。

八达通现在是“http://www.together.at/prod/database/tdt”,正在“正在建设中”。

Pentaho 似乎使用与CloverETL相同的“指定driverClass”样式,而不是使用数据源,但是Pentaho用于从java代码调用引擎的文档很难找到。

基本上我真的很想能够做这个伪代码:

extractTransformLoad(         
        getInputFile( "input.csv" ) , 
        getXMLMapping( "myMappingFile.xml") ,
        new DatabaseWriter( getDatasource() );

有什么建议吗?

4 个答案:

答案 0 :(得分:15)

披露:我是Scriptella ETL的作者,但我相信这个工具对您的案例可能有用。

这是一个轻量级的开源ETL,与Java进行单线集成。对于CSV,文本,XML,Excel和其他数据源,它还supports Spring Framework并附带built-in drivers

将CSV文件导入表格的示例:

<!DOCTYPE etl SYSTEM "http://scriptella.org/dtd/etl.dtd">
<etl>
  <connection id="in" driver="csv" url="data.csv" />
  <connection id="out" driver="oracle" url="jdbc:oracle:thin:@localhost:1521:ORCL" 
      classpath="ojdbc14.jar" user="scott" password="tiger" />
  <!-- Copy all CSV rows to a database table -->
  <query connection-id="in">
      <!-- Empty query means select all columns -->
      <script connection-id="out">
          INSERT INTO Table_Name VALUES (?id,?priority, ?summary, ?status)
      </script>
  </query>
</etl>

从Java运行:

// Execute etl.xml file
EtlExecutor.newExecutor(new File("etl.xml")).execute();

从命令行运行:

scriptella [file_name]

与Spring集成:

  1. 使用"spring"驱动程序和bean的名称来引用数据源。例如:

    <connection id="spring" driver="spring" url="datasourceBeanName" />
    
  2. EtlExecutorBean添加到应用程序上下文以执行作业:

    <bean id="createDb" class="scriptella.driver.spring.EtlExecutorBean">
        <property name="configLocation" value="create-db.etl.xml" />
        <property name="progressIndicator"><ref local="progress" /></property>
        <property name="autostart" value="true" /> <!-- Etl will be run during app context initialization -->
    </bean>
    
  3. 有关其他详细信息,请参阅Spring example

答案 1 :(得分:4)

您知道Talend吗?

这是一个基于Eclipse(Talend Open Studio)的工具,但您可以通过编写自己的代码或将作业导出到Java类来直接在Java中使用它。

答案 2 :(得分:1)

Here是所有基于Java的开源ETL库的列表。我看到你已经评估了其中的一些,但还有更多。此外,这似乎与https://stackoverflow.com/questions/272517/please-recommend-a-powerful-java-based-etl-framework

重复

答案 3 :(得分:0)

CloverETL Engine易于嵌入和扩展,因此您可以编写自己的连接并将其插入CLoverETL。在CloverETL 3.1中,DBConnection对象将稍微改变,以便更加可扩展,并且使用DataSource连接数据库的后代的实现将作为孩子的游戏。