NiFi - ConvertCSVtoAVRO - 如何捕获失败的记录?

NiFi - ConvertCSVtoAVRO - how to capture the failed records?

在将 CSV 转换为 AVRO 时,我想将所有拒绝输出到一个文件(比方说 error.csv)。

拒绝通常是由错误的数据类型引起的 - 例如当 "string" 值出现在 "long" 字段中时。

我正在尝试使用不兼容的输出来做到这一点,但是它没有保存转换失败的行(下例中的 2),而是保存了整个 CSV 文件。是否有可能以某种方式仅过滤掉这些转换失败的记录? (NiFi 是否为这些记录添加了一些标记等?) 两个处理器:RouteOnAttribute 和 RouteOnContent 路由整个文件。流程的 "incompatible" 段是否以某种方式用 "error" 之类的属性标记单个记录,该属性在将文件拆分为行后可用?我在任何文档中都找不到这个。

我建议在 ConvertCSVToAvro 上游使用 SplitText 处理器,如果可以的话,这样您一次只能转换一条记录。您还将清楚地了解 errors 属性在发送到不兼容输出的任何流文件上所指的内容。

将整个失败的文件发送给不兼容的关系似乎是一个有目的的选择。我认为如果 CSV 文件的格式不正确,这可能是必要的,尤其是对于整齐地包含在一行(或正确转义)中的记录。如果您的数据违反了这一假设,SplitText 可能会创建一组零散的失败行,从而使事情变得更糟。