apache nifi - 使用不同的分隔符来处理文本文件
apache nifi - use different separators to process a text fie
我有一个包含以下内容的文本文件
2020-10-19 12:12:00.001;alan;male;{"id":"255","val":"22","type":"1","location":"12530,95823","status":1}
2020-10-19 12:12:00.001;anna;female;{"id":"256","val":"12","type":"1","location":"12140,25630","status":2}
我想将其转换为 csv 文件,
首先分开;最后一列需要被视为 json 对象并提取其值。输出需要如下所示
date,name,gender,id,val,type,location1,location2,status
2020-10-19 12:12:00.001,alan,male,255,22,1,12530,95823,1
2020-10-19 12:12:00.001;anna,female,256,12,1,12140,25630,2
我是 nifi 的初学者,我想弄清楚处理器及其配置来执行此转换过程。我已经尝试过 ConvertRecord 并且只能通过 ; 分隔内容.
如果有人可以建议一种方法来执行此过程,那将是很大的帮助。
不容易!但很有趣。
我希望结构没有改变,例如:json 列获得更多属性!
所以我会这样做:
1 - 按行拆分文本(一行)- 删除 header 如果有
2 - ExtractText(创建名为 body
的属性,值为 (?s)(^.*$)
)
3 - 使用两个属性更新属性:
csv = ${body:substringBefore(';{'):replace(';',',')}
json = ${body:substringAfter(';{')}
4 - ReplaceText - 并将 {${json}
作为替换值,替换策略:始终替换
5 - EvaluateJson 并提取所有 json 属性
6 - 使用此 def
的 Attributestocsv
csv,id,val,type,location,status
7 - mergecontent - 添加 header(您的列名),分隔符策略 = 文本和分隔符 Shift+Enter(换行符)
走了很长一段路,也许不是那么理想,您可能想研究 jolt 以获得更好的性能 - 但我懒得考虑 jolt 规格 :)。
我有这个模板 - 但我无法加载到这里,因为它太大了,也不能使用任何文件共享服务,所以?
此外,如果您手头有 mysql 数据库,云只需将其加载为 csv 并使用 json_extract 函数
SELECT JSON_EXTRACT(name, "$.id") AS name
FROM table
我有一个包含以下内容的文本文件
2020-10-19 12:12:00.001;alan;male;{"id":"255","val":"22","type":"1","location":"12530,95823","status":1}
2020-10-19 12:12:00.001;anna;female;{"id":"256","val":"12","type":"1","location":"12140,25630","status":2}
我想将其转换为 csv 文件, 首先分开;最后一列需要被视为 json 对象并提取其值。输出需要如下所示
date,name,gender,id,val,type,location1,location2,status
2020-10-19 12:12:00.001,alan,male,255,22,1,12530,95823,1
2020-10-19 12:12:00.001;anna,female,256,12,1,12140,25630,2
我是 nifi 的初学者,我想弄清楚处理器及其配置来执行此转换过程。我已经尝试过 ConvertRecord 并且只能通过 ; 分隔内容. 如果有人可以建议一种方法来执行此过程,那将是很大的帮助。
不容易!但很有趣。
我希望结构没有改变,例如:json 列获得更多属性!
所以我会这样做:
1 - 按行拆分文本(一行)- 删除 header 如果有
2 - ExtractText(创建名为 body
的属性,值为 (?s)(^.*$)
)
3 - 使用两个属性更新属性:
csv = ${body:substringBefore(';{'):replace(';',',')}
json = ${body:substringAfter(';{')}
4 - ReplaceText - 并将 {${json}
作为替换值,替换策略:始终替换
5 - EvaluateJson 并提取所有 json 属性
6 - 使用此 def
的 Attributestocsvcsv,id,val,type,location,status
7 - mergecontent - 添加 header(您的列名),分隔符策略 = 文本和分隔符 Shift+Enter(换行符)
走了很长一段路,也许不是那么理想,您可能想研究 jolt 以获得更好的性能 - 但我懒得考虑 jolt 规格 :)。
我有这个模板 - 但我无法加载到这里,因为它太大了,也不能使用任何文件共享服务,所以?
此外,如果您手头有 mysql 数据库,云只需将其加载为 csv 并使用 json_extract 函数
SELECT JSON_EXTRACT(name, "$.id") AS name
FROM table