(время получения данных), data_* (много разных полей int/string)
данные постоянно докидываются и образуются дубли по entity_id
для работы необходима только последняя версия данных для каждого entity_id.
2) Для получения последней версии данных делаю MV AggregatingMergeTree таким запросом:
CREATE MATERIALIZED VIEW test_amt
ENGINE = AggregatingMergeTree()
PARTITION BY tuple() ORDER BY (entity_id)
AS
SELECT
argMaxState(id, ts) AS id,
entity_id,
argMaxState(data_version, ts) AS data_version,
{еще примерно 10 полей через argMaxState},
minState(ts) AS min_ts,
maxState(ts) AS max_ts
FROM test
GROUP BY entity_id
3) вставляю исторические данные в amt (insert into select ... from)
4) Поверх делаю вьюху
CREATE VIEW test_view
AS
select
argMaxMerge(id) as id,
entity_id,
argMaxMerge(tracker_sid) as tracker_sid,
argMaxMerge(action) as action,
argMaxMerge(data_version) as data_version,
{еще примерно 10 полей через argMaxState},
argMaxMerge(ts_action) as ts_action,
minMerge(min_ts) as min_ts_captured,
maxMerge(max_ts) as max_ts_captured
from test_amt
group by entity_id
5) Вижу, что данные схлопнулись:
select count() from test
140466
15ms
select count() from test_view
125970
65ms
6) Проблема в том, что при запросах к test_view с указанием фильтрации хотя бы по одному полю скорость выборки значительно падает, до 300-400ms.
Пример запроса (в результатах выборки ~350 строк):
SELECT data_job_id,
data_city_id,
data_job_type,
data_state_id,
data_private,
data_archived,
data_created_at
FROM
test_view
WHERE
tracker_sid = 'test_42055b08-25cf-4e89-aa86-0eedd36a4e17'
376ms
--
Вопрос такой - как можно улучшить быстродействие, на что обратить внимание? Количество записей очень мало, а скорость кажется совершенно неприемлемой.
какая версия КХ? Что будет если WHERE tracker_sid заменить на PREWHERE WHERE tracker_sid = чему равно SELECT * FROM system.settings WHERE name LIKE '%predicat%'
ааа, ясно, argMaxMerge(tracker_sid) as tracker_sid т.е. для этой вью надо всю таблицу прочитать, сгруппировать и потом уже фильтровать. Естественно медленно.
Обсуждают сегодня