在Hive中,如何以毫秒为单位的epoch转换为以毫秒为单位的时间戳

dba5bblo  于 2021-04-07  发布在  Hive
关注(0)|答案(2)|浏览(899)

在hive中,如何将毫秒的unix epoch转换为毫秒的时间戳? cast()和from_unixtime()函数都不能得到毫秒的时间戳。
我试过.SSS,但函数只是增加了年份,并没有把它作为毫秒的一部分。

scala> spark.sql("select from_unixtime(1598632101000, 'yyyy-MM-dd hh:mm:ss.SSS')").show(false)
+-----------------------------------------------------+
|from_unixtime(1598632101000, yyyy-MM-dd hh:mm:ss.SSS)|
+-----------------------------------------------------+
|52628-08-20 02:00:00.000                             |
+-----------------------------------------------------+
lnlaulya

lnlaulya1#

我想你可以直接cast():

select cast(1598632101000 / 1000.0 as timestamp)

注意,这将产生一个 "timestamp "数据类型,而不是一个字符串,如 "from_unixtime()"。

3j86kqsm

3j86kqsm2#

from_unixtime适用于秒,而不是毫秒。转换为以秒为单位的时间戳from_unixtime(ts div 1000),用'.'+毫秒(mod(ts,1000))连起来,并转换为时间戳。

with your_data as (
select stack(2,1598632101123, 1598632101000) as ts
)

select cast(concat(from_unixtime(ts div 1000),'.',mod(ts,1000)) as timestamp)
from your_data;

结果。

2020-08-28 16:28:21.123
2020-08-28 16:28:21.0

相关问题