2017-02-20 149 views
1

我正在尝试从'Teradata'中读取数据并将其填充到'Oracle'数据库中。请找我的流量之下,PutSql - 日期格式错误

'的ExecuteSQL' - > 'SplitAvro' - > 'ConvertAvroToJSON' - > 'ConvertJSONToSQL' - > 'PutSQL'

错误消息: 无法为StandardFlowFileRecord 由于组织更新数据库.apache.nifi.processor.exception.ProcessException:sql.args.7.value的值是'2999-12',它不能转换为时间戳;路由到失败:org.apache.nifi.processor.exception.ProcessException:sql.args.7.value的值是'2999-12',无法转换为时间戳

看来我需要格式化日期字段,然后将其填充到Oracle中。你能解释一下哪个处理器应该包含这个日期格式化逻辑吗?

Furthur分析显示特定值被'ConvertJSONToSQL'处理器截断。 输入值到'ConvertJSONToSQL'处理器 - “2002-02-04” 处理值 - “2002-02”

回答

0

看起来您可能会碰到NIFI-2625。在即将发布的NiFi版本中(由于NIFI-3430),您可以通过在属性中指定日期格式来解决此问题,但可能无法修复您所看到的截断值。

如果您知道包含时间戳值的字段的名称(或JSON数组中的索引,例如上面的“7”,其实际上是索引6),则可以在ConvertJSONToSQL之前使用EvaluateJsonPath,以确保您保留正确的原始值(假设您称为属性sql.args.7.original)。然后在ConvertJSONToSQL之后,您可以使用UpdateAttribute将错误的/截断的值替换为正确的原始值,也许可以将属性sql.args.7.value设置为${sql.args.7.original}

+0

感谢您的回复。我已经更新了如下流程, ExecuteSQL - > SplitAvro - > ConvertAvroToJSON - > EvaluateJsonPath - > ConvertJSONToSQL - > UpdateAttribute - > PutSQL 现在我可以保留原始日期值并将其发送到PutSQL处理器。问题是PutSQL处理器没有考虑任何fromat的有效性。我试过以下不同的格式, '2015-12-31''2015-12-31 12:12:00''2015-12-31 12:12:00:000' 所有结果都一样'无法转换为时间戳'错误。你的建议会有帮助。 NIFI-3430有没有解决方法? – Pons