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