如何从csv增加一个数字并将其写入

时间:2014-08-06 13:58:13

标签: counter talend

我想知道如何从csv中的字段中提取“提取”的数字,然后用递增的数字重写该文件。

我需要在tMap中使用这个计数器。

设计下面是一个好方法吗?

job layout

编辑:我正在尝试一种新方法。看下面我的subjob的设计,但是当我在主要工作中将tjavarow链接到我的主tmap时出现错误

Exception in component tMap_1
java.lang.NullPointerException
at mod_file_02.file_02_0_1.FILE_02.tFileList_1Process(FILE_02.java:9157)
at mod_file_02.file_02_0_1.FILE_02.tRowGenerator_5Process(FILE_02.java:8226)
at mod_file_02.file_02_0_1.FILE_02.tFileInputDelimited_2Process(FILE_02.java:7340)
at mod_file_02.file_02_0_1.FILE_02.runJobInTOS(FILE_02.java:12170)
at mod_file_02.file_02_0_1.FILE_02.main(FILE_02.java:11954)
2014-08-07 12:43:35|bm9aSI|bm9aSI|bm9aSI|MOD_FILE_02|FILE_02|Default|6|Java
Exception|tMap_1|java.lang.NullPointerException:null|1
[statistics] disconnected

enter image description here

enter image description here

在此输入图片说明

enter image description here

TMAP1 in main job, where the error is

1 个答案:

答案 0 :(得分:1)

您应该能够在tMap或tJavaRow中执行此流程。

只需将数字作为整数(或其他数字数据类型)读取,然后将增量添加到其中。

一个非常简单的例子可能如下所示:

job layout

这里我们有一个tFixedFlowInput,它有一些作业的硬编码值:

data input

我们通过tMap运行它,我们在age列中添加1:

tMap configuration

最后,我们将它输出到表格中的控制台:

data output

编辑:

由于Gabriele Bpointed out,当读取和写入同一个平面文件时,这并不完全有效,因为Talend在读取时声明对文件进行独占读写锁定并保留它在整个工作中开放。

相反,您必须将增量数据写入其他位置(如临时文件,数据库或甚至只是缓冲区),然后将该数据读入单独的作业,然后输出您想要的文件并清理任何暂时的事情。

问题在于您无法在同一过程中执行输出。我刚尝试在一个子作业中测试文件中的读取,使用tBufferOutput将数据传递回父作业,然后将该数据作为上下文变量传递给另一个子作业,然后尝试输出到该文件。不幸的是,文件锁仍然存在于其中,因此您无法在一个自包含作业中执行此操作(即使使用父作业和多个子作业)。

如果这对你来说听起来很糟糕(确实如此)并且你绝对需要这样做(我建议数据库表听起来比平面文件更能匹配此功能)那么你可以提出一个功能请求在Talend Jira上,tFileInputDelimited不保持文件打开或不坚持对文件进行独占读写锁定。

再一次,我强烈建议您转而使用数据库表,因为即使没有文件锁定问题,这绝对不是正确使用平面文件,这个用例非常适合数据库,甚至是轻量级作为嵌入式H2 database