我有一个流程 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中的MY数据库表骨架如下:
Create table test(ID INT,TIME DATETIME(3),MxB01 INT,MxB02 INT,MxB03 INT);
注意:我已将标头的名称替换为MxB00,MxB01等。
当我以CSVReader的形式读取并以CSVSetWritter的形式写入时,convertRecord处理器中出现错误。我附上两者的配置供您参考。
问题是它读取CSV文件,但是由于标头名称的更改,它会将所有其他字段都留为空白(我更改了标头名称,因为我必须将标头名称写为MxB00才能匹配MySQL中定义的标头表)。我获得了ID和Time的值,因为我没有更改CSVWritter和MySQL表定义中那些字段的Header名称。所以我得到的那些值,但对于其他值我却是空白的,因为名称更改使它变得混乱。
如何解决此问题?非常感谢您的帮助。
答案 0 :(得分:2)
您要为输出CSV文件创建自定义标头,然后配置 CSV阅读器控制器服务,如下所示。
由于我们将“模式访问策略”用作“模式文本”,并将模式指定为
{
"type": "record",
"name": "SQLSchema",
"fields" : [
{"name": "ID", "type": ["null","int"]},
{"name": "TIME", "type": ["null","string"]},
{"name": "MxB01", "type": ["null","int"]},
{"name": "MxB02", "type": ["null","int"]},
{"name": "MxB03", "type": ["null","int"]}
]
}
并且我们正在将csv数据的第一行作为标题处理,并且忽略了CSV标题列名称,因此输出流文件将具有我们上面定义的架构。>
CsvWriter配置:
由于我们继承了架构写入策略,因此输出流文件将具有与在阅读器中指定的相同的标头。
此外,我不确定您为什么在ConvertRecord之后使用SplitText处理器作为旨在一次处理大块记录的PutDatabaseRecord处理器。
即使您可以使用上述 CsvReader控制器服务配置 PutDatabaseRecord 处理器,您的流程也将是:
流量:
GetFile -> PutDatabaseRecord
注意:
如果您使用的是逻辑类型,因为我没有在时间戳字段中使用Avro逻辑类型,请相应地更改控制器服务配置。
答案 1 :(得分:0)
尝试GetFile-> ReplaceText-> ConvertRecord-> splittext-> PutdatabaseRecord。
config:
搜索值:输入标题, 替换值:新标题 替换策略:文字替换, 评估模式;整个文字