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 ()

你可以嚐試相同的其他數據庫查詢選項失敗時的解決方法。

這篇文章有用嗎?