我尝试使用非常简单的SQL查询检索Oracle数据库中两个表的连接内容:
SELECT OWNER.CONTENT.ID, OWNER.CONTENT.TITLE, OWNER.BODYCONTENT.BODY
FROM OWNER.CONTENT, OWNER.BODYCONTENT
WHERE OWNER.CONTENT.ID = OWNER.BODYCONTENT.ID
AND OWNER.CONTENT.ID < 7
使用Oracle SQL Developer运行查询。
我在NiFi中使用ojdbc7.jar驱动程序。不包含连接的更简单的SQL查询可以使用“ExecuteSQL”,例如: G。
SELECT OWNER.CONTENT.ID, OWNER.CONTENT.TITLE
FROM OWNER.CONTENT
WHERE OWNER.CONTENT.ID < 7
我还尝试过其他SQL语句(例如INNER JOIN)。查询使用Oracle SQL Developer按预期工作,但不在NiFi中工作。有人能帮助我吗?
NiFi中的错误消息:
2016-05-03 11:30:02,413 ERROR [定时器驱动的过程线程-6] o.a.nifi.processors.standard.ExecuteSQL org.apache.nifi.processor.exception.ProcessException: java.sql.SQLFeatureNotSupportedException:不支持的功能 org.apache.nifi.processors.standard.ExecuteSQL $ 1.process(ExecuteSQL.java:160) 〜[nifi-standard-processors-0.6.1.jar:0.6.1] at org.apache.nifi.controller.repository.StandardProcessSession.write(StandardProcessSession.java:1954) 〜[na:na] at org.apache.nifi.processors.standard.ExecuteSQL.onTrigger(ExecuteSQL.java:152) 〜[nifi-standard-processors-0.6.1.jar:0.6.1] at org.apache.nifi.processor.AbstractProcessor.onTrigger(AbstractProcessor.java:27) [nifi-api-0.6.1.jar:0.6.1] at org.apache.nifi.controller.StandardProcessorNode.onTrigger(StandardProcessorNode.java:1059) [nifi-framework-core-0.6.1.jar:0.6.1] at org.apache.nifi.controller.tasks.ContinuallyRunProcessorTask.call(ContinuallyRunProcessorTask.java:136) [nifi-framework-core-0.6.1.jar:0.6.1] at org.apache.nifi.controller.tasks.ContinuallyRunProcessorTask.call(ContinuallyRunProcessorTask.java:47) [nifi-framework-core-0.6.1.jar:0.6.1] at org.apache.nifi.controller.scheduling.TimerDrivenSchedulingAgent $ 1.run(TimerDrivenSchedulingAgent.java:123) [nifi-framework-core-0.6.1.jar:0.6.1] at java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:471) [na:1.7.0_60] at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:304) [na:1.7.0_60] at java.util.concurrent.ScheduledThreadPoolExecutor中的$ ScheduledFutureTask.access $ 301(ScheduledThreadPoolExecutor.java:178) [na:1.7.0_60] at java.util.concurrent.ScheduledThreadPoolExecutor中的$ ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [na:1.7.0_60] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [na:1.7.0_60] at java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:615) [na:1.7.0_60] at java.lang.Thread.run(Thread.java:745)[na:1.7.0_60] 引起:java.sql.SQLFeatureNotSupportedException:不支持 特色在 oracle.jdbc.driver.ClobAccessor.getBytes(ClobAccessor.java:534) 〜[na:na] at oracle.jdbc.driver.GeneratedStatement.getBytes(GeneratedStatement.java:151) 〜[na:na] at oracle.jdbc.driver.GeneratedScrollableResultSet.getBytes(GeneratedScrollableResultSet.java:326) 〜[na:na] at org.apache.commons.dbcp.DelegatingResultSet.getBytes(DelegatingResultSet.java:241) 〜[na:na] at org.apache.commons.dbcp.DelegatingResultSet.getBytes(DelegatingResultSet.java:241) 〜[na:na] at org.apache.nifi.processors.standard.util.JdbcCommon.convertToAvroStream(JdbcCommon.java:105) 〜[nifi-standard-processors-0.6.1.jar:0.6.1] at org.apache.nifi.processors.standard.util.JdbcCommon.convertToAvroStream(JdbcCommon.java:72) 〜[nifi-standard-processors-0.6.1.jar:0.6.1] at org.apache.nifi.processors.standard.ExecuteSQL $ 1.process(ExecuteSQL.java:158) 〜[nifi-standard-processors-0.6.1.jar:0.6.1] ... 14个常见帧 省略
答案 0 :(得分:3)
看起来你的一个返回列是BINARY,VARBINARY,LONGVARBINARY,ARRAY,BLOB或CLOB,当NiFi获取此列的值时,它调用ResultSet getBytes(i)并最终调用Oracle Driver抛出不支持的异常的方法。
我创建了这个JIRA: https://issues.apache.org/jira/browse/NIFI-1841
不完全确定解决方案是什么,因为我们必须依赖JDBC接口,如果某个特定的数据库驱动程序不支持我们依赖的东西,那么我们只能这么做。