184 похожих чатов

Подскажите пожалуйста, чет не врублюсь. Может ли у mat. view быть

первичный индекс отличный от order by?
Пытаюсь сделать, пишет

Primary key must be a prefix of the sorting key, but its length: 5 is greater than the sorting key length: 1 (version 20.9.2.20 (official build))

30 ответов

70 просмотров

Таблица, в которую прилетают данные из MV, у вас, скорее всего, из семейства MergeTree. Правила создания таблицы такие же, как и для обычных MergeTree таблиц.

L-dar- Автор вопроса
Artem
Таблица, в которую прилетают данные из MV, у вас, ...

Ну да, я это читал. Там и написано, что первичный ключ может отличаться от ордер

L-dar
Ну да, я это читал. Там и написано, что первичный ...

Может, но должен быть частью order by, насколько я помню.

L-dar- Автор вопроса
Artem
Может, но должен быть частью order by, насколько я...

мда...Засада. Как тогда быть, использую AggregatingMergeTree, чтоб схлопывалась по одной колонке, т.е. эту колонку указывают в order by. Но мне необходимы еще индексы, получается не смогу создать

L-dar
мда...Засада. Как тогда быть, использую Aggregatin...

Схлопывается будет по первичному ключу. Сортировка по order by.

L-dar- Автор вопроса
Artem
Схлопывается будет по первичному ключу. Сортировка...

Что за сервисный ключ? В не вижу в доке https://clickhouse.tech/docs/ru/engines/table-engines/mergetree-family/aggregatingmergetree/

L-dar
Что за сервисный ключ? В не вижу в доке https://cl...

Это телефон шалит. Имелся ввиду первичный ключ.

L-dar- Автор вопроса
Artem
Это телефон шалит. Имелся ввиду первичный ключ.

Замкнутый круг получается. Хочу схлопывать по одному полю. Подразумевается, что по этому полю я делаю группировку в запросе при создании Mater.View Но! в запросе поля GROUP BY должны быть такими же, что и в ORDER BY при создании Mater.View. В моем случае группировка идет по одному полю...Как мне тогда добавить индексы...Надеюсь понятно расписал...

L-dar- Автор вопроса
Ivan Kalinin
Какие индексы?

певичный ключ имею ввиду. Хочу ускорить выборку, поэтому хочу добавить поля. Но здесь схлопываются по этому ключу

Artem
Схлопывается будет по первичному ключу. Сортировка...

Схлапывается по order by. Primary key это поля в которые будут в индексе

L-dar
певичный ключ имею ввиду. Хочу ускорить выборку, п...

Если поля просто так добавить в первичный ключ, то ничего автоматически не ускорится

L-dar
Замкнутый круг получается. Хочу схлопывать по одно...

Никак не добавить. И смысла добавлять нету.

L-dar- Автор вопроса
Denny [Altinity]
Никак не добавить. И смысла добавлять нету.

Смысл есть, чтоб ускорить выборку по этим ключам

L-dar
Смысл есть, чтоб ускорить выборку по этим ключам

Смысла нет. В тех полях недоагрегированные данные.

L-dar- Автор вопроса
Denny [Altinity]
Смысла нет. В тех полях недоагрегированные данные.

Но в MV в результате будут находится сагрегированные данные. т.е. результат схлопывания. Как на эти поля поставиьт какой нибудь индекс?

L-dar- Автор вопроса
Denny [Altinity]
Смысла нет. В тех полях недоагрегированные данные.

Для таблицы, которую я указал наверху, я создаю такой MV CREATE MATERIALIZED VIEW table_mv ENGINE = AggregatingMergeTree() PARTITION BY toStartOfWeek(created_ts) ORDER BY (id) PRIMARY KEY (id) POPULATE as select id, any(col1) as col1, any(col2) as col2, any(col3) as col3, any(col4) as col4 from table GROUP BY id; Но я хочу использовать индекс еще по полю col2. Как я понял, это сделать никак, если только создавать еще одну mv

L-dar- Автор вопроса
Denny [Altinity]
Нельзя и не имеет смысла.

Спасибо. Похоже надо как то оптимизировать запросы с raw данными. Только возможностей не так уж много у clickhouse. Пытаюсь выкрутится за счет where in (Select ...) Так себе результаты

L-dar
screenshot Спасибо. Похоже надо как то оптимизировать запрос...

ну никак не надо оптимизировать. Если КХ слишком медленный для вас возьмите что-нибудь другое, например memsql, я бы точно попробовал, если бы у меня были такие странные требования

L-dar- Автор вопроса
L-dar
В чем странность требований?

Вам надо искать по метрикам. Все ищут по дименшинам

L-dar
screenshot Спасибо. Похоже надо как то оптимизировать запрос...

вам просто нужен дополнительный индекс? ну так добавьте дополнительный индекс. https://clickhouse.tech/docs/ru/sql-reference/statements/alter/index/ https://clickhouse.tech/docs/ru/engines/table-engines/mergetree-family/mergetree/#table_engine-mergetree-data_skipping-indexes

L-dar- Автор вопроса
Denny [Altinity]
Вам надо искать по метрикам. Все ищут по дименшина...

Стыдно, но я не понял о чем речь. Можно указать вектор?)

L-dar
screenshot Спасибо. Похоже надо как то оптимизировать запрос...

у вас ИД в индексе первым идет? а сколько дистинкт ИД возвращается из самого глубокого запроса?

L-dar- Автор вопроса
【D】【J】
у вас ИД в индексе первым идет? а сколько дистинкт...

Индекс наоборот последним поставил. Где то читал, что индексы нужно раставлять с большего фокуса на меньший, если так можно назвать. Насчет Ид, дофига возвращается, если брать глубокий, то падает по памяти

L-dar
Индекс наоборот последним поставил. Где то читал, ...

ну если в конце то пользы нет. а если попробовать prewhere col1=1 во внутреннем запросе вместо вот этого where ID ( IN ...... ) и замерить время только внутреннего запроса с Format Null?

L-dar- Автор вопроса
【D】【J】
ну если в конце то пользы нет. а если попробоват...

По моему prewhere не подойдет, так мне необходимо найти все id и по ним схлопнуть, а col1 может иметь null. Вот такая таблица

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Карта сайта