将CSV转换为AVRO时,我想将所有拒绝输出到文件中(假设为error.csv)。
拒绝通常是由错误的数据类型引起的 - 例如当“字符串”值出现在“长”字段中时。
我尝试使用不兼容的输出来执行此操作,但是不保存无法转换的行(在下面的示例中为2),而是保存整个CSV文件。是否有可能仅以某种方式过滤掉那些无法转换的记录? (NiFi是否会为这些记录添加一些标记等?) 两个处理器:RouteOnAttribute和RouteOnContent路由整个文件。流的“不兼容”支路是否以某种方式标记单个记录,其中“错误”属性在将文件拆分成行后可用?我在任何文档中都找不到这个。
答案 0 :(得分:6)
如果可以的话,我建议在ConvertCSVToAvro上游使用SplitText处理器,这样您一次只能转换一条记录。您还可以清楚地了解errors
属性在发送到不兼容输出的任何流文件上引用的内容。
将整个失败文件发送到不兼容的关系似乎是一个有目的的选择。我认为如果CSV文件格式不正确,可能是必要的,特别是对于整齐地包含在一行(或正确转义)的记录。如果您的数据违反了这一假设,SplitText可能会通过创建一组碎片失败的行来使事情变得更糟。