使用 Spark 查询 Oracle DB 时出现“ORA-00933:SQL 命令未正确结束”错误

pra*_*ash 1 oracle hadoop scala apache-spark

我试图使用 Spark 数据源 API 从 Oracle 数据库加载数据。

由于我需要通过查询加载数据,因此我使用了下面的查询,该查询是我从一些在线示例中整理出来的:

Map<String, String> options = new HashMap<>();
options.put("driver", MYSQL_DRIVER);
options.put("user", MYSQL_USERNAME);
options.put("password", MYSQL_PWD);
options.put("url", MYSQL_CONNECTION_URL); 
options.put("dbtable", "(select emp_no, emp_id from employees) as employees_data");
options.put("lowerBound", "10001");
options.put("upperBound", "499999");
options.put("numPartitions", "10");

DataFrame jdbcDF = sqlContext.load("jdbc", options);
Run Code Online (Sandbox Code Playgroud)

这会出现异常:

线程“main”中出现异常 java.sql.SQLSyntaxErrorException: ORA-00933: SQL 命令未正确结束

我怀疑我们不能为 Oracle 查询提供“asEmployees_data”,那么我做错了什么?

Ale*_*ole 5

我怀疑我们不能为 Oracle 查询提供“asEmployees_data”

您可能会怀疑,但在 Oracle 中不能使用AS表别名。您可以为列别名,它是可选的,但不允许为表别名。您可以在语法图中看到这一点。

假设 Spark 不介意别名本身,您可以删除AS

options.put("dbtable", "(select emp_no, emp_id from employees) employees_data");
Run Code Online (Sandbox Code Playgroud)

  • @prakash - 当你删除“as”时会发生什么? (2认同)