[
https://issues.apache.org/jira/browse/NIFI-7973?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Matt Burgess updated NIFI-7973:
-------------------------------
Status: Patch Available (was: In Progress)
> Oracle JDBC - ExecuteSqlRecord and other components fail on zero precision
> --------------------------------------------------------------------------
>
> Key: NIFI-7973
> URL: https://issues.apache.org/jira/browse/NIFI-7973
> Project: Apache NiFi
> Issue Type: Bug
> Components: Extensions
> Environment: Centos 8.2
> JDK 11
> Oracle 11.2
> Oracle JDBC 8
> Reporter: Robin Giesen
> Assignee: Matt Burgess
> Priority: Major
> Labels: AvroSchema, AvroTypeUtil, ExecuteSqlRecord, Oracle
> Time Spent: 10m
> Remaining Estimate: 0h
>
> Hi there,
> during the upgrade from 11.4 to 12.1 we noticed that isn't longer possible to
> reuse the old canvas and settings because the ExecuteSqlRecord Processor
> cannot handle Oracles Number conversion. We use a ExecuteSqlRecord processor
> with incoming SQL statements and an AvroRecordWriter where the schema is
> determined on the fly. We also tested the ExceuteSql Processor which can use
> default precision and scale. Hence, there was no error. In the 12.0 version,
> the error doesn't occur.
>
> We tested the following combinations:
> 1.
> SELECT 1 as test from dual => FAIL
> 2.
> SELECT CAST(1 as number(12,2)) as test from dual => SUCCESS
> 2020-10-30 18:08:24,677 ERROR [Timer-Driven Process Thread-9]
> o.a.n.p.standard.ExecuteSQLRecord
> ExecuteSQLRecord[id=7a50a193-0175-1000-f2e7-78054e6dcba0] Unable to execute
> SQL select query SELECT cast(1 as number(12,2)) TEST, 1 as test2 FROM DUAL
> due to org.apache.nifi.processor.exception.ProcessException:
> java.io.IOException: org.apache.nifi.processor.exception.ProcessException:
> Could not determine the Avro Schema to use for writing the content. No
> FlowFile to route to failure:
> org.apache.nifi.processor.exception.ProcessException: java.io.IOException:
> org.apache.nifi.processor.exception.ProcessException: Could not determine the
> Avro Schema to use for writing the content
> org.apache.nifi.processor.exception.ProcessException: java.io.IOException:
> org.apache.nifi.processor.exception.ProcessException: Could not determine the
> Avro Schema to use for writing the content
> at
> org.apache.nifi.processors.standard.AbstractExecuteSQL.lambda$onTrigger$1(AbstractExecuteSQL.java:302)
> at
> org.apache.nifi.controller.repository.StandardProcessSession.write(StandardProcessSession.java:2751)
> at
> org.apache.nifi.processors.standard.AbstractExecuteSQL.onTrigger(AbstractExecuteSQL.java:298)
> at
> org.apache.nifi.processor.AbstractProcessor.onTrigger(AbstractProcessor.java:27)
> at
> org.apache.nifi.controller.StandardProcessorNode.onTrigger(StandardProcessorNode.java:1174)
> 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.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
> at
> java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305)
> at
> java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)
> at
> java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
> at
> java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
> at java.base/java.lang.Thread.run(Thread.java:834)
> Caused by: java.io.IOException:
> org.apache.nifi.processor.exception.ProcessException: Could not determine the
> Avro Schema to use for writing the content
> at
> org.apache.nifi.processors.standard.sql.RecordSqlWriter.writeResultSet(RecordSqlWriter.java:88)
> at
> org.apache.nifi.processors.standard.AbstractExecuteSQL.lambda$onTrigger$1(AbstractExecuteSQL.java:300)
> ... 13 common frames omitted
> Caused by: org.apache.nifi.processor.exception.ProcessException: Could not
> determine the Avro Schema to use for writing the content
> at
> org.apache.nifi.avro.AvroRecordSetWriter.createWriter(AvroRecordSetWriter.java:154)
> at jdk.internal.reflect.GeneratedMethodAccessor410.invoke(Unknown Source)
> at
> java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.base/java.lang.reflect.Method.invoke(Method.java:566)
> at
> org.apache.nifi.controller.service.StandardControllerServiceInvocationHandler.invoke(StandardControllerServiceInvocationHandler.java:254)
> at
> org.apache.nifi.controller.service.StandardControllerServiceInvocationHandler.invoke(StandardControllerServiceInvocationHandler.java:105)
> at com.sun.proxy.$Proxy167.createWriter(Unknown Source)
> at
> org.apache.nifi.processors.standard.sql.RecordSqlWriter.writeResultSet(RecordSqlWriter.java:81)
> ... 14 common frames omitted
> Caused by: org.apache.nifi.schema.access.SchemaNotFoundException: Failed to
> compile Avro Schema
> at
> org.apache.nifi.avro.AvroRecordSetWriter.createWriter(AvroRecordSetWriter.java:145)
> ... 21 common frames omitted
> Caused by: java.lang.IllegalArgumentException: Invalid decimal precision: 0
> (must be positive)
> at org.apache.avro.LogicalTypes$Decimal.validate(LogicalTypes.java:206)
> at org.apache.avro.LogicalType.addToSchema(LogicalType.java:70)
> at org.apache.avro.LogicalTypes$Decimal.addToSchema(LogicalTypes.java:182)
> at
> org.apache.nifi.avro.AvroTypeUtil.buildAvroSchema(AvroTypeUtil.java:263)
> at org.apache.nifi.avro.AvroTypeUtil.buildAvroField(AvroTypeUtil.java:127)
> at
> org.apache.nifi.avro.AvroTypeUtil.buildAvroSchema(AvroTypeUtil.java:119)
> at
> org.apache.nifi.avro.AvroTypeUtil.extractAvroSchema(AvroTypeUtil.java:99)
> at
> org.apache.nifi.avro.AvroRecordSetWriter.createWriter(AvroRecordSetWriter.java:142)
> ... 21 common frames omitted
--
This message was sent by Atlassian Jira
(v8.3.4#803005)