У меня есть записи с датой и штатом. Я хочу отображать только записи, состояния которых изменились с предыдущей записи.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
для использования в этом случае?
Сколько памяти имеют распределители и редукторы? –
@ Кришна, вы меняете заголовок моего сообщения с «Улей» на «Have». Не могли бы вы вернуться в «Apache Hive», что я имел в виду. – roqds
Карта: 682MB Уменьшить: 2048MB «Карта памяти сотового буфера»: 273MB – roqds