gpt4 book ai didi

oracle - 如何将日期/时间戳字符串写入 Oracle DB 中的日期时间戳列?

转载 作者:可可西里 更新时间:2023-11-01 15:25:31 24 4
gpt4 key购买 nike

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

现在我想使用 Spark 将这些确切数据导出回具有日期列的 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: invalid data type

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

最佳答案

你应该使用 to_date , to_timestamp和/或 date_format字符串化日期/时间戳值转换为相应类型感知值的函数。

date_format(dateExpr: Column, format: String): Column Converts a date/timestamp/string to a value of string in the format specified by the date format given by the second argument.

to_date(e: Column, fmt: String): Column Converts the column into a DateType with a specified format (see http://docs.oracle.com/javase/tutorial/i18n/format/simpleDateFormat.html) return null if fail.

to_timestamp(s: Column, fmt: String): Column Convert time string to a Unix timestamp (in seconds) with a specified format (see http://docs.oracle.com/javase/tutorial/i18n/format/simpleDateFormat.html) to Unix timestamp (in seconds), return null if fail.

使用 selectwithColumn 运算符。

示例代码如下:

data.withColumn("real_date", date_format(...))
.write
.mode("overwrite")
.jdbc(jdbcString, "tableName", prop)

关于oracle - 如何将日期/时间戳字符串写入 Oracle DB 中的日期时间戳列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47728696/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com