Улей, как получить текущую метку времени в формате 2020-04-17T19: 17: 56.017719Z - PullRequest
1 голос
/ 26 апреля 2020

Я использую Hive, и у меня под рукой важная задача, для которой нужна текущая временная метка в формате 2020-04-17T19:17:56.017719Z.

. Любая помощь в поиске точного решения для этого в Hive, будет высоко оценена. Спасибо

1 Ответ

1 голос
/ 26 апреля 2020
with time as (
select reflect('java.util.Date','getTime') as millis
)
select concat( from_unixtime(floor(millis / 1000   ),"yyyy-MM-dd'T'HH:mm:ss"), '.',cast((millis % 1000)as int),'Z')
from time

Результат:

2020-04-26T11:12:35.590Z

Или еще один метод

select concat(from_unixtime(unix_timestamp(split(current_timestamp,'\\.')[0]),"yyyy-MM-dd'T'HH:mm:ss"),'.',split(current_timestamp,'\\.')[1],'Z') 

Результат:

2020-04-26T11:28:13.433Z

Еще один метод с использованием regexp_replace:

select regexp_replace(current_timestamp,'(.*) (.*)','$1T$2Z')

Результат:

2020-04-26T11:50:51.804Z

Если вам нужно получить микросекунды в Улье, грязный трюк будет

with time as (
select reflect('java.util.Date','getTime') as millis, reflect('java.lang.System','nanoTime') as nano 

)
select concat( from_unixtime(floor(millis / 1000   ),"yyyy-MM-dd'T'HH:mm:ss"), '.',cast(millis%1000 as int),cast(nano%1000 as int),'Z')
from time

Результат:

2020-04-26T21:53:31.261356Z

Но это не настоящая микросекундная точность.

...