如何将参数传递到ETL作业?

时间:2015-10-05 23:56:46

标签: kiba-etl

我正在构建一个ETL,它将通过变量在不同的源上运行。

如何执行我的工作(佣金任务)

if [ $num -lt 60 ] ; then
    echo "You failed!"
elif [ $num -lt 80 ] ; then
    echo "You got a C, just made it."
elif [ $num -lt 90 ] ; then
    echo "You got a B, not bad."
elif [ $num -lt 100 ] ; then
    echo "You got an A, excellent."
else
    echo "You got an A, perfect score."
fi

并传入我Kiba.run(Kiba.parse(IO.read(etl_file),etl_file)) 的参数然后用于其来源?

etl_file

2 个答案:

答案 0 :(得分:3)

Kiba的作者。

编辑:下面的解决方案仍然适用,但如果您需要更多灵活性,可以使用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,因为我正在开展工作。

请告诉我这是否能正确满足您的需求!

答案 1 :(得分:0)