2017-02-20 137 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