Java ETL : hard to find a suitable one

标签 java etl embeddable

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

我发现很难找到合适的。

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

我想要以下功能:

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

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

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

Octopus 现在是“http://www.together.at/prod/database/tdt”,正在“ build 中”。

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

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

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

有什么建议吗?

最佳答案

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

它是一个轻量级的开源 ETL,与 Java 单线集成。它还 supports Spring Framework并附带built-in drivers适用于 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 example .

关于Java ETL : hard to find a suitable one,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4251336/

相关文章:

java - 使用sharedPreferences将值添加到字符串

java - Apache POI 图表 - 标题格式

hibernate - 可嵌入在实体中使用两次的自定义 UserType

jpa - 插入具有复合主键的对象

hibernate - EmbeddedId 上的 JPA 标准和谓词

java - JDBC无法连接到openshift上的mysql数据库

java - 如何使用 Java Stream 逐行读取文件

mysql - 从 mysql DB 提取并加载到另一个数据库

sql-server - ETL SSIS : Redirecting error rows to a seperate table

sql-server - SSIS 找不到变量