Java ETL:很难找到合适的一个

tpd*_*pdi 23 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() );
Run Code Online (Sandbox Code Playgroud)

有什么建议?

ejb*_*boy 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>
Run Code Online (Sandbox Code Playgroud)

从Java运行:

// Execute etl.xml file
EtlExecutor.newExecutor(new File("etl.xml")).execute();
Run Code Online (Sandbox Code Playgroud)

从命令行运行:

scriptella [file_name]
Run Code Online (Sandbox Code Playgroud)

与Spring集成:

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

    <connection id="spring" driver="spring" url="datasourceBeanName" />
    
    Run Code Online (Sandbox Code Playgroud)
  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>
    
    Run Code Online (Sandbox Code Playgroud)

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

  • 敢于解释downvote吗?您是否有与Java代码这样简单集成的任何其他示例? (2认同)

Ara*_*ram 1

这里是所有基于 java 的开源 ETL 库的列表。我发现您已经评估了其中的一些,但还有更多。另外,这似乎是/sf/ask/19076221/的重复