Я пытаюсь настроить систему ETL, используя GNU Make 3.81.Идея состоит в том, чтобы преобразовать и загрузить только то, что необходимо после изменения моих исходных данных.
Макет каталога моего проекта выглядит следующим образом:
${SCRIPTS}/ <- transform & load scripts
${DATA}/incoming/ <- storage for extracted data
${DATA}/processed/ <- transformed, soon-to-be-loaded data
Мой $ {TRANSFORM_SCRIPTS} / Makefile isзаполненный такими утверждениями:
A_step_1: ${SCRIPTS}/A/do_step_1.sh ${DATA}/incoming/A_files/*
${SCRIPTS}/A/do_step_1.sh ${DATA}/incoming/A_files/* > ${DATA}/processed/A.step_1
A_step_2: ${SCRIPTS}/A/do_step_2.sh ${DATA}/processed/A.step_1
${SCRIPTS}/A/do_step_2.sh ${DATA}/processed/A.step_1 > ${DATA}/processed/A.step_2
B_step_1: ${SCRIPTS}/B/do_step_1.sh ${DATA}/incoming/B_files/*
${SCRIPTS}/B/do_step_1.sh ${DATA}/incoming/B_files/* > ${DATA}/processed/B.step_1
B_step_2: ${SCRIPTS}/B/do_step_2.sh ${DATA}/processed/B.step_1
${SCRIPTS}/B/do_step_2.sh ${DATA}/processed/B.step_1 > ${DATA}/processed/B.step_2
joined: A_step_2 B_step_2
join ${DATA}/processed/A.step_2 ${DATA}/processed/B.step_2 > ${DATA}/processed/joined
При вызове 'make join' успешно создается нужный мне "присоединенный" файл, но он каждый раз перестраивает каждый файл, несмотря на то, что в файлах зависимостей нет никаких изменений.
Я пытался использовать имена выходных файлов в качестве целей, но GNU Make, похоже, не знает, как справиться:
${DATA}/processed/B.step_2: ${SCRIPTS}/B/do_step_2.sh ${DATA}/processed/B.step_1
${SCRIPTS}/B/do_step_2.sh ${DATA}/processed/B.step_1 > ${DATA}/processed/B.step_2
Любые предложения, кроме отбрасывания вывода каждого процесса в текущей работекаталог?Make кажется разумным инструментом для выполнения этой работы, потому что на самом деле существуют десятки источников данных и около 100 шагов в целом, а само управление зависимостями через файлы сценариев становится слишком сложным.