如何在Talend Open Studio中记录任务进度?

时间:2013-06-17 14:15:36

标签: talend

我有一些将数据从一个数据库迁移到另一个数据库的示例作业,我希望获得有关当前进度的一些信息,例如从应用程序本身交互运行作业时的那些信息(我导出并运行它)从命令行)。 我使用flowMeter和statsCatcher,但我得到的是整个时间和传递的记录总数(例如4657秒,50.000.000行)。 是否有任何解决方案可以获得合适的日志?

3 个答案:

答案 0 :(得分:5)

您的解决方案是将条件子句添加到日志记录中。每一行都是真的,比方说50000.使用序列的条件应该有效:

Numeric.sequence("log_seq",1,1) % 50000 == 0 

您可以使用自定义组件bcLogBack基本上使用sl4j facade堆栈输出日志。该组件有一个名为“条件记录”的选项,仅在条件评估为真时才发送消息。

或者,如果您不喜欢安装自定义组件的想法,则可以使用标准tLogRow(或tWarn,tDie或其他)来结束您的subjob,前缀为tFilter,其表达式与高级条件相同。这样你就可以让流经过(并触发日志消息),每50000只一次。这是一个非常基本的工作图

//---->tMySqlOutput--->tFilter-----//filter--->tWarn (or tLogRow)

答案 1 :(得分:3)

据我所知,tLogRow输出到控制台。因此,您可以轻松地将输出插入其中。

如果tLogRow不够,您可以将输出插入TJavaFlex组件。你可以使用log4j或任何自定义输出。

您还可以使用tFileDelimitedOutput作为日志文件。这个组件有一个很好的“附加”选项,就像这个用例的魅力一样。


对于上述问题:如何获取日志信息

根据经验,我可以说一些组件输出流量。例如,tMysqlInput输出成功插入的行。

通常,要记录信息,我使用组件tReplicate,它允许我将流的副本输出到日志文件。

 tMySqlOutput ---- tReplicate ----- tMap -------- tMySqlInput (insert in DB)
                              +---- tMap -------- tDelimitedFile (log info)

答案 2 :(得分:1)

您也可以将tWarn与tLogCatcher结合使用:

tMySqlOutput ---- tFilter ---- tWarn

tLogCatcher ---- tMap ---- tLogRow

tFilter会阻止您记录每一行的完成进度(参见Gabriele B的回答)。 tWarn会有您想要注销的实际消息。

tLogCatcher应该从所有tWarns获得输入,tMapper将logCatcher中的每一行转换为输出行,tLogRow将其记录下来。

更详细地描述了答案(附图):http://blog.wdcigroup.net/2012/05/error-handling-in-talend-using-tlogcatcher/