2017-02-20 7 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に同じデータを入力する前にDateフィールドをフォーマットします。どのプロセッサにこの日付フォーマットロジックを含めるべきか教えてください。

詳細な分析によれば、特定の値は 'ConvertJSONToSQL'プロセッサによって切り捨てられています。あなたはNIFI-2625に実行されているように見えます「2002-02」

答えて

0

- 「2002年2月4日」 処理値 - 「ConvertJSONToSQL」プロセッサへ 入力値。 NiFiの今後のリリース(NIFI-3430のため)では、属性に日付形式を指定することでこの問題を回避できますが、表示されている切り捨てられた値は修正されない可能性があります。

タイムスタンプ値を含むフィールドの名前(またはJSON配列のインデックス(JSON配列のインデックス6が実際には「7」など)がわかっている場合は、ConvertJSONToSQLより先にEvaluateJsonPathを使用して、正しい元の値を保持するようにします(属性sql.args.7.originalと呼んでいます)。その後、ConvertJSONToSQLの後に、正確な元の値で正しくない/切り捨てられた値を置換するためにを使用できます。おそらく、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