Группируйте по дате с помощью спарклайна, как данные в одном запросе

У меня есть данные временных рядов с аналогичных хостов, которые хранятся в таблице ClickHouse в следующей структуре:

 event_type | event_day        
------------|---------------------
 type_1     | 2017-11-09 20:11:28
 type_1     | 2017-11-09 20:11:25
 type_2     | 2017-11-09 20:11:23
 type_2     | 2017-11-09 20:11:21

Каждая строка в таблице означает наличие значения 1 для event_type в datetime. Чтобы быстро оценить ситуацию, мне нужно указать сумму (итог) + последние семь значений (импульс), например:

 event_type | day        | total | pulse                       
------------|------------|-------|-----------------------------
 type_1     | 2017-11-09 | 876   | 12,9,23,67,5,34,10          
 type_2     | 2017-11-09 | 11865 | 267,120,234,425,102,230,150 

Пытался получить одним запросом следующим образом, но не получилось - импульс состоит из тех же значений:

with
    arrayMap(x -> today() - 7 + x, range(7)) as week_range,
    arrayMap(x -> count(event_type), week_range) as pulse
select
    event_type,
    toDate(event_date) as day,
    count() as total,
    pulse
from database.table
group by day, event_type
 event_type | day        | total | pulse                       
------------|------------|-------|-------------------------------------------
 type_1     | 2017-11-09 | 876   | 876,876,876,876,876,876,876          
 type_2     | 2017-11-09 | 11865 | 11865,11865,11865,11865,11865,11865,11865 

Укажите, пожалуйста, в чем моя ошибка и как добиться желаемого?


person Sergey Fedorov    schedule 30.09.2020    source источник


Ответы (2)


Я бы подумал о вычислении импульса на стороне сервера, CH просто предоставляет необходимые данные.


Можно использовать функцию соседнего окна:

SELECT
    number,
    [neighbor(number, -7), neighbor(number, -6), neighbor(number, -5), neighbor(number, -4), neighbor(number, -3), neighbor(number, -2), neighbor(number, -1)] AS pulse
FROM
(
    SELECT number
    FROM numbers(10, 15)
    ORDER BY number ASC
)

┌─number─┬─pulse──────────────────┐
│     10 │ [0,0,0,0,0,0,0]        │
│     11 │ [0,0,0,0,0,0,10]       │
│     12 │ [0,0,0,0,0,10,11]      │
│     13 │ [0,0,0,0,10,11,12]     │
│     14 │ [0,0,0,10,11,12,13]    │
│     15 │ [0,0,10,11,12,13,14]   │
│     16 │ [0,10,11,12,13,14,15]  │
│     17 │ [10,11,12,13,14,15,16] │
│     18 │ [11,12,13,14,15,16,17] │
│     19 │ [12,13,14,15,16,17,18] │
│     20 │ [13,14,15,16,17,18,19] │
│     21 │ [14,15,16,17,18,19,20] │
│     22 │ [15,16,17,18,19,20,21] │
│     23 │ [16,17,18,19,20,21,22] │
│     24 │ [17,18,19,20,21,22,23] │
└────────┴────────────────────────┘
person vladimir    schedule 30.09.2020

person    schedule
comment
Большое спасибо! - person Sergey Fedorov; 30.09.2020