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

Всем привет, подскажите, почему может не удаляться таблица ? это

обычная таблица, полученная в рез-те create table .. as select, не мат. вью и с мат. вью она никак не связана, весит она всего 156 мб, конфиги кликхауса никто не трогал - почемуто имеенно эту таблицу не удается удалить

какая-то магия, у кого-нибудь еще такое случалось ?

42 ответов

21 просмотр

это древний КХ какой-то?

Алексей Веселов
ClickHouse 20.8.19.4

Баг какой нибудь. Вряд-ли мерж ее блокирует или мутация. Проверьте system.mutations where not is_done

Алексей-Веселов Автор вопроса
Denny [Altinity]
Баг какой нибудь. Вряд-ли мерж ее блокирует или му...

ага, посмотрел, у нас system.mutations пустая таблица

Алексей-Веселов Автор вопроса
Denny [Altinity]
Ну рeстарт

а можно поподробнее плз что надо сделать, что вы имеете ввиду?

Алексей-Веселов Автор вопроса
Denny [Altinity]
Ch перегрузить

а ок понял, спс, я в пн девопс попрошу рестартнуть кх тогда)

Алексей-Веселов Автор вопроса
Denny [Altinity]
Ch перегрузить

а можно у вас уточнить плз касаемо Altinity? хотелось бы проконсультироваться по вопросу: в компании где я работаю, игровой проект, кликхаус используется как основная БД и мы столкнулись с проблемами касаемо того, как хранить наши данные с учетом того, когда в свое время компания перешла на CH - никто не задумывался о масштабируемости и в итоге мы его сейчас используем очень странно - все данные в одной таблице с 50 физ. колонками, но с 27000 алиасов, что чревато тем, что слишком много джойнов в запросах приходится использовать и данные хранятся неэффективно - зачастую дата и числа в виде стринги и еще куча проблем включая то, что нет нормальной документации и ее с такой системой нормально и не сделать. подскажите плз, правильно ли с данным вопросом обращаться к вам в Altinity? И если да, то с кем можно поговорить насчет организации консультации ? буду премного благодарен)

Алексей-Веселов Автор вопроса
Константин
Лучше наверное перейти на обычную БД

вы имеете ввиду создать промежуточное dwh по методологии и оттуда витрины собирать в кликхаус ? или совсем перейти на другую БД ? вообще с кликхауса уходить не собираемся, он нас устраивает, просто используем мы его неправильно)

Konstantin Ilchenko
это как вы так определили?)

Думаю по > кликхаус используется как основная БД Все таки удел кх аналитика, а не OLTP Впрочем вопрос, что вкладывается в понятие основная БД

Алексей-Веселов Автор вопроса
Dmitry [Altinity] Titov
Думаю по > кликхаус используется как основная БД ...

основная БД - имею ввиду что промежуточных баз данных нет и у нас никто никогда dwh не проектировал и нет детального слоя

Алексей Веселов
а можно у вас уточнить плз касаемо Altinity? хотел...

> подскажите плз, правильно ли с данным вопросом обращаться к вам в Altinity? И если да, то с кем можно поговорить насчет организации консультации ? буду премного благодарен) В целом это к нам, но разовых платных консультаций у нас нет. https://altinity.com/24x7-support/ https://altinity.com/free-consultation/

Алексей Веселов
а можно у вас уточнить плз касаемо Altinity? хотел...

Данные в одной таблице - это как раз весьма по-кликхаусовски. Обилие алиасов - довольно странно, но почему бы и нет. А вот почему при этом много джойнов, мне, честно сказать, не понятно. Приведите упрощенный пример, если можно.

Ilya Golshtein
Данные в одной таблице - это как раз весьма по-кли...

Возможно в каких-то случаях спасли бы CTE вместо джойнов @Aleksey_Veselov

Алексей-Веселов Автор вопроса
Ilya Golshtein
Данные в одной таблице - это как раз весьма по-кли...

на каждый ивент пишутся свои алиасы формата event__slice , т.е. например ивент - session, а один из столбцов будет session__user_id и вот таких алиасов 27000 на 1000 событий (ивентов). Нельзя достать из базы данных последовательность действий юзера например - т.к. придется достатвать отдельно 1000 событий по этому юзеру и по-отдельности доставать из каждого из них инфу. Или нельзя посмотреть получаемый игровой контент юзером - придется по-отдельности писать селект к каждому ивенту для каждого типа продукта и объединять. возможно я сбил столку упоминанием джойнов - скорее речь о том что нельзя одновременно в одном селекте достать инфу по разным ивентам одновременно - это порождает надобность объединять через юнион или джойн эти ивенты - и потому больше джойнов. а еще из-за того, что мы так храним данные - у нас каждый столбец кликхауса хранит разношерстную информацию. Например столбец id_str_1 на который вешаются алиасы - содержит и даты для одних ивентов, для других юзер айди, для третьих какие-то длинные стринги и т.д. Плюс человеческий фактор и у нас уже для похожих ивентов одни и те же вещи по-разному называются и нет документации. Вобщем такое использование алиасов - мне кажется самое худшее что можно было сделать для аналитики

