Нужен совет по проектированию / архитектуре работы Spring Batch ETL - PullRequest
1 голос
/ 11 января 2012

Мне нужны мнения о том, как приступить к проектированию процесса ETL для сводной таблицы назначения в Spring Batch.

Положение

У меня есть запрос (монстр), который представляет собой комбинацию нескольких запросов, объединенных вместе, что создает сетку, которую я собираюсь использовать в качестве моей окончательной сводной таблицы. Форма запроса выглядит следующим образом:

select A.student_id,
       A.anoterField,
       B.anotherField,
       B.anotherField,
       C.anotherField,
       C.anotherField,
       D.anotherField
from(               
          (select s.student_id         
           from table_name
           inner join another_table
               on
           where     
           and
           group by s.student_id
           )A
inner join (select s.student_id
                   , ...
                   , ...
            from table_name
            inner join another_table
            where    
            and
            group by s.student_id
            )B
    on a.student_id = b.student_id            
inner join (select s.student_id
                   , ...
                   , ...
            from table_name
            inner join another_table
            where    
            and
            group by s.student_id
            )C  
    on a.student_id = c.student_id              
.
.
.
.
.
.

Задача

Этот запрос выполняется к хранилищу данных на основе Kimball только для одной школы, и это уже довольно интенсивный запрос после всех сумм, сгруппировок и т. Д., Которые выполняет каждый из внутренних запросов.

Решение

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

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

Вопросы по дизайну

Мне удалось познакомиться с Spring Batch по чтению, обработке и написанию элементов, но я все еще изучаю фреймворк.

Так, как я должен проектировать эту работу ...

  1. Я думал о том, чтобы создать столько читателей, сколько у меня есть внутренних запросов, а затем отправить каждый из этих выходов (Список объектов) на один-единственный процессор , этот процессор будет иметь всю бизнес-логику (суммы, наличие, группирование, как в приведенном выше запросе) и создавать один объект (строку базы данных) для каждого учащегося. Наконец, отправьте список созданных объектов автору записи, который заполнил бы сводную таблицу. Возможно ли это, поскольку я понимаю, что на каждом шаге есть читатель, процессор и писатель?

  2. Учитывая, что на каждом шаге есть процессор и записывающее устройство, должен ли я иметь каждый из своих внутренних запросов на шаге, иметь свой собственный процессор, который выполняет сводку этих конкретных данных и записывать их в файл. И, наконец, есть шаг, который захватывает все эти файлы, процессор для этого объединяет данные, создавая один объект, заканчивая списком объектов, и отправляет его автору записи, заполняющему сводную таблицу?.

Какой бы вы выбрали?

В случае 2-го варианта, может ли процесс считывания шага считывать данные из нескольких источников? Другими словами, можно ли на последнем этапе прочитать 5 или 6 файлов и отправить Карту списков только одному процессору?

Надеюсь, понятно, дайте мне знать, если нет. Я просто пытаюсь сосредоточиться на проектировании пакетных заданий с помощью Spring Batch.

...