sparksql:如何将“yyyy-mm-dd hh:mm:ss.sss”格式的时间字符串列转换为保留时间戳的纳秒?

wwodge7n  于 2021-06-24  发布在  Hive
关注(0)|答案(2)|浏览(648)

我正在尝试转换一个字符串类型的列,其中包含时间戳字符串 "yyyy-MM-dd HH:mm:ss.SSSSSSSSS" 格式为时间戳类型。此强制转换操作应保持纳秒值。
我试过用 unix_timestamp() 以及 to_timestamp() 方法,但返回空值。

0ve6wy6x

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

cbeh67ev

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() :

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)

相关问题