Robin Giesen created NIFI-7973:
----------------------------------
Summary: Oracle JDBC - ExcecuteSqlRecord - Unable to determine
Avro Schema - Decimal types
Key: NIFI-7973
URL: https://issues.apache.org/jira/browse/NIFI-7973
Project: Apache NiFi
Issue Type: Bug
Components: Core Framework
Affects Versions: 1.12.1
Environment: Centos 8.2
JDK 11
Oracle 11.2
Oracle JDBC 8
Reporter: Robin Giesen
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)