Подтвердить что ты не робот

Java ETL: трудно найти подходящую

Я ищу встраиваемый Java ETL, т.е. механизм Load Extract Transform Load, который можно вызывать из кода Java.

Мне неожиданно трудно найти подходящую.

Я в основном смотрю на загрузку текстовых файлов с разделителями в таблицы базы данных с некоторыми незначительными преобразованиями на этом пути.

Мне нужны следующие функции:

  • возможность указания простых сопоставлений извне, например текстового столбца 5 в столбец базы данных foo, указан некоторый файл сопоставления xml
  • способность предоставить базу данных node javax.sql.Datasource

CloverETL позволяет сопоставлять отображение в XML, но соединения с базой данных должны быть либо именами JNDI, либо файлом свойств, определяющим driverClass, url, dbusername, password и т.д. Поскольку у меня уже есть javax.sql.Datasource, настроенный моей инфраструктурой инъекций зависимостей, свойства файлов кажутся болезненными и ненадежными, особенно если я хочу, чтобы это работало в нескольких средах (dev, test, prod).

KETL говорит мне, что "мы в настоящее время полностью пересматриваем нашу документацию для KETL ™. Из-за этого обновлено только руководство по установке". Честный, но не полезный.

Octopus теперь "http://www.together.at/prod/database/tdt", который находится в стадии разработки.

Pentaho, похоже, использует тот же самый стиль, что и CloverETL, а именно, что использование источника данных, но документация Pentaho для вызова их движка из Java-кода просто трудно найти.

В принципе, мне очень хотелось бы иметь возможность сделать этот псевдокод:

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

Любые предложения?

4b9b3361

Ответ 1

Раскрытие информации: Я являюсь автором 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:

  • Используйте драйвер "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 пример.

Ответ 2

Знаете ли вы Talend?

Это инструмент, основанный на Eclipse (Talend Open Studio), но вы можете использовать его непосредственно в Java, написав свой собственный код или экспортируя задания в классы Java.

Ответ 4

CloverETL Engine легко встраивается, а также расширяется, поэтому вы можете написать свое собственное подключение и подключить его к CLoverETL. Объект DBConnection будет немного изменен в CloverETL 3.1, чтобы быть более расширяемым, а реализация его потомка, который использует DataSource для подключения к базе данных, будет играть роль ребенка.