我有一个列类型为日期时间的 mysql 目标表。
我的nifi流程就像convertJsontoSQL -> putsql(到这个目标表中)。 putsql 的操作是删除。
转换 Jsontosql 后,我得到一个值“2023-03-28 15:54:28”,这是一个有效的时间戳。
但流程失败并出现以下错误:
duetoThevalue of the sqlargs. 14.value is '2023-03-28 15:54:28',
which cannot be converted to a timestamp; routing to failure: java.sql.SQLDataException:
The value of the sql.args. 14.value is '2023-03-28 15:54:28',
which cannot be converted to a timestamp
- Caused by: java. text. ParseException: Unparseable date: "2023-03-28 15:54:28"
我可以使用相同的值“2023-03-28 15:54:28”手动插入示例日期时间列。并且还可以使用where子句作为该值来删除记录。
我不明白为什么Nifi仍然无法将其转换为时间戳。
如有任何建议,我们将不胜感激。
部分读取属性/sql.args.N.format
日期、时间和时间戳格式都支持自定义格式或根据 java.time.format.DateTimeFormatter 指定的命名格式('yyyy-MM-dd'、'ISO_OFFSET_DATE_TIME')。如果未指定,长值输入预计为 unix 纪元(从 1970/1/1 起的毫秒),或日期格式为 'yyyy-MM-dd' 的字符串值,'HH:mm: ss.SSS' 代表时间
所以,你需要设置属性
sql.args.14.format = yyyy-MM-dd HH:mm:ss
作为替代选项 - 尝试设置
sql.args.14.type = 1
(CHAR) - 在这种情况下,转换将在数据库级别完成。
我遇到了同样的问题,这是因为日期格式不完整,nifi 也期望毫秒,就像这样
2024-03-27 00:00:00.000
即
yyyy-MM-dd HH:mm:ss.SSS
使用此格式后,NiFi 不再抛出错误。