我正在尝试使用UpdateRecord替换嵌套字段的值。我非常确定我正确地遵循了the documentation,但我只能更新顶级字段的值,即使使用//也不能正常工作。我在下面的UpdateRecord设置中有几个配置,但只有最后一个更新requestObject的配置有效。
我确信我的模式是正确的,因为我已经使用它毫无问题地将XML转换为JSON。
我有以下几点:
输入XML文件:
<request>
<requestType>BULKRETRIEVE</requestType>
<requestDomainType>ROI</requestDomainType>
<systemName>SYSTEMTEST</systemName>
<location>USA</location>
<userInformation>
<userId>1313</userId>
<firstName>Some</firstName> <!-- required -->
<lastName>Guy</lastName> <!-- required -->
<email>email@address.com</email> <!-- required if phone not included -->
<phone></phone> <!-- required if email not included -->
</userInformation>
<requestObject>
<startDate>2019-01-01T00:00:00.000-05:00</startDate>
<endDate>2019-01-31T00:00:00.000-05:00</endDate>
<type>ROI</type>
</requestObject>
</request>AVRO模式:
{
"namespace": "com.organization.somethingspecific",
"name": "request",
"type": "record",
"fields": [
{"name": "requestType", "type": ["string","null"], "default": null},
{"name": "requestDomainType", "type": ["string","null"], "default": null},
{"name": "systemName", "type": ["string","null"], "default": null},
{"name": "location", "type": ["string","null"], "default": null},
{"name": "userInformation", "type": ["null", {
"name": "userInformation", "type": "array", "items": {
"name": "userInformation", "type": "record", "fields": [
{"name": "userId", "type": ["string","null"], "default": null},
{"name": "firstName", "type": ["string","null"], "default": null},
{"name": "lastName", "type": ["string","null"], "default": null},
{"name": "email", "type": ["string","null"], "default": null},
{"name": "phone", "type": ["string","null"], "default": null}
]
}
}], "default": null},
{"name": "requestObject", "type": ["null",{
"name": "requestObject", "type": "array", "items": {
"name": "requestObject", "type": "record", "fields": [
{"name": "startDate", "type": ["string","null"], "default": null},
{"name": "endDate", "type": ["string","null"], "default": null},
{"name": "type", "type": ["string","null"], "default": null}
]
}
}], "default": null}
]
}我的UpdateRecord处理器配置为:

发布于 2019-04-22 21:52:10
在您的模式中,requestObject字段是一个数组,因此您不能指定/requestObject/startDate之类的内容,因为它并不表示要更新数组中的哪个元素。
我认为您应该能够执行类似/ requestObject */startDate的操作,即为requestObject数组中的所有条目更改startDate字段。
参考文档:
https://nifi.apache.org/docs/nifi-docs/html/record-path-guide.html
https://stackoverflow.com/questions/55761154
复制相似问题