Алексей Веселов
на каждый ивент пишутся свои алиасы формата event_...

Не совсем понятно почему нельзя одним запросом достать все действия пользователя. У вас должны быть обязательные колонки user_id/timestamp/event_name для всех событий, а дальше под каждое событие свои колонки могут быть. Можете одним запросом всё что надо выбирать

Алексей-Веселов Автор вопроса
Konstantin Ilchenko
Не совсем понятно почему нельзя одним запросом дос...

общие колонки только 3 - event, event_time, event_date - юзер айди для каждого ивента лежит в своей физ. колонке) абсурд но так и есть

Алексей Веселов
общие колонки только 3 - event, event_time, event_...

ну я бы первым делом это поправил добавить колонку которая по ивенту вычисляет откуда брать нужный id user_id default multiIf(event = ‘event1’, user_col_1, event = ‘event12, user_col_2, …) потом уже можно поправить запись и убрать старые колонки ну и запросы на чтение сделать нормальными

Алексей Веселов
на каждый ивент пишутся свои алиасы формата event_...

ээ зачем тут КХ ? вам либо K/V (cassandra, foundationdb), либо documentdb типа монги нужны

Алексей-Веселов Автор вопроса
Denny [Altinity]
ээ зачем тут КХ ? вам либо K/V (cassandra, foundat...

если честно не знаю, я только знаю что ранее использовали elastic базу данных, а т.к. я в дата инженерии откровенно слаб (я именно аналитик а инженеров у нас не было никогда) и плохо понимаю пространство вариантов для нашего кейса, то единственно что пока что я рассматриваю, самое простое - продолжить использовать кликхаус, но как-то по-умному. сейчас мы используем его неэффективно, но с другой стороны я не уверен что другие бд дадут такую же скорость выполнения запросов, как и КХ, даже не смотря на то что мы криво его используем

Алексей Веселов
если честно не знаю, я только знаю что ранее испол...

КХ ужасно медленно делает точечные запросы, потому что он заточен под обработку огромных массивов, типа запрос минимально должен запроцессисть 1 - 10 млн. строк, КХ быстрее всех делает groupby и умеет делать это distributed, по вашему описанию вам это все не нужно

Алексей-Веселов Автор вопроса
Denny [Altinity]
КХ ужасно медленно делает точечные запросы, потому...

distributed мы используем - у нас два шарда, 6 тб данных, некоторые запросы действительно очень тяжелые (по-крайней мере так я о них думаю) если брать данные больше чем за последние 30 дней. Например часто выбираемые ивенты при взятии 30 дней выходят в 26 млн-10 млн строк, и мы редко в запросе используем один селект, в среднем 3 селекта из основной 6-терабайтной таблицы + джойны друг сдругом + аггрегация. Используются зачастую данные в запросах за 1-2 месяца . или это на самом деле небольшие запросы и их реально в другой бд не медленнее получать - например если брать те базы данных, которые вы порекоммендовали ?

Алексей Веселов
distributed мы используем - у нас два шарда, 6 тб ...

а зачем "Например часто выбираемые ивенты при взятии 30 дней" ? Почему вам надо ивенты за 30 дней ?

Алексей-Веселов Автор вопроса
Denny [Altinity]
а зачем "Например часто выбираемые ивенты при взят...

ну зачастую в дешах выбирается около 30 дней - для мониторинга, для выборки юзеров добавленных в тот или иной эксп и т.д.

Алексей Веселов
ну зачастую в дешах выбирается около 30 дней - для...

Т.е. КХ это не основная бд, а просто бд для внутренней аналитики, тогда понятно. Вам тогда надо просто дождаться фичи "хранениия полу-структурированных данных" в 2022 году и тупо сделать все проще и без алиасов и все залетает.

Алексей-Веселов Автор вопроса
Denny [Altinity]
Т.е. КХ это не основная бд, а просто бд для внутре...

да она для внутренней аналитики, под "основной" я подразумевал что нет другой промежуточной бд - данные напрямую летят в кликхаус через какой-то написанный руками девопс микросервис

Алексей-Веселов Автор вопроса
Denny [Altinity]
Т.е. КХ это не основная бд, а просто бд для внутре...

а не подскажете где можно прочитать про данную фичу ?

Алексей-Веселов Автор вопроса
Denny [Altinity]
Т.е. КХ это не основная бд, а просто бд для внутре...

а еще не подскажете плз - всетаки описанные мной запросы стоит относить к точечным запросам ? адекватен ли в нашем случае все-таки кликхаус ?

Алексей Веселов
а не подскажете где можно прочитать про данную фич...

https://github.com/ClickHouse/ClickHouse/issues/23516 (в целом она не про json , не обращайте внимание на json)

Алексей-Веселов Автор вопроса
Denny [Altinity]
https://github.com/ClickHouse/ClickHouse/issues/23...

спасибо прочитал, да это будет удобнее работы с алиасами

Алексей Веселов
на каждый ивент пишутся свои алиасы формата event_...

Примерно (очень примерно) понятно. Один путь - использовать JSON. Это довольно логично и соответствует разнородности хранимых данных. Часть проблем вы таким способом решите (хотя бы информация о структуре адеквантная и она рядом с данными), но, видимо, по производительности будет хуже, несмотря на обилие средств для работы с JSON в CH. Ну или Map. Есть несколько текстов про хранение слабо структурированных данных, например https://kb.altinity.com/altinity-kb-schema-design/best-schema-for-storing-many-metrics-registered-from-the-single-source/ Это выглядит скорее движением назад и "продать" может быть сложно, но, возможно, "назад" - это правильное направление в вашем случае. Другой путь - небольшие расширения: добавить еще немного колонок, чтобы решить проблемы с типами, разделить на две-три-четыре таблицы, если все же есть осмысленные группы событий.

Алексей-Веселов Автор вопроса
Ilya Golshtein
Примерно (очень примерно) понятно. Один путь - исп...

Спс, ну да хранить джсоны не оч охота пусть и гибко, т.к. тогда скорость запросов наверное будет вообще не очень. А добавить новые колонки кажется не лучшей идеей потому что по ним не будет сортировки (им. ввиду блок order by при создании таблицы) и значит выборка по ним будет медленной Недавно я как раз добавил банальный новый столбец default now() чтоб видеть гэп между событиями и их записью в кх, в итоге по этому новому столбцу выборка прям плохо работает. А изменить ключи сортировки и партиционирования в уликхаусе в созданной таблице уже не можем

Алексей Веселов
Спс, ну да хранить джсоны не оч охота пусть и гибк...

Про медленную выборку не очень понимаю. Потому что сортировка работает только в том порядке, который указан в ORDER BY, т.е. поиск по второму и третьему полям (но без первого) будет полным перебором или близко к тому. Это означает, что у ваших данных присутствует упорядоченность по небольшому числу полей, и вот именно эти поля нужно оставить как колонки, а все остальное спрятать в JSON. Наверное. Могу посоветовать больше экспериментировать, это всегда интересно, а иногда еще и полезно ;)

