не по своему вопросу, для кругозора. Может, здесь кто подскажет быстрее. Это нормально, что условие из запроса на view, на столбец, который является ключом для исходной таблицы, не оптимизируется?
Table metrics_raw
(
itemid Int64,
clock DateTime,
value Decimal64(4)
)
ENGINE = ReplicatedMergeTree( ... )
PARTITION BY toYYYYMMDD(clock)
ORDER BY (itemid, clock);
Table metrics_hour_state
(
itemid Int64,
clock DateTime,
value AggregateFunction(avg, Decimal64(4))
)
ENGINE = ReplicatedAggregatingMergeTree( ... )
PARTITION BY toYYYYMMDD(clock)
ORDER BY (itemid, clock);
MV aggregator_hour
TO metrics_hour_state AS
SELECT
itemid,
toStartOfHour(clock) clock,
avgState(value) value
FROM metrics_raw
GROUP BY itemid, clock;
View metrics_hour
AS
SELECT itemid, clock, avgMerge(value) value
FROM metrics_hour_state
GROUP BY itemid, clock;
Запрос
select itemid, clock, value from metrics_hour where itemid = 54321
Приводит к полному сканированию metrics_hour_state.
уточню вопрос: а) ожидается ли появление оптимизации б) есть ли более изящное решение здесь и сейчас, чем переписывать запрос без обращения к view, как SELECT itemid, clock, avgMerge(value) value FROM metrics_hour_state WHERE itemid = 54321 GROUP BY itemid, clock разница по потреблению памяти между ними огромная, 1536 МБ против 32 МБ (примерно)
Обсуждают сегодня