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

Apache NiFi:字符串转数值及PutDatabaseRecord日期插入报错求助

问题1:使用UpdateRecord将字符串转为整数/数值类型
  • 先配置UpdateRecord的Record Reader和Record Writer(比如JSONReader+JSONWriter,匹配你的数据格式)
  • 在处理器的User-Defined Properties中添加字段转换规则:
    • 键:目标字段的路径(比如/QTDEMBALAGEM)
    • 值:用NiFi表达式语言的类型转换函数:
      • 转整数:toInt(/QTDEMBALAGEM)
      • 转浮点数:toDouble(/QTDEMBALAGEM)
  • 若使用Schema Registry,确保Reader和Writer的Schema里,目标字段类型已设为对应的int/double;无Schema则确认Writer允许动态类型转换
问题2:PutDatabaseRecord日期转换报错解决方案

针对datetime2转datetime超出范围的报错,按以下步骤排查修复:

  1. 核对字段映射:你的原始数据日期字段是"VALIDITY DATE",但转换用的是/DTAVALIDADE,确认字段名完全匹配,避免漏转换某个日期字段导致字符串直接插入数据库触发类型错误
  2. 替换日期转换函数:把toDate()换成toTimestamp(),因为Java Date对象和SQL Server datetime类型交互时可能存在精度兼容问题,示例:
    • toTimestamp(/VALIDITY DATE, 'yyyy-MM-dd HH:mm:ss.S')
    • toTimestamp(/DTAFABRICACAO, 'yyyy-MM-dd HH:mm:ss.S')
  3. 检查数据库表字段:确认表中日期字段类型是datetime(而非datetime2),且你的日期值在SQL Server datetime有效范围(1753-01-01 00:00:00 至 9999-12-31 23:59:59)内(你的2020/2023日期符合要求,需排查是否有其他异常数据)
  4. 调整JDBC连接参数:在数据库连接URL中添加sendStringParametersAsUnicode=false,避免字符串转日期时的编码问题,示例URL:
    jdbc:sqlserver://your-host:1433;databaseName=your-db;sendStringParametersAsUnicode=false
    
  5. 配置Record Writer:确保PutDatabaseRecord关联的Record Writer(如JSONRecordWriter)的Schema里,日期字段类型设为timestamp,与数据库字段类型对应

内容的提问来源于stack exchange,提问作者Brunno Augusto Ribeiro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 09:31:13