java.sql scala中不支持oracle时间戳

时间:2019-07-11 04:48:13

标签: sql oracle scala apache-spark-sql

我正在尝试使用spark sql查询oracle db表。有一个column(RESERVATION.START_DATE),其数据类型为timestamp,当我运行查询时,出现错误unsupported type -101。如果我将列转换/转换为字符串/ varchar或日期类型,则会在DataFrame中获得null个条目。

我尝试使用to_charto_date的强制转换函数将时间戳记值转换为字符串或日期,如果我在DBConsole中手动运行查询,我会得到正确的结果,但是如果运行它通过使用spark-sql的Scala程序,我得到了不受支持的类型错误,或者如果我将列强制转换为字符串/日期,则在DataFrame中得到了空值。

仅使用oracle DBConsole运行时,这两个查询都给出正确的结果而没有错误。 但是,如果在Scala i中使用spark-sql运行相同的查询,则会出现错误

SELECT to_char(RESERVATION.START_DATE, 'DD-MM-YY HH:MI:SS.FFFFFF TZH:TZM') as SDATE
  FROM RESERVATION  

SELECT RESERVATION.START_DATE,
  FROM RESERVATION 

第一个查询的结果显示为(仅关注前三个值。第三个值是START_DATE列)

[null]

[null],
[空]

第二个查询的错误结果是:

Exception in thread "main" java.sql.SQLException: Unsupported type -101
    at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$.org$apache$spark$sql$execution$datasources$jdbc$JdbcUtils$$getCatalystType(JdbcUtils.scala:209)
    at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$5.apply(JdbcUtils.scala:246)
    at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$5.apply(JdbcUtils.scala:246)
    at scala.Option.getOrElse(Option.scala:121)
    at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$.getSchema(JdbcUtils.scala:245)
    at org.apache.spark.sql.execution.datasources.jdbc.JDBCRDD$.resolveTable(JDBCRDD.scala:64)
    at org.apache.spark.sql.execution.datasources.jdbc.JDBCRelation.<init>(JDBCRelation.scala:113)
    at org.apache.spark.sql.execution.datasources.jdbc.JdbcRelationProvider.createRelation(JdbcRelationProvider.scala:45)
    at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:330)
    at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:152)
    at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:125)

0 个答案:

没有答案