我正在寻找一个可嵌入的Java ETL,即可以从Java代码调用的Extract Transform Load引擎。
我发现很难找到合适的产品。
我主要是将分隔的文本文件加载到数据库表中,并在此过程中进行一些小的转换。
我想要以下功能:
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() );
有什么建议吗?
答案 0 :(得分:15)
披露:我是Scriptella ETL的作者,但我相信这个工具对您的案例可能有用。
这是一个轻量级的开源ETL,与Java进行单线集成。对于CSV,文本,XML,Excel和其他数据源,它还supports Spring Framework并附带built-in drivers。
<!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>
// Execute etl.xml file
EtlExecutor.newExecutor(new File("etl.xml")).execute();
scriptella [file_name]
使用"spring"
驱动程序和bean的名称来引用数据源。例如:
<connection id="spring" driver="spring" url="datasourceBeanName" />
将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。
答案 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连接数据库的后代的实现将作为孩子的游戏。