Как передать параметры в вашу работу ETL?
Я строю ETL, который будет работать на разных источниках, с помощью переменной.
Как я могу выполнить свою работу (задание по рейку)
Kiba.run(Kiba.parse(IO.read(etl_file),etl_file))
и передать параметры для моего etl_file
чтобы потом использовать для своих источников?
source MySourceClass(variable_from_rake_task)
2 ответа
Автор Киба здесь.
РЕДАКТИРОВАТЬ: приведенное ниже решение остается в силе, но если вам нужна большая гибкость, вы можете использовать Kiba.parse с блоком для большей гибкости. См. https://github.com/thbar/kiba/wiki/Considerations-for-running-Kiba-jobs-programmatically-(from-Sidekiq,-Faktory,-Rake,-...) для подробного объяснения.
Поскольку вы используете задачу Rake (а не вызываете Kiba в параллельной среде, такой как Resque или Sidekiq), то, что вы можете сделать прямо сейчас, это использовать рычаги ENV
переменные, как это:
CUSTOMER_IDS=10,11,12 bundle exec kiba etl/upsert-customers.etl
Или, если вы используете написанное вами задание rake, вы можете выполнить:
task :upsert_customers => :environment do
ENV['CUSTOMER_IDS'] = [10, 11, 12].join(',)
etl_file = 'etl/upsert-customers.etl'
Kiba.run(Kiba.parse(IO.read(etl_file),etl_file))
end
Затем в upsert-customers.etl
:
# quick parsing
ids = ENV['CUSTOMER_ID'].split(',').map { |c| Integer(c) }
source Customers, ids: ids
Как я уже говорил ранее, это будет работать только в режиме командной строки, где ENV
можно безопасно использовать.
Для параллельных казней, пожалуйста, отслеживайте https://github.com/thbar/kiba/issues/18 так как я собираюсь работать над этим.
Дайте мне знать, если это правильно отвечает вашим потребностям!
Похоже, что это отслеживается здесь https://github.com/thbar/kiba/issues/18 и уже спрашивается здесь Передать параметры в метод запуска Kiba