Apache火花JDBC数据源查询选项并不为Oracle数据库工作

学习如何解决一个错误发生在使用Apache火花从砖JDBC数据源连接Oracle数据库。

写的亚当Pavlacka

去年发表在:2022年6月1日


问题

当你使用查询选择与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 ()

你可以尝试相同的其他数据库查询选项失败时的解决方法。

这篇文章有用吗?