NiFi中XML转CSV失败求助:输出不符合预期格式
解决NiFi XML转扁平化CSV配置问题
1. 替换XMLReader的推断模式为手动指定Schema
- 放弃使用推断模式,嵌套XML的结构推断易出错,会生成包含嵌套Map的Record,导致CSVWriter输出MapRecord格式。
- 手动编写匹配XML结构的Avro Schema,明确定义所有需要扁平化的字段。
举个配置示例(假设你的XML是嵌套结构):
假设输入XML:
1 张三 zhangsan@example.com 13800138000
对应的扁平化Avro Schema:
{ "type": "record", "name": "UserRecord", "fields": [ {"name": "id", "type": "string"}, {"name": "name", "type": "string"}, {"name": "email", "type": "string"}, {"name": "phone", "type": "string"} ] }
- 在XMLReader配置中,将Schema Access Strategy设为
Use Schema Text,粘贴上述Schema文本。 - 配置Root XPath(比如
/root/user),确保能精准定位到需要解析的重复节点(多数据场景)。
2. 配置CSVRecordSetWriter的Schema
- 不要用继承记录模式,同样选择
Use Schema Text作为Schema Access Strategy,粘贴和XMLReader一致的Avro Schema。 - 根据需求设置:Include Header Line设为
true(需要表头时),Field Delimiter设为目标分隔符(比如逗号,)。
3. 调整ConvertRecord组件配置
- 确认ConvertRecord的Record Reader为配置好的XMLReader,Record Writer为配置好的CSVRecordSetWriter。
- 无需依赖Avro Schema Registry(除非有跨组件共享Schema需求),手动指定Schema更直观可控。
4. 验证流程
- 运行前,用
ListFile+FetchFile+LogAttribute查看原始XML内容,确认Root XPath配置正确。 - 在ConvertRecord后添加
LogAttribute,查看record属性,确认Record是扁平化结构而非嵌套Map。 - 最后通过
PutFile输出CSV,检查是否符合预期格式。
内容的提问来源于stack exchange,提问作者Viswa1980
相关产品推荐
相关产品推荐

