2014-09-25 3 views
0

У меня есть проблема, что я решил бы, если это возможно, в Улье. данные, как следующее:Расчет длительности в Улье

action timestamp 
a   2014-01-01 10:00:00 
b   2014-01-01 10:05:00 
started 2014-01-01 10:06:00 
c   2014-01-01 10:06:10 
d   2014-01-01 10:56:00 
paused 2014-01-01 11:15:00 
e   2014-01-01 12:00:00 

Теперь мы можем вычислить длительность между каждой временной меткой с помощью LAG(), однако мы хотели бы добавить столбцы, которые вычисляют длительность для этих действий до «начала», а также действия ПОСЛЕ «начал», но если остановился, то 0. Финальный стол должен выглядеть следующим образом:

action timestamp    duration_before_started play_duration_after_started 
a   2014-01-01 10:00:00  00:05:00     00:00:00 
b   2014-01-01 10:05:00  00:01:00     00:00:00 
started 2014-01-01 10:06:00  00:00:00     00:00:10 
c   2014-01-01 10:06:10  00:00:00     00:39:50 
d   2014-01-01 10:56:00  00:00:00     00:19:00 
paused 2014-01-01 11:15:00  00:00:00     00:00:00 
e   2014-01-01 12:00:00  00:00:00     00:00:00 

возможно ли это в улье в течение разумного времени вычислений?

С наилучшими пожеланиями

Питер

ответ

0

Неуверенные о том, как своевременно это будет как большая часть параллельной функциональности обработки HDFS будет отрицается с работой ряда, но это может быть сделано.

Похоже, вам просто нужно использовать операторы case, чтобы определить, когда действие «началось», чтобы определить, нужно ли выводить результат на длительность_было_значения или play_duration_after_started. Тогда это так же просто, как использование некоторых из unix_timestamp, from_unixtime и вторых функций для расчета.

Документация по этим функциям даты находится здесь: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF

Смежные вопросы