如何在Hive中将字符串转换为时间戳,以毫秒为单位

Dav*_*ord 10 hadoop timestamp hive

我有一个字符串'20141014123456789',它表示我需要转换为Hive(0.13.0)中的时间戳而不会丢失毫秒的时间戳(毫秒).

我试过这个,但unix_timestamp返回一个整数,所以我失去了毫秒:

from_unixtime(unix_timestamp('20141014123456789', 'yyyyMMddHHmmssSSS'))      >> 2014-10-14 12:34:56    
Run Code Online (Sandbox Code Playgroud)

投射字符串有效:

cast('2014-10-14 12:34:56.789' as timestamp)      >> 2014-10-14 12:34:56.789
Run Code Online (Sandbox Code Playgroud)

但我的字符串不是那种形式.

我想我需要将我的字符串从'20141014123456789'重新格式化为'2014-10-14 12:34:56.789'.我的挑战是如何在没有子串的混乱连接的情况下做到这一点.

Dav*_*ord 9

我找到了一种方法来避免使用以下代码的子串的混乱连接:

select cast(regexp_replace('20141014123456789', 
                           '(\\d{4})(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{3})',
                           '$1-$2-$3 $4:$5:$6.$7') as timestamp) 
Run Code Online (Sandbox Code Playgroud)