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

w46czmvw  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(864)

所以我有一个文件,格式如下:
{“field_1”:0.01,“_id”:5,“pqr_id”:“0”,“xyz_id”:946715026,“count”:130,“epoch”:“130723413”,“measurement”:“grad/s”}{“field_2”:0.01,“_id”:2,“pqr_id”:“5”,“xyz_id”:841712547,“count”:190,“epoch”:“130723414”,“measurement”:“m/s2”}

…..以此类推,我有多个属性名为:values的行。
使用哪个处理器将属性作为字段/列分隔并解析其各自的值。
我希望以一种可以分别提取字段名和值的方式来解析文件,因为我的最终目标是将文件数据提供给mysql(mysql中的表模式定义如下:)
字段\u 1、字段\u 2、 \u id、pqr \u id、xyz \u id、计数、历元、测量
如何在nifi中实现整个用例?我想我可以使用某种正则表达式来实现这一点,但我不确定什么正则表达式可以帮助我获得所需的输出。任何建议都非常感谢。谢谢!

h9vpoimq

h9vpoimq1#

这可以使用convertjsontosql和putsql流文件处理器来完成。解析json文件不需要额外的步骤。
convertjsontosql处理器将json格式的flowfile转换为update、insert或delete sql语句,而不直接将数据插入数据库。传入的flowfile应该是平面json消息,这意味着它由单个json元素组成,每个字段Map到一个简单类型。成功转换后,原始流文件被路由到“原始”关系,sql被路由到“sql”关系。
putsql执行sql更新或插入命令。传入流文件的内容应该是要执行的sql命令。这个处理器实际上将数据插入数据库;
您的流文件:

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

目标数据库中应有目标表;测试设置使用数据库'tempdb'和表'test\u 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控制器服务,它提供数据库连接池服务。
附加示例屏幕截图:
流量:

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

convertjsontosql处理器:

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

相关问题