Алексей-Веселов Автор вопроса
Ilya Golshtein
Про медленную выборку не очень понимаю. Потому что...

А я про второй путь, который вы описали имел ввиду) ну т.е. если в текущую 6тб таблицу добавить новые колонки чтобы решить проблемы с типами то по жтим новым колонкам выборка будет медленной. Сейчас у нас просто в order_by все 50 физ колонок таблицы, и ввборка по любой новой будет значительно хуже) а так да, я хочу создать тестовую dwh из нашей в виде нескольких таблиц и взять период в месяц и далее затетстить и псмотреть минусы. Но пока не понимаю как лучше это дело создать - на питоне запарюсь ведь надо огромную кучу преобразований выполнить для каждого ивента, вот пытаюсь кх с dbt подружить но пока не удается, чтобы упростить весь этот процесс) так что я пытаюсь в целом экспериментировать)

Алексей Веселов
А я про второй путь, который вы описали имел ввиду...

В моем понимании, присутствие некоторой колонки в ORDER BY сорок девятой (или даже четвертой) по счету, никаким образом не ускоряет выборку по этой колонке.

Алексей-Веселов Автор вопроса
Ilya Golshtein
В моем понимании, присутствие некоторой колонки в ...

А ну хотя я сравнивал скорость выборки через первую колонку со временем со скоростью выборки через новую колонку времени и там все удручающе получилось) а по другим мб и не будет разницы, да)

Алексей Веселов
А ну хотя я сравнивал скорость выборки через перву...

Да, это же не N индексов, а один по N колонкам. Поэтому можно еще раз перечитать те варианты, которые я перечислял выше ;)

Ilya Golshtein
В моем понимании, присутствие некоторой колонки в ...

вы не правы. частично сортированные данные, как минимум, меньше занимают места при фуллскане, даже если бы индексы не использовались, как вы говорите

_
вы не правы. частично сортированные данные, как ми...

Зависит от кардинальности колонок, если uuid стоит первым в order by, то дальше уже не важно)

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

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

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
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
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Карта сайта