Окно Hive: отличные результаты на разделе - PullRequest
0 голосов
/ 19 октября 2018

Здравствуйте, я изучал функциональность WINDOWING в Hive и столкнулся с проблемой.

Я пытался найти количество клиентов за месяц:

my_table:

  • date_in_out: дата приобретения
  • rate_plan_name: строка
  • акции: int
  • доходы: int

Я делаю раздел на3 переменные: год / месяц приобретения и тариф_план


SELECT (first_value(stock) OVER w + sum(incomers) OVER w) AS stock_monthly,
year(date_in_out) AS year_in,
month(date_in_out) AS month_in,
rate_plan_name
FROM my_table
WINDOW w AS (PARTITION BY rate_plan_name, year(date_in_out), month(date_in_out) ORDER BY date_in_out ASC);

Я получил результат

enter image description here

Я получаю разные значения month_stockтогда как year_in / month_in и rate_plan_name одинаковы в моем наборе данных.

Мой вопрос: почему это значение отличается?Я ожидал бы того же самого и здесь.

1 Ответ

0 голосов
/ 19 октября 2018

С order by date_in_out в спецификации window, sum вычисляется для каждой строки.Если вам нужно, чтобы оно было агрегировано на уровне годового месяца, используйте

WINDOW w AS (PARTITION BY rate_plan_name, year(date_in_out), month(date_in_out))

Но учтите, что first_value все еще нужно order by.

Я думаю, что вы ищете,

SELECT first_value(stock) OVER(w ORDER BY date_in_out) + sum(incomers) OVER w AS stock_monthly,
year(date_in_out) AS year_in,
month(date_in_out) AS month_in,
rate_plan_name
FROM my_table
WINDOW w AS (PARTITION BY rate_plan_name, year(date_in_out), month(date_in_out)) 
...