Вычислить разницу во временных метках для строк в разделе HIVE

#sql #datetime #hive #hiveql #window-functions

#sql #дата — время #улей #hiveql #окно-функции

Вопрос:

Мне нужно вычислить разницу между различными взаимодействиями для серийного номера в hive. Моя таблица имеет несколько серийных номеров с несколькими взаимодействиями. Я заказал взаимодействия для серийного номера на основе его временной метки. Теперь мне также было бы интересно добавить столбец с разницей во временных метках для последовательных строк.

Например, последний столбец на изображении показывает ожидаемый результат.

введите описание изображения здесь

Ценю вашу помощь.

Ответ №1:

Вы можете использовать lag() для доступа к «предыдущей» строке в данном разделе:

 select
    t.*,
    lag(timestamp) over(partition by sr_no order by timestamp) as lag_timestamp
from mytable t
  

Допустим, вам нужна разница в секундах между двумя временными метками, затем:

 select
    t.*,
    unix_timestamp(timestamp)
        - unix_timestamp(lag(timestamp) over(partition by sr_no order by timestamp)) 
        as diff_seconds
from mytable t
  

Комментарии:

1. Я думаю, что Hive позволяет вам напрямую вычитать две временные метки и выдает интервальный тип данных с соответствующим форматированием текста?

2. @MatBailie: это сделало бы запрос более аккуратным. У вас есть документ, в котором упоминается это поведение? Я не могу найти ни одного, и в дикой природе нет Hive fiddle, который можно было бы использовать для тестирования.

3. Нет, «руководство», похоже, весьма ограничено в отношении операций, которые могут быть применены. У меня есть только отдаленное воспоминание, и это: sqlandhadoop.com/how-to-subtract-timestamp-date-time-in-hive