【发布时间】:2018-08-20 22:14:51
【问题描述】:
我需要有关 NiFi 中 ValidateRecord 和 ConvertRecord 处理器的理解和功能方面的帮助。
我的要求
我有一个具有各种属性的 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 ValidateRecord 和 ConvertRecord 可用于验证传入的 JSON 并将其转换为传出的 json,并使用上面解释的一些验证规则。如果没有,是否有替代方案使用 groovy 脚本根据架构执行传入 json 的此类验证和转换。
请提出建议。非常感谢任何帮助。
【问题讨论】:
标签: apache-nifi