如何记录 ETL 作业"current status"?



我正在rails后台作业中运行Kiba ETL管道。我想在作业运行时向用户提供一些状态。实现这一目标的最佳方式是什么?

我能以某种方式使用一些变量吗?

或者,我应该在每个步骤之后将状态更新保存在数据库中(在源中保存一次,每次转换保存一次、在目的地保存一次(?每次转换一次似乎需要大量额外的数据库写入,而且,从转换到数据库似乎有点"肮脏"。

谢谢!

要实现这种类型的用例,您必须在工作中加入某种形式的进度跟踪。

它可以向数据库记录报告(如果你正在进行有点重的导入并希望能够在之后进行搜索,则建议使用该数据库记录(,但如果你想要更即时的东西,也可以向某种形式的pub-sub系统(redis、Postgres、ActionCable…(报告;更轻。

转换实际上是跟踪进度的好地方,但这并不意味着必须对每一行进行报告(因为它会导致每一行都进行SQL写入,这通常太多了!(。

我建议每N行报告一次进度,使用如下代码:

pre_process do
@count ||= 0
end
transform do |r|
@count += 1
if @count % 500 == 0
# TODO here: notify the report system
end
r
end

您需要考虑如果在通知报告系统时发生错误会发生什么:也许您想停止一切,或者您想继续。

还要确保跟踪工作的开始和结束(成功/错误/完整性(,以确保你不会以过时的工作结束。

这似乎有点";脏的";与数据库对话,但这只是因为我们混合了一些顾虑。如果你每N行做一次&确保不要污染主系统,它完全没问题!

最新更新