You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Postgres插入数据时JOLTTransformJSON后执行PutDatabaseRecord报错如何解决

字段匹配问题影响说明

你提到的「表中部分列无对应JSON字段、JSON中部分字段无对应表列」不会直接触发本次报错:

  • PutDatabaseRecord默认会自动忽略JSON中没有对应表列的多余字段
  • 表列在JSON中缺失的场景,插入时会自动填充NULL,只要你的表列允许为NULL即可正常执行

报错根因

本次两个NumberFormatException报错均来自NiFi侧的类型转换逻辑异常,和字段名匹配无关:

  • 你用ConvertJSONToSQL+PutSQL可以正常执行的原因是,该流程会直接把JSON字段值作为字符串传入SQL参数,由Postgres侧做隐式类型转换存入varchar列,不会在NiFi侧做强制类型转换
  • 换成PutDatabaseRecord后,你的RecordReader配置大概率开启了自动Schema推导,或者显式把对应字段设为了DATE/TIMESTAMP/数值类型:
    1. 第一个报错中的日期字符串Tue Oct 05 15:58:22 EDT 2021被NiFi识别为日期类型,尝试转换为Unix时间戳数值存入,触发数值转换失败
    2. 第二个报错中的长字符串20201705101430被NiFi识别为长整型,该值超出BIGINT的最大可存储范围,触发数值转换失败

解决方案

你完全可以在该场景下使用PutDatabaseRecord,按以下步骤修正配置即可:

  1. 修正RecordReader(JsonTreeReader/JsonPathReader)配置
    • 关闭自动Schema推导,显式自定义Schema,所有字段的类型统一设置为STRING,示例Schema结构如下:
{
  "type": "record",
  "name": "detail_r_record",
  "fields": [
    {"name": "你的表列名1", "type": ["null", "string"], "default": null},
    {"name": "你的表列名2", "type": ["null", "string"], "default": null}
  ]
}
  1. 调整PutDatabaseRecord核心配置
    • Translate Field Names设为false,避免NiFi自动转换字段名大小写或格式
    • Database Type明确选择PostgreSQL,不要使用默认通用配置
    • Quote Column Identifiers设为true,避免Postgres列名大小写敏感导致的匹配问题
  2. 可选兜底方案:如果仍有类型转换异常,可在PutDatabaseRecord前添加UpdateRecord处理器,强制将所有字段值转换为字符串类型后再入库。

内容的提问来源于stack exchange,提问作者likeGreen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 05:45:02