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超出范围的报错,按以下步骤排查修复:
- 核对字段映射:你的原始数据日期字段是
"VALIDITY DATE",但转换用的是/DTAVALIDADE,确认字段名完全匹配,避免漏转换某个日期字段导致字符串直接插入数据库触发类型错误 - 替换日期转换函数:把
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')
- 检查数据库表字段:确认表中日期字段类型是
datetime(而非datetime2),且你的日期值在SQL Server datetime有效范围(1753-01-01 00:00:00 至 9999-12-31 23:59:59)内(你的2020/2023日期符合要求,需排查是否有其他异常数据) - 调整JDBC连接参数:在数据库连接URL中添加
sendStringParametersAsUnicode=false,避免字符串转日期时的编码问题,示例URL:jdbc:sqlserver://your-host:1433;databaseName=your-db;sendStringParametersAsUnicode=false - 配置Record Writer:确保PutDatabaseRecord关联的Record Writer(如JSONRecordWriter)的Schema里,日期字段类型设为
timestamp,与数据库字段类型对应
内容的提问来源于stack exchange,提问作者Brunno Augusto Ribeiro
相关产品推荐
相关产品推荐

