HIVE: не удалось разделить вызовы Windowing на группы. Неверная функция LAG

Я работаю в HIVE,

У меня есть набор данных, как:

client_id       date       nb_pts
        1     2016-06-01        1
        1     2016-06-02        3
        1     2016-06-03        4
        2     2016-06-01        2
        2     2016-06-02        3

Мне нужно вывести для каждого клиента разницу между текущим nb_pts и предыдущим nb_pts. Итак, мой вывод должен быть:

client_id       date       nb_pts   nb_pts_per_row
        1     2016-06-01        1                1    (1-0)
        1     2016-06-02        3                2    (3-1)
        1     2016-06-03        4                1    (4-3)
        2     2016-06-01        2                2    (2-0)
        2     2016-06-02        3                1    (3-2)

Я пытался использовать функцию LAG и HIVE:

SELECT client_id, date, nb_pts, 
nb_pts - (LAG(nb_pts, 1, 0) OVER (PARTITION BY client_id ORDER BY date ROWS 1 PRECEDING)) as nb_pts_per_row
FROM MyTable

Но проверка не удалась. Это говорит:

Не удалось разделить вызовы Windowing на группы. Как минимум 1 группа должна зависеть только от входных столбцов. Также проверьте наличие циклических зависимостей. Основная ошибка: ожидается, что граница левой рамки окна для функции LAG((TOK_TABLE_OR_COL nb_pts), 1, 0) org.apache.hadoop.hive.ql.parse.WindowingSpec$WindowSpec@27a007cd в качестве LAG_window_0 будет неограниченной.

РЕДАКТИРОВАТЬ (РЕШЕНИЕ):

Так что работает без строк 1 PRECEDING:

SELECT client_id, date, nb_pts, 
nb_pts - (LAG(nb_pts, 1, 0) OVER (PARTITION BY client_id ORDER BY date)) as nb_pts_per_row
FROM MyTable

0 ответов

Другие вопросы по тегам