GridDB集成NiFi时PutDatabaseRecord报setObject索引1类型4错误
报错信息
putdatabaserecord.error Unable to setObject() with value 1 at index 1 of type 4
根因分析
该报错是GridDB JDBC驱动的类型校验机制导致的:
PutDatabaseRecord处理器在执行插入时会默认调用setObject()方法传入字段值,GridDB不支持该方法的隐式类型转换,会直接校验参数类型和表字段定义是否完全匹配,而PostgreSQL的JDBC驱动支持自动类型转换,因此切换到PostgreSQL可以正常运行。
修复方案
- 校准字段类型映射
对比Avro Schema定义和GridDB表结构的字段类型,确保一一对应:- Avro的
int类型必须对应GridDB的INTEGER类型 - Avro的
long类型必须对应GridDB的LONG类型 - Avro的逻辑时间类型需要提前转换为
Timestamp格式,对应GridDB的TIMESTAMP类型
- Avro的
- 调整PutDatabaseRecord处理器配置
- 将
Database Type参数设置为GENERIC,避免使用其他数据库预设的类型适配规则 - 开启
Quote Column Names配置,规避字段名大小写识别问题 - 显式设置
Statement Type为INSERT,关闭自动判断逻辑
- 将
- 备选降级方案
如果上述配置调整后仍无法解决问题,可以在PutDatabaseRecord前新增一个ConvertRecord处理器,将Avro格式转换为Plain Text格式的INSERT语句,再使用PutSQL处理器执行,绕过自动类型转换逻辑。
内容的提问来源于stack exchange,提问作者Muhammad Ateeb
相关产品推荐
相关产品推荐

