Мне нужны мнения о том, как приступить к проектированию процесса 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 по чтению, обработке и написанию элементов, но я все еще изучаю фреймворк.
Так, как я должен проектировать эту работу ...
Я думал о том, чтобы создать столько читателей, сколько у меня есть внутренних запросов, а затем отправить каждый из этих выходов (Список объектов) на один-единственный процессор , этот процессор будет иметь всю бизнес-логику (суммы, наличие, группирование, как в приведенном выше запросе) и создавать один объект (строку базы данных) для каждого учащегося. Наконец, отправьте список созданных объектов автору записи, который заполнил бы сводную таблицу. Возможно ли это, поскольку я понимаю, что на каждом шаге есть читатель, процессор и писатель?
Учитывая, что на каждом шаге есть процессор и записывающее устройство, должен ли я иметь каждый из своих внутренних запросов на шаге, иметь свой собственный процессор, который выполняет сводку этих конкретных данных и записывать их в файл. И, наконец, есть шаг, который захватывает все эти файлы, процессор для этого объединяет данные, создавая один объект, заканчивая списком объектов, и отправляет его автору записи, заполняющему сводную таблицу?.
Какой бы вы выбрали?
В случае 2-го варианта, может ли процесс считывания шага считывать данные из нескольких источников? Другими словами, можно ли на последнем этапе прочитать 5 или 6 файлов и отправить Карту списков только одному процессору?
Надеюсь, понятно, дайте мне знать, если нет. Я просто пытаюсь сосредоточиться на проектировании пакетных заданий с помощью Spring Batch.