変数によって、さまざまなソースで実行される ETL を構築しています。
ジョブを実行するにはどうすればよいですか (rake タスク)
Kiba.run(Kiba.parse(IO.read(etl_file),etl_file))
my のパラメーターを渡して、etl_file
そのソースに使用しますか?
source MySourceClass(variable_from_rake_task)
変数によって、さまざまなソースで実行される ETL を構築しています。
ジョブを実行するにはどうすればよいですか (rake タスク)
Kiba.run(Kiba.parse(IO.read(etl_file),etl_file))
my のパラメーターを渡して、etl_file
そのソースに使用しますか?
source MySourceClass(variable_from_rake_task)
木場の作者はこちら。
編集: 以下の解決策は引き続き適用されますが、さらに柔軟性が必要な場合は、ブロックで Kiba.parse を使用して柔軟性を高めることができます。詳細な説明については、https://github.com/thbar/kiba/wiki/Considerations-for-running-Kiba-jobs-programmatically-(from-Sidekiq,-Faktory,-Rake,-...)を参照してください。
Rake タスクを使用しているため (そして、Resque や Sidekiq のような並列環境で Kiba を呼び出していない)、今できることは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を追跡してください。私はそれに取り組むつもりです。
これがあなたのニーズに適切に答えているかどうか教えてください!