Spark SQL - 从 oracle 导入时将 oracle 日期数据类型错误转换为时间戳(java.sql)

Posted

技术标签:

【中文标题】Spark SQL - 从 oracle 导入时将 oracle 日期数据类型错误转换为时间戳(java.sql)【英文标题】:Spark SQL - Incorrect conversion of oracle date data type to timestamp(java.sql) while importing from oracle 【发布时间】:2017-11-28 01:25:56 【问题描述】:

我正在使用 Spark SQL 从 Oracle 导入数据,如下所示-

Class.forName("oracle.jdbc.driver.OracleDriver")  
var info : java.util.Properties = new java.util.Properties()  
info.put("user", user)  
info.put("password", password) 
val jdbcDF = spark.read.jdbc(jdbcURL, tableFullName, info)

表架构:

SERVICE_DATE - 日期

导入时 Spark 将具有“日期”数据类型的列转换为“java.sql.timestamp”数据类型。在此转换过程中,我遇到了夏令时之后的日期问题。

例如:

oracle:SERVICE_DATE = 2008-03-09 02:49:00.0 [DATE] 火花:SERVICE_DATE = 2008-03-09 03:49:00.0 [TIMESTAMP]

oracle 日期到 JDBC 时间戳的转换有这个问题吗?

【问题讨论】:

解决了吗? 【参考方案1】:

来自https://github.com/apache/spark/pull/18411/files/aefd028883bc27cd5929e80dff29d2b15aa114b2

可以看到,有一个属性叫oracle.jdbc.mapDateToTimestamp,默认是true。如果将其设置为 falseDate 列将不会被标记为 Timestamp

【讨论】:

有***.com/questions/56020103/…的线索吗?

以上是关于Spark SQL - 从 oracle 导入时将 oracle 日期数据类型错误转换为时间戳(java.sql)的主要内容,如果未能解决你的问题,请参考以下文章

Oracle SQL 在包含数据时将列类型从数字更改为 varchar2

Oracle数据库导入配置OEM

java oracle sql spark啥关系

如何在使用 Spark 读取时将数据分配到 X 分区?

如何避免Spark SQL做数据导入时产生大量小文件

Oracle 与 Spark SQL 的连接