Скользящая сумма за 7 дней с несколькими измерениями в Hive

У меня есть данные, подобные приведенным ниже, и я хочу получить (1) сегодняшние номера пользователей и (2) номера пользователей за последние 7 дней по указанным ниже параметрам. Мой запрос не возвращает желаемый результат. Может ли кто-нибудь исправить мой код Hive SQL?

например) сегодня = 9.08.2018

последние 7 дней = 02.08.2018 - 08.08.2018

Dimension: date, website, country_id, product_id

Metrics : user

SELECT 
             date, 
             website,
             country_id,
             product_id,
             SUM(user) AS today_users,
             SUM(user) OVER (
           PARTITION BY website, country_id, product_id 
           ORDER BY date ASC ROWS BETWEEN 8 PRECEDING AND 1 PRECEDING) as past_7D_users
           FROM  Table
    GROUP BY 
    date, website, country_id, product_id;

Необработанные данные:

    >t_date  |website |country_id|product_id|users
    >8/1/2018   Whatev.com  2     EFG        12 
    >8/2/2018   Whatev.com  2     EFG        23
    >8/3/2018   Whatev.com  2     EFG        34 
    >8/4/2018   Whatev.com  2     EFG        13
    >8/5/2018   Whatev.com  2     EFG        47 
    >8/6/2018   Whatev.com  2     EFG        39
    >8/7/2018   Whatev.com  2     EFG        17 
    >8/8/2018   Whatev.com  2     EFG        34
    >8/1/2018   Google.com  1     ABC        10 
    >8/2/2018   Google.com  1     ABC        20
    >8/3/2018   Google.com  1     ABC        30 
    >8/4/2018   Google.com  1     ABC        14
    >8/5/2018   Google.com  1     ABC        40 
    >8/6/2018   Google.com  1     ABC        35
    >8/7/2018   Google.com  1     ABC        15 
    >8/8/2018   Google.com  1     ABC        32

Ожидаемый результат:

date      | website  |country_id|product_id|today_users|past_7D_users|
2018-08-08|Google.com|   1      | ABC      | 32        |164          |
2018-08-09|Whatev.com|   2      | EFG      | 34        |185          |

пожалуйста, опубликуйте текущий вывод и некоторые образцы данных .. Я предполагаю, что пункт окон должен быть ROWS BETWEEN 7 PRECEDING AND 1 PRECEDING

Vamsi Prabhala 10.08.2018 02:09

Спасибо! Я добавил образцы данных. Для этого примера данных мой запрос работает нормально (с фиксированным значением 7 PRECEDING), но мои фактические данные очень большие и не работают таким образом .. :(

Heemama 10.08.2018 20:12
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
381
1

Ответы 1

Хорошо ... Странно отвечать на свой вопрос, но я нашел обходной путь. Если кто-то знает более простой и понятный запрос, поделитесь.

SELECT x.date
,x.website
,x.country_id
,x.product_id
,x.today_users
,SUM(x.today_users) OVER (PARTITION BY x.website, x.country_id, x.product_id
                          ORDER BY x.date ASC ROWS BETWEEN 7 PRECEDING AND 1 PRECEDING) AS Past_7D_Users

FROM (SELECT 
             date, 
             website,
             country_id,
             product_id,
             SUM(user) AS today_users

    FROM  Table
    GROUP BY 
    date, website, country_id, product_id
)x
GROUP BY x.date
,x.website
,x.country_id
,x.product_id
,x.today_users
;

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