3

変数によって、さまざまなソースで実行される ETL を構築しています。

ジョブを実行するにはどうすればよいですか (rake タスク)

Kiba.run(Kiba.parse(IO.read(etl_file),etl_file))

my のパラメーターを渡して、etl_fileそのソースに使用しますか?

source MySourceClass(variable_from_rake_task)

4

2 に答える 2

3

木場の作者はこちら。

編集: 以下の解決策は引き続き適用されますが、さらに柔軟性が必要な場合は、ブロックで 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を追跡してください。私はそれに取り組むつもりです。

これがあなたのニーズに適切に答えているかどうか教えてください!

于 2015-10-06T08:06:35.317 に答える