NiFi中ConvertJSONToSQL生成带?的SQL且DELETE失效求助
核心说明
ConvertJSONToSQL生成带?的DELETE语句是正常设计,这是参数化预编译SQL的标准写法,PutSQL处理器本身支持读取FlowFile属性中的参数值来填充占位符——你用PutFile只能看到SQL模板,看不到绑定的参数,并非没有实际值。删除失败的原因要从以下几点排查:
参数映射是否正确
检查ConvertJSONToSQL的Parameter Binding Property Name配置(默认是sql.args),这个属性会将JSON中的字段值以sql.args.N.value、sql.args.N.type的形式存储在FlowFile属性中。可以用UpdateAttribute处理器查看这些属性,确认参数值和顺序是否与SQL中的占位符一一对应。数据类型是否匹配
确认目标表dummy的字段类型和JSON数据类型一致:比如state是INT类型,JSON中的16是否被识别为数字而非字符串;tenant_id是字符串类型,参数是否正确传递了文本值。可以开启ConvertJSONToSQL的Convert Data Types选项,让处理器自动转换数据类型。PutSQL配置是否正常
验证PutSQL的数据库连接池配置是否正确指向目标库,执行DELETE的用户是否有足够权限。如果开启了Batch Mode,要确保批量数据的参数数量和SQL占位符数量完全匹配,没有数据格式异常。目标数据是否真实存在
手动执行语句DELETE FROM dummy WHERE id = 1 AND feature_name = 'fff' AND state = 16 AND tenant_id = 'abc123',确认目标表中确实存在这条记录,排除数据本身不存在导致的删除失败。
内容的提问来源于stack exchange,提问作者santhosh

