【问题标题】:Handling Null using ConvertRecord in NiFi在 NiFi 中使用 ConvertRecord 处理 Null
【发布时间】:2019-04-09 08:20:13
【问题描述】:

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

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

例如:CSV1 具有以下字段: 年龄、姓名、地址、Value1、Value2、Value3

注意:Value3 并非每次都出现在所有 CSV 中,有时它存在,有时该列不存在)

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

而在数据库中的表骨架如下: 年龄、姓名、地址、Value1、Value2、Value3

我不想让空值后跟数据库中的某个值。有没有办法我在 NiFi 中的流程可以处理“null”并在以自动方式插入数据库之前将其替换为 0(每次如果 CSV 中不存在模式中给出的特定字段,则流程应将 0 分配给该字段并摄取数据库中的所有其他内容)

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

【问题讨论】:

    标签: mysql apache etl apache-nifi


    【解决方案1】:

    对于这种情况,您必须在其中使用默认值定义 avro 架构

    示例 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

    【讨论】:

    • 有什么方法可以避免将该字段输入数据库以存储空间。
    • @shrads,我不确定您将字段输入数据库是什么意思,根据我的理解的问题,您正在考虑将 null 替换为其他默认值。如果您不想占用空间,请使用 null value (stackoverflow.com/questions/3731172/…),但这也取决于列的 data type
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-11
    • 2020-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多