nifi ConvertRecord JSON to CSV 只获得一条记录?
Posted
技术标签:
【中文标题】nifi ConvertRecord JSON to CSV 只获得一条记录?【英文标题】:nifi ConvertRecord JSON to CSV getting only single record? 【发布时间】:2018-08-21 21:11:48 【问题描述】:我设置了以下流程,用于读取 json 数据并使用 convertRecord 处理器将其转换为 csv。但是,输出流文件仅填充单个记录(我假设只有第一条记录)而不是所有记录。
有人可以帮忙提供正确的配置吗?
源 json 数据:
"creation_Date": "2018-08-19", "Hour_of_day": 7, "log_count": 2136
"creation_Date": "2018-08-19", "Hour_of_day": 17, "log_count": 606
"creation_Date": "2018-08-19", "Hour_of_day": 14, "log_count": 1328
"creation_Date": "2018-08-19", "Hour_of_day": 20, "log_count": 363
流程:
ConvertRecord 处理器配置:
JsonTreeReader 控制器配置:
CSVrecordsetWriter 控制器配置:
AvroSchemaRegistry 控制器配置:
"type": "record",
"name": "demo_schema",
"fields":
[
"name": "creation_Date", "type": "string",
"name": "Hour_of_day", "type": "string",
"name": "log_count", "type": "string"
]
我得到的流文件内容:
creation_Date,Hour_of_day,log_count
2018-08-16,0,3278
我需要什么:
creation_Date,Hour_of_day,log_count
2018-08-16,0,3278
2018-08-17,4,278
2018-08-18,10,6723
希望我能详细解释这种情况,如果有人可以帮助纠正配置以便我获得完整的数据,我将不胜感激。提前谢谢!
【问题讨论】:
为什么需要 Avro 配置?没有可以查询 CSV 列的 JSONPath 处理器吗? 不确定在这种情况下如何使用它。但是你能分享一个示例流程或模板吗?以及如何表示我的输入 Json 提要的 Json 路径? 我不知道如何用逗号分隔事物,我需要尝试一下,但这里是文档nifi.apache.org/docs/nifi-docs/html/… 【参考方案1】:您正面临这个NIFI-4456 错误,并且已从 NiFi-1.7 版本开始修复。
要解决此问题:
1.将SplitText processor
与split line count =1
一起使用
2.然后使用MergeContent/MergeRecord
处理器(使用碎片整理作为合并策略)并制作为有效的json消息数组
如果您使用的是合并记录处理器,那么读取器和写入器控制器 服务必须是 Json 格式。
3.然后将 merged 关系提供给ConvertRecord
处理器。
流程:
从NiFi-1.7+版本开始,我们不需要在JsonTreeReader控制器服务中配置任何新的/额外的东西,因为NiFi能够读取每行格式的json 还有。
更新:
合并内容配置:
如果我们使用 MergeContent 处理器,请像下面的屏幕截图所示那样配置处理器。
分隔符策略
Text
标题
[
页脚
]
分界符
,
此外,我建议使用 MergeRecord 处理器而不是 MergeContent 处理器,它将负责创建有效的 json 消息数组。
【讨论】:
谢谢@Shu。我会试一试!或者有没有办法将 executeSql 输出转换为 csv 格式?如果可以,我会在流文件到达 AvroToJson 处理器之前直接提取。 @StrangerThinks 如果您想将 ExecuteSql 输出转换为 csv,那么您需要使用 Convert Record 处理器,我们无法将输出作为 CSV 文件 来自 ExecuteSQL 处理器。 刚刚尝试了该方法,但仍然获得单条记录。我使用了带有碎片整理策略的合并内容处理器。我注意到拆分和合并操作工作正常,但也许它仍然保留多行格式。如何强制合并操作将所有 json 数据加入单行格式? @StrangerThinks 请检查我对答案的更新..!! 完美!分隔符策略成功了! :) 我也会尝试使用 MergeRecord 处理器并对其进行测试。感谢@Shu的帮助以上是关于nifi ConvertRecord JSON to CSV 只获得一条记录?的主要内容,如果未能解决你的问题,请参考以下文章