所以我有一个文件,格式如下:
{“ 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中实现整个用例?我想我可以使用某种正则表达式来实现这一点,但是我不确定哪种正则表达式可以帮助我获得所需的输出。任何建议深表感谢。谢谢!
答案 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控制器服务。
附加示例屏幕截图:
流量:
DBCPConnectionPool:
请注意,连接URL具有目标数据库名称。
GetFile处理器可以是任何其他提供JSON格式输出流文件的处理器/流。