23

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

我发现很难找到合适的。

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

我想要以下功能:

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

CloverETL 允许在 XML 中指定映射,但数据库连接必须是 JNDI 名称或指定驱动程序类、url、dbusername、密码等的属性文件。由于我已经javax.sql.Datasource通过我的依赖注入框架设置了 s,属性文件看起来很痛苦,而且不健壮,特别是如果我希望它在多个环境(开发、测试、产品)中工作。

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

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

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

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

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

有什么建议么?

4

4 回答 4

15

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

它是一个轻量级的开源 ETL,与 Java 单线集成。它还支持 Spring Framework,并带有用于 CSV、文本、XML、Excel 和其他数据源的内置驱动程序。

将 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>
    

有关其他详细信息,请参阅Spring 示例

于 2012-11-07T14:16:24.407 回答
4

你知道泰伦吗?

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

于 2010-11-24T17:01:39.007 回答
1

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

于 2010-11-23T02:53:35.293 回答
0

CloverETL Engine 易于嵌入和扩展,因此您可以编写自己的连接并将其插入 CLoverETL。DBConnection 对象将在 CloverETL 3.1 中稍作更改,使其更具可扩展性,其后代的实现(使用 DataSource 连接到数据库)将是小菜一碟。

于 2011-05-27T14:49:23.810 回答