如何在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。
使用select
或withColumn
运算符。
示例代码可以如下所示:
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?