device_os_queue (
device_os String,
os Int8,
stop timestamp,
min_time timestamp,
max_time timestamp,
count UInt32,
cnt UInt32,
time UInt64
) ENGINE = Kafka('10.0.3.10:9092', 'device_os', 'group1', 'JSONEachRow');
CREATE TABLE device_os_1d (
device_os String,
os Int8,
stop timestamp,
min_time AggregateFunction (min, DateTime('Europe/Moscow')),
max_time AggregateFunction (max, DateTime('Europe/Moscow')),
count SimpleAggregateFunction (sum, UInt64),
cnt SimpleAggregateFunction (sum, UInt64),
time SimpleAggregateFunction (sum, UInt64)
) ENGINE = AggregatingMergeTree()
PARTITION BY toDate(toDateTime(stop))
ORDER BY (device_os, os, stop);
CREATE MATERIALIZED VIEW device_os TO device_os_1d
AS SELECT device_os, os, toDate(toDateTime(stop)) AS stop, minState(toDateTime(min_time)) AS min_time, maxState(toDateTime(max_time)) AS max_time, toUInt32(sum(count)) AS count, toUInt32(sum(cnt)) AS cnt, sum(time) AS time
FROM device_os_queue GROUP BY device_os, os, stop;
Все ок, кроме агрегации min_time и max_time
┌─device_os─────┬─os─┬────────────────stop─┬─min_time─┬─max_time─┬─count─┬─cnt─┬─time─┐
│ Mac OS 10.9.5 │ 0 │ 2020-01-01 00:00:00 │ S�
^ │ ��
^ │ 5 │ 0 │ 0 │
└───────────────┴────┴─────────────────────┴──────────┴──────────┴───────┴─────┴──────┘
Как правильно преобразовывать?
ну minMerge НО !!!!! ВАМ ЭТО НЕ НУЖНО ВАМ НУЖНО, используйте SimpleAggregateFunction min_time SimpleAggregateFunction (min, DateTime('Europe/Moscow')), max_time SimpleAggregateFunction (max, DateTime('Europe/Moscow')),
про minMerge дошел да, за Simple спасибо. такая большая разница в производительности?
до двух раз, в два раза меньше байт в памяти надо перекладывать
Обсуждают сегодня