Позвольте мне предположить, что "нет значения" на самом деле NULL
. Тогда вы хотите LAG(IGNORE NULLS)
, но Hive не поддерживает это. Но вы можете сделать это в два этапа. Определите группы путем подсчета количества «реальных» значений до каждой строки. Затем используйте функции окна, чтобы присвоить значение:
select t.*, max(value) over (partition by grp)
from (select t.*,
count(value) over (order by time) as grp
from t
) t
РЕДАКТИРОВАТЬ:
Если вы на самом деле храните значения в виде строк , а 'none'
- это реальное значение, тогда просто используйте вариант выше:
select t.*,
max(nullif(value, 'none')) over (partition by grp)
from (select t.*,
count(nullif(value, 'none')) over (order by time) as grp
from t
) t