Hi Community,

We are facing an error with the PutSQL processor while inserting a batch of 20 
flowfiles per transaction. Each flowfile contains a record to insert.

Quite often, we get an error that it couldn't insert a record into the 
database, so the flowfile exits on Retry, but when it retries, it succeeds.


The error we get from Nifi is the following:

2022-08-09 12:23:15,803 ERROR [Timer-Driven Process Thread-24] 
o.apache.nifi.processors.standard.PutSQL 
PutSQL[id=aae45348-0181-1000-ffff-ffffaaa08fa0] Failed to update database due 
to a failed batch update, java.sql.BatchUpdateException: invalid arguments in 
call. There were a total of 1 FlowFiles that failed, 0 that succeeded, and 1 
that were not execute and will be routed to retry; : 
java.sql.BatchUpdateException: invalid arguments in call
java.sql.BatchUpdateException: invalid arguments in call
        at 
oracle.jdbc.driver.OraclePreparedStatement.generateBatchUpdateException(OraclePreparedStatement.java:10345)
        at 
oracle.jdbc.driver.OraclePreparedStatement.executeBatchWithoutQueue(OraclePreparedStatement.java:10107)
        at 
oracle.jdbc.driver.OraclePreparedStatement.executeLargeBatch(OraclePreparedStatement.java:9987)
        at 
oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:9939)
        at 
oracle.jdbc.driver.OracleStatementWrapper.executeBatch(OracleStatementWrapper.java:261)
        at 
org.apache.commons.dbcp2.DelegatingStatement.executeBatch(DelegatingStatement.java:242)
        at 
org.apache.commons.dbcp2.DelegatingStatement.executeBatch(DelegatingStatement.java:242)
        at 
org.apache.nifi.processors.standard.PutSQL.lambda$null$10(PutSQL.java:390)
        at 
org.apache.nifi.processor.util.pattern.ExceptionHandler.execute(ExceptionHandler.java:127)
        at 
org.apache.nifi.processors.standard.PutSQL.lambda$new$12(PutSQL.java:388)
        at 
org.apache.nifi.processor.util.pattern.PutGroup.putFlowFiles(PutGroup.java:94)
        at org.apache.nifi.processor.util.pattern.Put.onTrigger(Put.java:102)
        at 
org.apache.nifi.processors.standard.PutSQL.lambda$onTrigger$20(PutSQL.java:600)
        at 
org.apache.nifi.processor.util.pattern.PartialFunctions.onTrigger(PartialFunctions.java:114)
        at 
org.apache.nifi.processor.util.pattern.RollbackOnFailure.onTrigger(RollbackOnFailure.java:184)
        at org.apache.nifi.processors.standard.PutSQL.onTrigger(PutSQL.java:600)
        at 
org.apache.nifi.controller.StandardProcessorNode.onTrigger(StandardProcessorNode.java:1176)
        at 
org.apache.nifi.controller.tasks.ConnectableTask.invoke(ConnectableTask.java:213)
        at 
org.apache.nifi.controller.scheduling.TimerDrivenSchedulingAgent$1.run(TimerDrivenSchedulingAgent.java:117)
        at org.apache.nifi.engine.FlowEngine$2.run(FlowEngine.java:110)
        at 
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
        at 
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
        at 
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)

Do you know what is the cause of the error? How does the PutSQL processor work 
behind the scenes?

Some data of the flow to take into account in case it contributes:

  *   1 million data approx every 24 hours
  *   20 mb of data approx (attached image)
  *   1 flowfile > 1 row

I attach the PutSQL configuration and and the Status History of "Bytes In" for 
the last 5 minutes.

Is there any configuration or way in PutSQL to capture the error message 
returned by the database? For example, through an attribute of the flow file 
that failed.

Thanks!
Sergio

Reply via email to