在NiFi中使用ConvertRecord处理空值

时间:2018-11-05 22:53:21

标签: mysql apache etl apache-nifi

是否可以使用convertRecord或其他处理器处理null(CSV中不存在列)?

我每天都会收到几个CSv文件。但是问题在于每个CSv中的字段都不相同,有没有一种方法可以将CSV中不存在的所有那些字段的0值发送到数据库中。如果是,请让我不要怎么办?谢谢。

例如:CSV1具有以下字段: 年龄,姓名,地址,值1,值2,值3

注意:Value3并非每次都存在于所有CSV中,有时它存在于某个时候,有时该列不存在)

CSV2将具有以下内容: 年龄,姓名,地址,值1,值2

并在数据库中表的骨架如下: 年龄,姓名,地址,值1,值2,值3

我不想在数据库中包含空值,后跟一些值。在NiFi中,我的流程是否可以处理“空”并将其替换为0,然后自动插入数据库(每次,如果CSV中没有指定架构中指定的特定字段,则该流程应将0分配给该字段)并吸收数据库中的其他所有内容)

请帮助我实现这一目标。谢谢!

1 个答案:

答案 0 :(得分:1)

在这种情况下,您必须在其中定义具有默认值的avro模式

示例平均模式:

{
"type": "record",
"name": "SQLSchema",
"fields" : [
{"name": "Age", "type": ["null","string"]},
{"name": "Name", "type": ["null","string"]},
{"name": "Address", "type": ["null","int"]},
{"name": "Value1", "type": ["null","int"]},
{"name": "Value2", "type": ["null","int"]},
{"name": "value3", "type": ["null","int"],"default": 0}
]
}

对于value3字段,我们已将类型定义为null (or) int,并将默认值定义为0。

如果没有 value3的数据字段,则它将值替换为0