#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