(id, dateOf(at)) значений value по диапазонам [0, 100), [100,200) ... [900, 1000), [1000+] для строк, где condition = 0
написал таблицу, mv и view, и это вроде работает как хочется. Но смущают ряды чисел, которые приходится писать и дублировать. Можно это оформить как-то записать лаконичнее?
create table foo
(
id UInt32,
at DateTime,
is_error UInt8,
value UInt64
)
engine MergeTree()
PARTITION BY tuple()
order by (id, at);
create materialized view foo_summary_mv
engine AggregatingMergeTree()
partition by toYYYYMM(day)
order by (id, day)
populate
as
select
id,
toStartOfDay(at) day,
countResampleIfState(0, 1001, 100)(roundDown(value, [0,100,200,300,400,500,600,700,800,900,1000]), is_error = 0) as values,
countIfState(is_error = 1) as errors
from foo
group by id, day;
create view foo_summary as
select
id,
day,
countResampleIfMerge(0, 1001, 100)(values) as value_range_counts,
countIfMerge(errors) as errors_count
from foo_summary_mv group by id, day;
roundDown можно запихнуть в UDF: create function RD as x -> roundDown(x, [0,100,200,300,400,500,600,700,800,900,1000]); select RD(101);
Обсуждают сегодня