我有这样的疑问:
select ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS RNO, my_table) AS subQuery
我想用spark jdbc连接到2个数据库- Postgres和Oracle。当我将此查询插入到dtable选项时,对于Postgres它可以工作,但对于Oracle我得到Caused by: OracleDatabaseException: ORA-00923: FROM keyword not found where expected
通过阅读oracle文档,我看到他们支持row_number,但我不明白我做错了什么。
val reader = spark.read
.format("jdbc")
.option("url", "location")
.option("dbtable", ("select ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS RNO, my_table) AS subQuery")
))....
2条答案
按热度按时间bsxbgnwa1#
在Oracle中,
FROM
子句在SELECT
语句中是强制性的,所以你不能使用(SELECT NULL)
,你也可以只使用NULL
:或
(SELECT NULL FROM DUAL)
:然而,后者似乎毫无意义,并且在PostgreSQL上不起作用,因为它没有
DUAL
表。您可以在PostgreSQL中创建一个单行只读DUAL
表,但第一个选项在两个RDBMS中都有效,因此似乎有点矫枉过正。my_table
之后有一个额外的)
。*Oracle fiddlePostgreSQL fiddle
gpnt7bae2#
在Oracle中,省略
ORDER BY
中的select
:但是,您不能省略
order by
子句: