Лучшая практика использования Kiba в качестве пакетного процесса для файлов
Мы хотели бы запустить Kiba как пакетный процесс для серии файлов. Какова была бы наилучшая структура, чтобы задать маску файла, загрузить файлы с FTP, а затем запустить задание ETL для каждого, посылая уведомление об успехе или сбое для каждого файла отдельно?
Есть ли способ сделать это изнутри Kiba, или лучше всего обрабатывать все внешние элементы, не относящиеся к ETL, а затем просто вызывать kiba для каждого файла?
2 ответа
Сначала я бы начал с самой простой вещи, как вы сказали, с использованием внешних файлов, а затем вызова Kiba для каждого. Например:
- Создайте задачу rake, чтобы загрузить файлы локально (и удалить их с FTP, или, по крайней мере, переместить их в отдельную папку, чтобы избежать двойной обработки), внутри хорошо известной папки, которая будет действовать как папка "Входящие". Смотрите здесь для интересных ссылок о том, как это сделать.
- Затем создайте другую задачу rake, чтобы перебрать папку "Входящие" и обработать данный файл (используя
Dir[pattern].each
).
Обязательно используйте помощник, такой как:
def system!(command)
fail "Command #{command} failed" unless system(command)
end
чтобы убедиться, что вы обнаружите сбои в выполнении при выполнении системных вызовов.
Для самого файла ETL вы бы использовали один at_exit
блокировать для захвата сбоя и соответственно уведомить (см. пример здесь с Bugsnag, и post_process
заблокировать, чтобы захватить успех и уведомить в этом случае.
Это, безусловно, будет работать и просто, потому что есть другие возможности, такие как один файл ETL, который будет загружать файлы в pre_process
блок, затем иметь источник, который будет давать одно имя файла на загруженный файл, и, возможно, преобразование, которое может вызвать сам kiba
в командной строке или даже более продвинутые решения.
Я бы, как всегда, выбрал самое простое решение для начала!
Дайте мне знать, если это правильно отвечает на ваш вопрос!
Почему вы не можете использовать управление заданиями Control -M. Это действительно полезно и эффективно.