NiFi使用PutDatabaseRecord写入含order字段的JSON到数据库报错如何解决
问题根因
这不是NiFi的Bug,是PutDatabaseRecord默认配置下没有对标识符做对应数据库的转义导致的。Order属于SQL标准保留关键字,虽然你预想它会被引号包裹,但默认配置下PutDatabaseRecord生成INSERT语句时,不会主动给所有字段名加数据库对应的标识符转义符,解析时Order会被识别为SQL语法中的ORDER BY关键字,自然就会报语法错误。
不修改字段名的解决方法
方案1:调整PutDatabaseRecord的标识符转义配置
这是最简便的方案,直接修改PutDatabaseRecord处理器配置:
找到Quote Identifier配置项,将值改为QUOTE_ALL_IDENTIFIERS,所有字段名生成SQL时都会被对应数据库的转义符包裹:
- PostgreSQL、Oracle等库会自动加双引号,
Order会变成"Order" - SQL Server会自动加方括号,
Order会变成[Order] - MySQL会自动加反引号,
Order会变成`Order`
改完后重新执行流程即可正常写入。
方案2:前置字段映射
如果不能修改PutDatabaseRecord的全局转义配置,可以在处理器前加一个UpdateRecord处理器,新增映射规则:/Order -> /\Order`(转义符替换为你用的数据库对应的格式即可),写入时会自动识别转义后的字段名,正常写入数据库的Order`字段。
内容的提问来源于stack exchange,提问作者miroha
相关产品推荐
相关产品推荐

