web-dev-qa-db-ja.com

Java ETL:適切なものを見つけるのは難しい

埋め込み可能なJava ETL、つまりJavaコードから呼び出すことができるExtractTransformLoadエンジンを探しています。

適切なものを見つけるのは驚くほど難しいと思います。

私は主に、区切られたテキストファイルをデータベーステーブルにロードすることを検討していますが、途中でいくつかのマイナーな変換が行われます。

次の機能が欲しいのですが。

  • 単純なマッピングを外部で指定する機能(テキスト列5からデータベース列fooなど)は、いくつかのxmlマッピングファイルを指定しました
  • データベースノードにjavax.sql.Datasourceを提供する機能

CloverETLではマッピングをXMLで指定できますが、データベース接続はJNDI名か、driverClass、url、dbusername、passwordなどを指定するプロパティファイルである必要があります。すでにjavax.sql.Datasources依存性注入フレームワークによって設定されたプロパティファイルは、特にこれを複数の環境(dev、test、prod)で機能させたい場合は、苦痛で堅牢ではないように見えます。

KETLによると、「現在、KETL™のドキュメントを完全に見直す過程にあります。このため、インストールガイドのみが更新されています。」正直ですが、役に立ちません。

Octopusは現在「http://www.together.at/prod/database/tdt」であり、「作成中」です。

Pentaho seemsデータソースを使用するのではなく、CloverETLと同じ「specifydriverClass」スタイルを使用しますが、Javaコードからエンジンを呼び出すためのPentahoのドキュメントは非常に難しいです見つけるには。

基本的に、私はこの疑似コードを実行できるようにしたいと思っています。

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

助言がありますか?

23
tpdi

開示:私は Scriptella ETL の作成者ですが、このツールがあなたのケースに役立つと思います。

これは、Javaとのワンライナー統合を備えた軽量のオープンソースETLです。また、 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>
    

詳細については、 春の例 を参照してください。

15
ejboy

知っていますか Talend

これはEclipse(Talend Open Studio)に基づくツールですが、独自のコードを作成するか、ジョブをJavaクラスにエクスポートすることにより、Java)で直接使用できます。 。

4
Loïc Guillois

ここ はすべてのJavaベースのオープンソースETLライブラリのリストです。すでにいくつか評価しているようですが、もっとあります。また、これは https://stackoverflow.com/questions/272517/please-recommend-a-powerful-Java-based-etl-framework の複製

1

CloverETL Engineは、簡単に埋め込み可能で拡張可能であるため、独自の接続を作成してCLoverETLに接続できます。 DBConnectionオブジェクトはCloverETL3.1でわずかに変更され、より拡張可能になり、データベースへの接続にDataSourceを使用するその子孫の実装は子供の遊びのようになります。

0
Agad