如何在Oracle DB中将日期/时间戳记字符串写​​入日期时间戳记列?

我在Hadoop中使用AVRO文件格式和Hive外部表存储了一些Oracle表来访问数据。
我已将日期和时间戳记值存储为格式化的字符串,在导入时使用Oracle中的TO_CHAR函数。

现在我想用Spark把这个确切的数据导出到一个有Date列的Oracle表中。 我使用这个命令:

// Create a data frame from the Hive table
val data = sqlContext.sql("select * from avro_table")

// export df to existing oracle table
data.write.mode("overwrite").jdbc(jdbcString, "tableName", prop)

但是,然后我得到的错误:

ORA-00902:无效的数据类型

这是因为它试图在日期列中插入一个字符串。 有没有一种安全的方法将日期/时间戳字符串从Spark数据框插入到Oracle日期/时间戳列? 安全我的意思是不要丢失任何时区信息。


您应该使用to_date,to_timestamp和/或date_format函数来将字符串日期/时间戳值转换为其对应的类型识别值。

date_format(dateExpr:Column,format:String):Column将日期/时间戳/字符串转换为由第二个参数给出的日期格式指定格式的字符串值。

to_date(e:Column,fmt:String):Column将列转换为具有指定格式的DateType(请参阅http://docs.oracle.com/javase/tutorial/i18n/format/simpleDateFormat.html)如果失败,则返回null 。

to_timestamp(s:Column,fmt:String):列将时间字符串转换为具有指定格式的Unix时间戳(以秒为单位)(请参阅http://docs.oracle.com/javase/tutorial/i18n/format/simpleDateFormat.html )到Unix时间戳(以秒为单位),如果失败则返回null。

使用selectwithColumn运算符。

示例代码可以如下所示:

data.withColumn("real_date", date_format(...))
  .write
  .mode("overwrite")
  .jdbc(jdbcString, "tableName", prop)
链接地址: http://www.djcxy.com/p/36949.html

上一篇: How to write date / timestamp string to Date timestamp column in Oracle DB?

下一篇: How scn map to timestamp using sys.smon