问题
当你使用查询选择与Apache火花JDBC数据源连接Oracle数据库,不能用这个错误:
java.sql。SQLSyntaxErrorException: ora - 00911:无效的字符
例如,如果您运行下面的JDBC连接:
% scala val df =火花。读.format (jdbc) .option (“url”,“< url >”) .option(“查询”、“SELECT * FROM oracle_test_table)”) .option(“用户”,“<用户>”).option(“密码”,“<密码>”).option(“司机”,“oracle.jdbc.driver.OracleDriver”) .load () df.show ()
你会看到这个错误信息:
java.sql。SQLSyntaxErrorException: ora - 00911:无效的字符oracle.jdbc.driver.T4CTTIoer.processError (T4CTTIoer.java: 447) oracle.jdbc.driver.T4CTTIoer.processError (T4CTTIoer.java: 396) oracle.jdbc.driver.T4C8Oall.processError (T4C8Oall.java: 951) oracle.jdbc.driver.T4CTTIfun.receive (T4CTTIfun.java: 513)
导致
错误是由于Spark-generated子查询别名(生成查询Oracle数据库选项),不符合标识符的命名约定。这个bug跟踪在火花Jira票火星- 27596。
解决方案
这个问题是固定在Apache 5.4火花2.4.4和砖运行时。
为集群上运行的早期版本的火花或砖运行时,使用数据表选择而不是查询选择。查询必须括在括号里的子查询。
% scala val df =火花。读.format (jdbc) .option (“url”,“< url >”) .option(“数据表”,“(从oracle_test_table SELECT *)”) .option(“用户”,“<用户>”).option(“密码”,“<密码>”).option(“司机”,“oracle.jdbc.driver.OracleDriver”) .load () df.show ()
你可以尝试相同的其他数据库查询选项失败时的解决方法。