2015-05-26 1 views
2

Я изучаю Javaee Batch API (jsr-352), чтобы проверить возможность изменения текущего инструмента ETL для нашего собственного решения с использованием этой технологии.Являются ли выпускники правильными способами реализации шагов ETL в пакете JavaEE?

Моя цель состоит в том, чтобы построить работу, в которой я:

  • получить некоторые данные (фиктивные) из источника данных в step1,
  • некоторые другие данные из других источника данных в step2 и
  • объединить их в шаге 3.

Я хотел бы обработать каждый элемент и не писать в файл, а отправить его на следующий шаг. А также сохраните информацию для дальнейшего использования. Я мог бы сделать это с помощью пакетов и jobContext.setTransientUserData().

Я думаю, что я не понимаю понятия: насколько я понял, JSR-352 предназначен для таких задач ETL, но он имеет два типа шагов: кусок и пакетные файлы. Цанки представляют собой «трехэтапные шаги», в которых читаются, обрабатываются и записываются данные. Пакеты - это задачи, которые не выполняются для каждого элемента данных, но один раз (как подсчет итогов, отправка электронной почты и другие).

Моя проблема заключается в том, что мое решение неверно, если я рассматриваю определение патронов.

Как можно реализовать эту операцию kinf od с помощью Javaee Batch API?

ответ

4

Я думаю, вам лучше использовать кусок, а не пакет для реализации ETL. Типичная обработка кусок с источником данных является чем-то вроде следующего:

  • ItemReader#open(): открыть курсор (создать Connection, Statement и ResultSet) и сохранить их в качестве переменных экземпляра ItemReader.
  • ItemReader#readItem(): создать и вернуть объект, содержащие данные из строки с помощью ResultSet
  • ItemReader#close(): близких JDBC ресурсов
  • ItemProcessor#processItem(): сделать расчет и создать и вернуть объект, который содержит результат
  • ItemWriter#writeItems(): сохранить вычисленные данные к базе данных. откройте Connection, Statement и вызовите executeUpdate() и закройте их.

Что касается вашей ситуации, я думаю, вам нужно выбрать одну информацию, которая будет рассмотрена как первичная, и открыть для нее курсор в ItemReader#open(). затем получите еще один в ItemProcessor#processItem() для каждого элемента.

Также рекомендую вам прочитать полезные примеры обработки порций:

Мои записи в блоге о JBatch и обработки порций:

+0

Спасибо за ответ, по вашему мнению, у меня должно быть 1-ступенчатое задание, в котором я выполняю всю логику ETL? – JSBach

+0

Да, я так думаю. –

+0

Я понимаю, но не идея пакетного API, что я могу сломать процесс в простых шагах? (Это честный вопрос, я чувствую, что мне не хватает базового понимания об этом JSR) – JSBach