值无法转换为时间戳(Nifi 中的错误)

问题描述 投票:0回答:2

我有一个列类型为日期时间的 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仍然无法将其转换为时间戳。

如有任何建议,我们将不胜感激。

mysql etl apache-nifi data-warehouse
2个回答
1
投票

https://nifi.apache.org/docs/nifi-docs/components/org.apache.nifi/nifi-standard-nar/1.9.0/org.apache.nifi.processors.standard.PutSQL/

部分读取属性/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) - 在这种情况下,转换将在数据库级别完成。


0
投票

我遇到了同样的问题,这是因为日期格式不完整,nifi 也期望毫秒,就像这样

2024-03-27 00:00:00.000

yyyy-MM-dd HH:mm:ss.SSS

使用此格式后,NiFi 不再抛出错误。

详细说明请参考此链接: https://community.cloudera.com/t5/Support-Questions/value-cannot-be-converted-to-a-timestamp/m-p/382750/highlight/true#M244681

© www.soinside.com 2019 - 2024. All rights reserved.