我正在尝试转换一个字符串类型的列,其中包含时间戳字符串 "yyyy-MM-dd HH:mm:ss.SSSSSSSSS" 格式为时间戳类型。此强制转换操作应保持纳秒值。我试过用 unix_timestamp() 以及 to_timestamp() 方法,但返回空值。
"yyyy-MM-dd HH:mm:ss.SSSSSSSSS"
unix_timestamp()
to_timestamp()
0ve6wy6x1#
根据timestamptype和datetimeutils类的源代码中提供的描述,它们只支持精确到微秒的时间戳。因此,我们不能在sparksql的timestamptype列中存储纳秒精度的时间戳。参考文献:https://github.com/apache/spark/blob/master/sql/catalyst/src/main/scala/org/apache/spark/sql/types/timestamptype.scalahttps://github.com/apache/spark/blob/master/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/util/datetimeutils.scala
cbeh67ev2#
使用cast:
hive> select cast('2019-01-01 12:10:10.123456789' as timestamp); OK 2019-01-01 12:10:10.123456789 Time taken: 0.611 seconds, Fetched: 1 row(s)
使用 timestamp() :
timestamp()
hive> select timestamp('2019-01-01 12:10:10.123456789','yyyy-MM-dd HH:mm:ss.SSSSSSSSS'); OK 2019-01-01 12:10:10.123456789 Time taken: 12.845 seconds, Fetched: 1 row(s)
2条答案
按热度按时间0ve6wy6x1#
根据timestamptype和datetimeutils类的源代码中提供的描述,它们只支持精确到微秒的时间戳。因此,我们不能在sparksql的timestamptype列中存储纳秒精度的时间戳。
参考文献:
https://github.com/apache/spark/blob/master/sql/catalyst/src/main/scala/org/apache/spark/sql/types/timestamptype.scala
https://github.com/apache/spark/blob/master/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/util/datetimeutils.scala
cbeh67ev2#
使用cast:
使用
timestamp()
: