我有一个流getfile->convertrecord->splittext->putdatabaserecord。我发送到getfile的csv文件包含以下字段:
ID TIME M00B01 M00B02 M00B03
1 2018-09-27 10:44:23.972 3242 35 335
2 2018-09-21 11:44:23.972 323 24 978
我在mysql中的数据库表 backbone 如下:
Create table test(ID INT,TIME DATETIME(3),MxB01 INT,MxB02 INT,MxB03 INT);
注意:我已将标头的名称替换为mxb00、mxb01等。。
我的convertrecord处理器出错,因为我以csvreader的身份读取,以csvsetwritter的身份写入。我附上两者的配置供您参考。
问题是它读取csv文件,但由于头名称的更改,它将所有其他字段都设置为空(我更改了头名称,因为我必须将头名称写为mxb00,以便匹配mysql表中定义的头)。我得到id和time的值,因为我没有更改csvwriter和mysql表定义中那些字段的头名称。所以这些值我得到了,但是对于其他值我得到了空白,因为它由于名称的改变而变得混乱。
我怎样才能解决这个问题?非常感谢您的帮助。谢谢!
2条答案
按热度按时间kiz8lqtg1#
尝试getfile->replacetext->convertrecord->splittext->putdatabaserecord。
配置:
搜索值:输入标题,替换值:新建标题,替换策略:文字替换,评估模式;整个文本
xxhby3vn2#
当您要为输出csv文件创建自定义头文件时,请按如下所示配置csv reader controller服务。
配置:
因为我们使用模式访问策略作为模式文本,并将模式作为
我们将csv数据的第一行作为头,忽略csv头列名,因此输出流文件将具有上面定义的模式。
csvwriter配置:
因为我们继承了模式写入策略,所以输出流文件的头将与我们在读取器中指定的头相同。
此外,我不知道为什么在convertrecord之后使用splittext处理器作为putdatabaserecord处理器,设计为一次处理记录块。
即使您可以使用上面提到的csvreader controller服务配置putdatabaserecord处理器,您的流程也将是:
流量:
注:
由于我没有将avro逻辑类型用于timestamp字段,如果您使用的是逻辑类型,则相应地更改控制器服务配置。