【问题标题】:Nifi validaterecord and convertrecord to validate and convert json record using avroschemaregistryNifi validaterecord 和 convertrecord 使用 avroschemaregistry 验证和转换 json 记录
【发布时间】:2018-08-20 22:14:51
【问题描述】:

我需要有关 NiFi 中 ValidateRecordConvertRecord 处理器的理解和功能方面的帮助。

我的要求

我有一个具有各种属性的 JSON 流文件内容,很少有字段是强制性的,很少有是可选的,也很少有字段是时间戳字段,很少有双重类型。有些字段应该在 LOV 中具有值

我使用过AvroSchemaRegistry 及以下架构定义:

{
    "namespace": "nifi",
    "name": "test_json",
    "type": "record",
    "fields": [{
        "name": "sn",
        "type": "string"
    }, {
        "name": "result",
        "type": {
            "name": "Result",
            "type": "enum",
            "symbols": ["PASS", "FAIL"]
        }
    }, {
        "name": "product",
        "type": "string",
        "maxLength": 8
    }, {
        "name": "test_station_name",
        "type": "string",
        "maxLength": 32
    }, {
        "name": "station_id",
        "type": "string"
    }, {
        "name": "mac_address",
        "type": "string"
    }, {
        "name": "start_time",
        "type": {
            "type": "string",
            "logicalType": "timestamp-millis"
        }
    }, {
        "name": "stop_time",
        "type": {
            "type": "string",
            "logicalType": "timestamp-millis"
        }
    }, {
        "name": "f_p_dip_wave",
        "type": ["null", "double"]
    }, {
        "name": "f_p_dip_depth",
        "type": ["null", "double"]
    }, {
        "name": "f_p_dip_height",
        "type": ["null", "double"]
    }, {
        "name": "radius",
        "type": ["null", "double"]
    }, {
        "name": "diameter",
        "type": ["null", "double"]
    }, {
        "name": "gain_cavity_offset_nm",
        "type": ["null", "double"]
    }]
}

字段结果应该有 PASS 或 FAIL 值,product 和 test_station_name 可以对值有最大长度限制,并且没有默认值“null”的字段是强制性的。

源端,客户端应用程序可以在 json 中发送任何属性集,我正在尝试使用 jsonreader 和 jsonwriter 使用 validaterecord 来验证记录,然后使用 convertrecord 根据架构适当地转换 json。

我可以看到 NiFi 能够检测到字段名称并能够对数据类型(字符串、双精度和时间戳)执行验证,但不会失效 1.基于记录的结果属性的枚举值,而不是通过或失败 2.也不会使产品和 test_station_name 字段的记录长度大于架构中定义的最大长度的记录无效。 3. 此外,即使 JSON 没有强制字段的属性和值,验证记录也将这些字段视为“空”。 相反,所有 JSON 记录都已成功验证。

问题

NiFi ValidateRecordConvertRecord 可用于验证传入的 JSON 并将其转换为传出的 json,并使用上面解释的一些验证规则。如果没有,是否有替代方案使用 groovy 脚本根据架构执行传入 json 的此类验证和转换。

请提出建议。非常感谢任何帮助。

【问题讨论】:

    标签: apache-nifi


    【解决方案1】:

    1) 目前来自 Avro 模式的枚举在 NiFi 的内部记录模式中被转换为字符串类型,这就是任何值都传递的原因。 NiFi 的记录模式中需要有一个枚举类型,它从 Avro 模式中捕获允许的值。

    2) 我在 Avro 规范中找不到关于 maxLength 的任何信息 - https://avro.apache.org/docs/current/spec.html 这是真的吗?如果是,那么 NiFi 可以考虑合并它。

    3) 如果一个字段没有值,那么它应该是无效的,除非该字段的类型是与“null”的联合,例如“type”:[“null”,“double”],那将表示该字段不是必需的,允许为 null 或 double。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多