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 processorsplit 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 只获得一条记录?的主要内容,如果未能解决你的问题,请参考以下文章

在NiFi中使用ConvertRecord处理Null

Nifi JSON正则表达式

✨Nifi系列✨ Nifi同步并解析FTP服务器Excel文件,并存储到数据库

Nifi:NIFI 中的 Json 到 CSV 转换器

尼菲 |使用 Nifi 表达式进行 Json 解析

json Apache NiFi 1.0.0 swagger.json