как перевести настроенное время в секунды в HIVE - PullRequest
0 голосов
/ 04 марта 2019

Я ищу решение для моей проблемы.Моя проблема в том, что я хочу преобразовать свои данные в секунды.Данные в моей таблице HIVE выглядят ниже:

мой ввод:

        time
        2m3s
        10s
        12.2
        10

мой ожидаемый результат составляет

    time
    123
    10
    12.2
    10

, если значение равно 2 м3 (2 минуты и3 секунды) мне нужно конвертировать в 2 * 60 + 3 секунды.если он прибывает как 10 с, то это означает, что через несколько секунд я могу взять 10 и т. д.

Может кто-нибудь помочь мне, как добиться того же в улье

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

С regexp_extract и regexp.Обратите внимание, что этот запрос обрабатывает только два показанных шаблона.Возможно, вам придется расширить его на основе других шаблонов в ваших данных.

select case when time regexp '^[0-9]+[mM][0-9]+[sS]$' 
            then regexp_extract(time,'(^[0-9]+)',1) * 60 + regexp_extract(time,'([0-9]+)[sS]$',1)  
            when time regexp '^[0-9]+[sS]$' then regexp_extract(time,'([0-9]+)[sS]$',1)
       else time end
from tbl
0 голосов
/ 04 марта 2019

Я думаю, что это будет делать то, что вы хотите:

select (case when time like '%m%s'
             then cast(regexp_extract(time, '^[0-9]+') as decimal(10, 2)) * 60 +
                  cast(replace(regexp_extract(time, '[0-9]+s$'), 's', '') as decimal(10, 2), 1)
             when time like '%s'
                  cast(replace(regexp_extract(time, '[0-9]+s$'), 's', '') as decimal(10, 2), 1)
             else cast(regexp_extract(time, '[0-9]+s$') as decimal(10, 2))
        end) as seconds
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...