0

我有一个 tfileinputdelimited 组件和一个 tmap,结果将传递给创建 csv 文件的 tfileoutdelimited。

现在在工作中间,有时数据加载失败,导致目标文件回滚。造成资源和时间的浪费。任何人都可以提供一种方法,以便一旦作业在两者之间失败,以便传递的数据将进入保存状态,并且下次作业运行时,它仅从故障点重新开始。

4

1 回答 1

1

在 tFileOutputDelimited 中写入时,Talend 不会回滚进程。如果你有空的输出文件,这意味着你的工作过早地结束了,并且没有记录被写入输出缓冲区。如果写入文件时发生错误,则以下代码(由 tFileOutputDelimited 生成)关闭 outputBuffer 并刷新错误之前成功插入的数据:

...
} finally {
    if (outtFileOutputDelimited_1 != null) {
        outtFileOutputDelimited_1.flush();
        outtFileOutputDelimited_1.close();
    }
    ...
}
...

Talend 中没有真正的“恢复”功能,但您可以在工作中创建自己的 die&resume 流程,如下所示:

tFileInput1 ==> tHashOutput

tFileInput2 = main => tMap ==> tFileOutput1
tHashInput =lookup=> tMap

tFileInput1 :读取上次运行作业生成的数据,并使用 tHashOutput 存储在内存中 tFileInput2 :读取输入文件
tFileOutput1 :存储输出数据
tHashInput :读取内存中的数据并用作 tMap 中的查找

在您的 tMap 中,在 tFileInput1 和 tHashInput 之间创建一个内部连接。然后,对于您的输出模式,选择catch lookup inner join reject来处理所有不在 tHashInput 中的记录。

不确定它是否会节省资源和时间。管理错误的最佳方法是识别它们并在工作中进行所有检查以避免它们!

为了更清楚起见,您能否举例说明运行作业时发生的错误?

于 2013-02-06T08:11:58.587 回答