蜂房FROM_UNIXTIME()毫秒

log*_*uni 3 hive

我看到了足够多的帖子,我们可以将它们除以1000或进行强制转换,以将毫秒级时间转换为时间戳。我想知道如何在时间戳中保留毫秒部分。

1440478800123最后3个字节为毫秒。我如何将其转换为YYYYMMDDHHMMSS.sss

我还需要在转换后的时间戳中捕获毫秒部分

谢谢

小智 5

select cast(epoch_ms as timestamp)
Run Code Online (Sandbox Code Playgroud)

实际上有效,因为当强制转换为时间戳时(与使用from_unixtime()相对),Hive似乎假定int或bigint为毫秒。浮点类型被视为秒。据我所知,这是未记录的,可能是一个错误。我想要一个包含时区的字符串(这可能很重要-特别是在服务器更改为夏令时/夏时制的情况下),并希望在转换功能更改时对转换进行明确说明。因此,这给出了一个ISO 8601日期(根据其他格式的需要调整格式字符串)

select from_unixtime(
   floor(  epoch_ms / 1000   )
 , printf( 'yyyy-MM-dd HH:mm:ss.%03dZ',  epoch_ms % 1000  )
 )
Run Code Online (Sandbox Code Playgroud)