Apache nifi 为什么Oracle数据库查询(Oracle数据库表';的列中的长数据类型)没有在QueryDatabaseTable Apache Nifi中执行?

Apache nifi 为什么Oracle数据库查询(Oracle数据库表';的列中的长数据类型)没有在QueryDatabaseTable Apache Nifi中执行?,apache-nifi,Apache Nifi,我有一个Oracle数据库,其列设置为“long”数据类型。该列包含XML数据。我正在尝试将数据从Oracle传输到Bigquery 我尝试了以下设置,效果非常好: ExecuteSQL -> AvroToJson ->PutBigQueryBatch 但是,当我尝试使用以下设置进行增量加载时,它抛出了一个错误: QueryDatabaseTable -> AvroToJson ->PutBigQueryBatch 我试图调查这个问题,发现Github已经解决了。这是

我有一个Oracle数据库,其列设置为“
long
”数据类型。该列包含
XML
数据。我正在尝试将数据从Oracle传输到Bigquery

我尝试了以下设置,效果非常好:

ExecuteSQL -> AvroToJson ->PutBigQueryBatch
但是,当我尝试使用以下设置进行增量加载时,它抛出了一个错误:

QueryDatabaseTable -> AvroToJson ->PutBigQueryBatch
我试图调查这个问题,发现Github已经解决了。这是错误还是我犯了错误

错误:

2020-01-14 19:24:56,184 ERROR [Timer-Driven Process Thread-41] o.a.n.p.standard.QueryDatabaseTable QueryDatabaseTable[id=016f11ea-e0e7-1523-fbf7-428dad259c96] Unable to execute SQL select query SELECT * FROM (select * from table) table due to org.apache.nifi.processor.exception.ProcessException: Error during database query or conversion of records.: org.apache.nifi.processor.exception.ProcessException: Error during database query or conversion of records.
org.apache.nifi.processor.exception.ProcessException: Error during database query or conversion of records.
    at org.apache.nifi.processors.standard.AbstractQueryDatabaseTable.lambda$onTrigger$0(AbstractQueryDatabaseTable.java:295)
    at org.apache.nifi.controller.repository.StandardProcessSession.write(StandardProcessSession.java:2730)
    at org.apache.nifi.processors.standard.AbstractQueryDatabaseTable.onTrigger(AbstractQueryDatabaseTable.java:291)
    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(Unknown Source)
    at java.util.concurrent.FutureTask.runAndReset(Unknown Source)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(Unknown Source)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: org.apache.nifi.processor.exception.ProcessException: java.sql.SQLException: Stream has already been closed
    at org.apache.nifi.processors.standard.sql.DefaultAvroSqlWriter.writeResultSet(DefaultAvroSqlWriter.java:51)
    at org.apache.nifi.processors.standard.AbstractQueryDatabaseTable.lambda$onTrigger$0(AbstractQueryDatabaseTable.java:293)
    ... 13 common frames omitted
Caused by: java.sql.SQLException: Stream has already been closed
    at oracle.jdbc.driver.LongAccessor.getBytesInternal(LongAccessor.java:156)
    at oracle.jdbc.driver.LongAccessor.getBytes(LongAccessor.java:126)
    at oracle.jdbc.driver.LongAccessor.getString(LongAccessor.java:201)
    at oracle.jdbc.driver.T4CLongAccessor.getString(T4CLongAccessor.java:450)
    at oracle.jdbc.driver.CharCommonAccessor.getObject(CharCommonAccessor.java:788)
    at oracle.jdbc.driver.OracleResultSetImpl.getObject(OracleResultSetImpl.java:1026)
    at org.apache.commons.dbcp2.DelegatingResultSet.getObject(DelegatingResultSet.java:733)
    at org.apache.commons.dbcp2.DelegatingResultSet.getObject(DelegatingResultSet.java:733)
    at org.apache.nifi.util.db.JdbcCommon.convertToAvroStream(JdbcCommon.java:337)
    at org.apache.nifi.processors.standard.sql.DefaultAvroSqlWriter.writeResultSet(DefaultAvroSqlWriter.java:49)
    ... 14 common frames omitted

我试图将
表/列名正常化
以及
Avro逻辑类型
设置为
True
False
,在所有四种组合中,它仍然抛出一个错误。有任何已知的修复方法吗?

尝试在sql查询中将XML转换为CLOB。由于它是“长”数据类型,我无法进行任何转换@daggettXMLTYPE.getclobval()或xmlserilize()@daggett我在这个问题上犯了一个错误。数据类型不是“XMLtype”,而是“Long”。“Long”数据类型列包含XML数据(不相关)。