我有一个tfileinputdelimited组件和一个tmap,结果传递给tfileoutdelimited,它创建了一个csv文件。
现在在作业中间有时数据加载失败导致目标文件回滚。 它造成资源浪费和时间浪费。 任何人都可以提供一种方法,以便一旦作业失败,以便传递的数据将进入保存状态,下次作业运行时,它将再次从故障点开始。
答案 0 :(得分:1)
在tFileOutputDelimited中写入时,Talend不会回滚进程。如果输出文件为空,则表示您的作业过早死亡,并且未在输出缓冲区中写入任何记录。 如果在写入文件时发生错误,则以下代码(由tFileOutputDelimited生成)关闭outputBuffer并刷新在错误之前成功插入的数据:
...
} finally {
if (outtFileOutputDelimited_1 != null) {
outtFileOutputDelimited_1.flush();
outtFileOutputDelimited_1.close();
}
...
}
...
Talend中没有真正的“简历”功能,但您可以在作业中创建自己的模具和恢复过程,如下所示:
tFileInput1 ==> tHashOutput
tFileInput2 = main => tMap ==> tFileOutput1
tHashInput = lookup => TMAP
tFileInput1:读取上次运行作业生成的数据,并使用tHashOutput存储在内存中
tFileInput2:读取输入文件
tFileOutput1:存储输出数据
tHashInput:读取内存中的数据并在tMap中用作查找
在tMap中,在tFileInput1和tHashInput之间创建内部联接。然后,对于输出模式,选择 catch lookup inner join reject 来处理不在tHashInput中的所有记录。
不确定它是否会节省资源和时间。管理错误的最佳方法是识别错误并执行作业中的所有检查以避免错误!
为了更清楚,您能举例说明运行作业时发生的错误吗?