如何使用NiFi解析/提取属性名称及其值

时间:2018-12-26 23:47:36

标签: mysql apache apache-nifi

所以我有一个文件,格式如下:

{“ Field_1”:0.01,“ abc_id”:5,“ pqr_id”:“ 0”,“ xyz_id”:946715026,“ count”:130,“ Epoch”:“ 130723413”,“ measurement”:“ Grad / s“} {“ Field_2”:0.01,“ abc_id”:2,“ pqr_id”:“ 5”,“ xyz_id”:841712547,“ count”:190,“ Epoch”:“ 130723414”,“ measurement”:“ m / s2” }

-

-

-

-

-

.....等等,我有多个具有属性名称:values。

的行。

使用哪种处理器将属性分隔为字段/列并解析其各自的值。

我想以一种可以分别提取字段名称和值的方式来解析文件,因为我的最终目标是将文件数据馈入MySQL(MySQL中的表架构在下面定义:)

字段_1,字段_2,abc_id,pqr_id,xyz_id,计数,时期,度量值

如何在NiFi中实现整个用例?我想我可以使用某种正则表达式来实现这一点,但是我不确定哪种正则表达式可以帮助我获得所需的输出。任何建议深表感谢。谢谢!

1 个答案:

答案 0 :(得分:0)

这可以使用ConvertJSONToSQL和PutSQL流文件处理器来完成。解析JSON文件不需要任何其他步骤。

ConvertJSONToSQL处理器将JSON格式的FlowFile转换为UPDATE,INSERT或DELETE SQL语句,并且不直接将数据插入数据库。传入的FlowFile应该是平面JSON消息,这意味着它包含一个JSON元素,并且每个字段都映射到一个简单的类型。成功转换后,原始FlowFile被路由为“原始”关系,而SQL被路由为“ sql”关系。

PutSQL执行SQL UPDATE或INSERT命令。预期传入FlowFile的内容是要执行的SQL命令。该处理器实际上将数据插入数据库;

您的FlowFile:

{"Field_1":0.01,"abc_id":5,"pqr_id":"0","xyz_id":946715026,"count":130,"Epoch":"130723413","measurement":"Grad/s"} 

目标表应该在目标数据库中可用;测试设置使用数据库“ tempdb”和表“ test_db”。

表DDL语句:

create table test_db (Field_1 double, abc_id int, pqr_id varchar(5), xyz_id int(11), count int, Epoch varchar(15), measurement varchar(30));

还需要创建提供数据库连接池服务的DBCPConnectionPool控制器服务。

附加示例屏幕截图:

流量:

Nifi flow

DBCPConnectionPool:

请注意,连接URL具有目标数据库名称。

Controller service setting

ConvertJSONToSQL处理器: enter image description here

GetFile处理器可以是任何其他提供JSON格式输出流文件的处理器/流。