Как передать параметры в вашу работу 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

Другие вопросы по тегам