Создание нового столбца в Hive на основе предыдущего значения другого столбца - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть данные, которые выглядят так:

Status Order
NULL   1
NULL   2
1      3
NULL   4
NULL   5
0      6
NULL   7
NULL   8
NULL   9
1      10

Я пытаюсь добавить новый столбец, который заполняет нулями предыдущее число, например:

Status     New
NULL       NULL
NULL       NULL
1          1
NULL       1
NULL       1
0          0
NULL       0
NULL       0
NULL       0
1          1

Я использую куст, и у меня есть доступ к pyspark, но пытался решить через SQL, если это возможно.Я посмотрел на оконные функции (Ранг, Dense_rank, Row_number, Lag, Lead).Какие-либо предложения?

1 Ответ

0 голосов
/ 26 сентября 2018

Что вам нужно, это группы эквивалентности.Затем вы можете использовать оконные функции для заполнения данных.Группа может быть определена как число ненулевых значений, включая указанное значение.

Это предполагает, что у вас есть столбец, в котором указан порядок.

Итак:

select t.*, max(status) over (partition by grp) as new_status
from (select t.*, count(status) over (order by ?) as grp
      from t
     ) t;

? для столбца, который определяет порядок.

...