Добрый день.
Рассматриваю Kettle как ETL средство для прогрузки по расписанию данных из различных БД в хранилище.
Поделюсь своими соображениями (английский не так силен, чтобы быстро найти все ответы), и задам некоторые вопросы, на которые надеюсь получить ответы:
1 Есть соображение сделать деплой из гита в репозиторий kettle
1.1 Если во время выполнения джоба заменить трансформацию, она подхватится(во время старта выполнения этой трансформации)
1.2 Если джоб итеративный, то файл заменить можно, но джоб уже в памяти, и его надо рестартовать
1.3 Если меняется не одна трансформация в составе джоба, то лучше останавливать джоб, менять файлы и только тогда запускать
Получается, в скрипте надо выдергивать git diff, останавливать меняющиеся джобы, копировать, и потом запускать джобы, которые предназначены для этого (для этого сделал специальный каталог в репозитории). Этот способ с пивом пойдет, или есть что получше?
2 в enterprise кажется есть checkpoints для джобов - в Community такого не нашел.
Вопрос - как определить, с какой точки в джобе начать, например, при восстановлении после падения сервера?
Приведу пример:
table input1 -> table input 2 -> table output table 2
перекидывание инкремента - table input1 = select max(id) from table2
table input 2 = select * from table1 where id > coalesce(?, 0)
commit every 10000 rows
Когда джоб штатно успешно завершается, проблемы не возникает, если ни одного коммита не прошло, тоже не проблема. Но что, если закоммитили из 25к первые 10к записей? В доке написано, что шаги идут одновременно. Все усугубляется, когда скорость чтения в table input 2 больше чем скорость записи в table output. Прочитало 23к записей, закоммитилось 10к, как понять, какие из 23к прочитанных пошли в коммит? select max(id) тогда будет ошибочным, ведь непонятно, в каком порядке заливаются данные? Как быт при падении сервера с джобами?
3 Может ли PDI работать с oracle materialized view log, кто-нибудь сталкивался, есть опыт (это вопрос про альтернативные методы загрузки инкремента)?
Рассматриваю Kettle как ETL средство для прогрузки по расписанию данных из различных БД в хранилище.
Поделюсь своими соображениями (английский не так силен, чтобы быстро найти все ответы), и задам некоторые вопросы, на которые надеюсь получить ответы:
1 Есть соображение сделать деплой из гита в репозиторий kettle
1.1 Если во время выполнения джоба заменить трансформацию, она подхватится(во время старта выполнения этой трансформации)
1.2 Если джоб итеративный, то файл заменить можно, но джоб уже в памяти, и его надо рестартовать
1.3 Если меняется не одна трансформация в составе джоба, то лучше останавливать джоб, менять файлы и только тогда запускать
Получается, в скрипте надо выдергивать git diff, останавливать меняющиеся джобы, копировать, и потом запускать джобы, которые предназначены для этого (для этого сделал специальный каталог в репозитории). Этот способ с пивом пойдет, или есть что получше?
2 в enterprise кажется есть checkpoints для джобов - в Community такого не нашел.
Вопрос - как определить, с какой точки в джобе начать, например, при восстановлении после падения сервера?
Приведу пример:
table input1 -> table input 2 -> table output table 2
перекидывание инкремента - table input1 = select max(id) from table2
table input 2 = select * from table1 where id > coalesce(?, 0)
commit every 10000 rows
Когда джоб штатно успешно завершается, проблемы не возникает, если ни одного коммита не прошло, тоже не проблема. Но что, если закоммитили из 25к первые 10к записей? В доке написано, что шаги идут одновременно. Все усугубляется, когда скорость чтения в table input 2 больше чем скорость записи в table output. Прочитало 23к записей, закоммитилось 10к, как понять, какие из 23к прочитанных пошли в коммит? select max(id) тогда будет ошибочным, ведь непонятно, в каком порядке заливаются данные? Как быт при падении сервера с джобами?
3 Может ли PDI работать с oracle materialized view log, кто-нибудь сталкивался, есть опыт (это вопрос про альтернативные методы загрузки инкремента)?