我正在尝试使用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);
这是一个例外:
线程“main”中的异常java.sql.SQLSyntaxErrorException:ORA-00933:SQL命令未正确结束
我怀疑我们不能为Oracle查询提供“as employees_data”,所以我做错了什么?
答案 0 :(得分:3)
我怀疑我们不能作为employee_data&#34;用于Oracle查询
您可能会怀疑它,但您无法在Oracle中使用AS
作为表别名。您可以使用列别名,它是可选的,但不允许表别名。您可以看到in the syntax diagram。
假设Spark并不介意别名本身,您只需删除AS
:
options.put("dbtable", "(select emp_no, emp_id from employees) employees_data");
答案 1 :(得分:0)
试试这个......
Map < String, String > oracle_options = new HashMap<>()
oracle_options.put("driver", "oracle.jdbc.OracleDriver");
oracle_options.put("url", "jdbc:oracle:thin:username/password@//hostName/instanceName);
oracle_options.put("dbtable", "tableName");
DataFrame dataFrame = hContext.read().format("jdbc").options(oracle_options).load().select(String col1,String col2.....));
其中hContext是HiveContex实例。 如果您使用选择意味着条件使用如下:
DataFrame dataFrame = hContext.read().format("jdbc").options(oracle_options).load().select(String col1,String col2.....)).where(String expr);