2015-03-20 18 views
0

У меня есть записи с датой и штатом. Я хочу отображать только записи, состояния которых изменились с предыдущей записи.Hive Разница между 2 записями

Пример ввода

date     state 
2013-01-15 04:15:07.602 ON 
2013-01-15 05:15:08.502 ON 
2013-01-15 06:15:08.502 OFF 
2013-01-15 07:15:08.502 ON 
2013-01-15 08:15:08.502 ON 
... 

Ожидаемый

date     state 
2013-01-15 04:15:07.602 ON 
2013-01-15 06:15:08.502 OFF 
2013-01-15 07:15:08.502 ON 

Я написал простую функцию udf (tmchange в моем запросе), который возвращает значение, если состояние изменилось и нуль в противном случае.

select t.date, t.state from (SELECT date, state, tmchange(LAG(state, 1) 
over (PARTITION BY month(date) ORDER BY date), state) as lagres 
from demo_table where state is not null 
and year=2013) t where t.lagres is not null ; 

Я использую LAG функцию из улья функций оконных. Проблема в том, что я получаю error: Java heap space, когда использую PARTITION by month(date). Когда я пытаюсь выполнить PARTITION by weekofyear(date), он работает, но это занимает очень много времени, вероятно, из-за функции LAG. У вас есть идеи, как я могу оптимизировать свой запрос, чтобы удовлетворить эти потребности (в целом сравнить запись с предыдущей). Это действительно функция LAG для использования в этом случае?

+0

Сколько памяти имеют распределители и редукторы? –

+0

@ Кришна, вы меняете заголовок моего сообщения с «Улей» на «Have». Не могли бы вы вернуться в «Apache Hive», что я имел в виду. – roqds

+0

Карта: 682MB Уменьшить: 2048MB «Карта памяти сотового буфера»: 273MB – roqds

ответ

2

Не уверен, что вы можете сделать это быстрее, если не уменьшить размер раздела. Не можете прочесть просто-навсего месяц или неделю: PARTITION BY month(date), day(date)

Зачем использовать UDF? Разве эта работа не будет: select t.date, t.state from ( SELECT date, state, LAG(state, 1) over (PARTITION BY month(date) ORDER BY date), state) as prev_state from demo_table where state is not null and year=2013 ) t where t.prev_state <> t.state ;

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