Обсуждаем ClickHouse
мне помогли вот такие опции
"SET min_insert_block_size_rows = 0",
"SET min_insert_block_size_bytes = 0"
какие могут быть подводные камни,если у меня запрос будет работать раз в день добавляя по 100 тыс строк с этими опциями? Изначально много партов создастся, но вроде как они быстро фоново склеиваются
Я пока только поймал виноватых по логам и перегрузка из временных, которых больше нет.
Так что нужно еще воспроизвести :)
Да, пока версия что там в полях чуть ли не doc файлы.
Буду разбираться что там на такой банальщине так на ядра налегает
там все время улучшают, но суть в том что DateTime64 это децимал и там в общем случае нужна точка (dot) , чтобы отделить дробную часть от целой части секунд
т.е. либо 1759496469.555
либо 2025-10-03 15:01:54.555
но в разных версиях по разному, КХ пытаются научить угадывать что имелось в виду под 1759496469555 -- это наносекунды или секунды, но это типа тут работает (insert values), а вот тут не работает (insert csv).
Привет! Вставляю из другой базы в кликхаус таймстемпы
Поле в которое вставляю названо так же timestamp, тип данных выставил DateTime64(N)
При N от 3 до 8 данные вставляются, однако кастятся не верно
Дело в том, что таймстемпы даны с точностью до наносекунд (например 1642435541563013422) и для них N от 3 до 8 неверно интерпретируется.
Но при DateTime64(9) - появляется ошибка:
Decimal math overflow: while converting source column timestamp to destination column timestamp: while executing 'FUNCTION _CAST(timestamp :: 6, DateTime64(9) :: 21) -> _CAST(timestamp, DateTime64(9)) DateTime64(9)
У нас самописный, если инсталляция одна и под одним VPN то достаточно Airflow. У нас много в разных регионах под разными VPN, по этому пришлось сделать свой
Читать полностью…https://kb.altinity.com/altinity-kb-integrations/altinity-kb-kafka/error-handling/
Читать полностью…скип индекс у меня в файловом кеше висит in its entirety (я надеюсь; памяти с запасом и я повторяю запрос пока время выполнения не выровняется по нижней границе). остаётся только его распаковать, если он запакован
а что за кеш? query condition? я не могу найти ничего про dedicated skip index cache.
гранулярность надо попробовать.. у меня колонка почти из конца списка order by, дальше только таймстемп, интуиция говорит что станет хуже (но что-то она подводит пока :D)
та нет обычно никакой проблемы написать select так чтобы не было ошибок, для практически всего есть OrZero , OrNull
не можем распарсить, пишем Null или 0
да (скип индекс дорого загружать с диска), помогает использовать либо кеш на skip индексы, либо гранулярность побольше, я недавно поменял у minmax скип индекса гранулярность с 10 на 100, так сразу буст и во времени анализа запроса и в использованном cpu (особенно порадовал cpu, раз в 10 меньше стало использоваться) (кеша на скип индексы в той версии еще нет)
Читать полностью…но селект с таким индексом работает медленнее, чем если его временно отключить
Читать полностью…обычно люди не хотят терять данные. Но если вам пофиг, то почему бы и нет
Читать полностью…Спасибо! Это вообще более-менее нормальная практика - ставить игнор ошибкам матвью?
Читать полностью…Причем вставка во временную таблицу 1с
А перегрузка из нее в основную таблицу 6с и утилизация ядер
В новых кх клиентах если пробел нажать профайлер показывает
Читать полностью…Не знаю, я бы попробовал выгрузить в csv файл и загрузить из файла и посмотреть сколько инсерт из файла ест.
Читать полностью…for future reference: в пару к index_mark_cache_size, есть метрика IndexMarkCacheBytes, чтобы понять не пора ли его бампнуть
Читать полностью…@den_crane в чате не хватает реакций конечно. большое агрегированное спасибо за ваши рассказы!
Читать полностью…Коллеги, подскажите пожалуйста!!. Какие действия для удаления таблицы?. Была таблица репликации. Её переименовали. Её надо грохнуть
Читать полностью…ага, вариант со скриптом по таймеру в голову приходил - получается, тоже рабочий вариант. а кстати, раз уж пошло (это у нас отдельная тема изысканий, простите 😁) - а шедулер какой используете?
Читать полностью…Примерно так, но я еще ставлю один MV вначале, который тупо вычитыввет топик.
Дальше в зависимости от нагрузки, либо как тут показано через два мат вью, либо вообще тупо скриптом по таймеру перекладываю и обрабатываю ошибки.
Если нагрузка небольшая, скрипт стабильнее и легче модифицировать
<!-- <index_mark_cache_size>5368709120</index_mark_cache_size> -->
а хотя он включен по дефолту
select * from system.server_settings where name like 'index_mark_cache_size';
Полностью согласен. Мы и источник, к сожалению, не до конца контролируем, и парсинг не всегда делается умелыми специалистами. Сейчас вводим код-ревью и обязательное применение ...OrZero и подобного. Но хотелось бы и вот с этой стороны подстраховаться.
Читать полностью…подскажите, а как вы отвязали ошибки матвью от вычитки?
Читать полностью…это ожидаемо, особенно если индекс не на лидирующее поле, из pk индекса нельзя узнать последнее значение в грануле, только первое
Читать полностью…что-то у меня на индексы никак не отрастёт интуиция.
ожидание: если у меня есть колонка в первичном ключе, добавление minmax индекса по ней-же не будет прюнить гранулы никак,
реальность:
вот не совсем понимаю, почему нет. Вы не могли бы чуть пояснить? Разве будет плохо, если мы отвяжем этап парсинга от этапа вычитки и первичного сохранения?
Читать полностью…Я складываю каждую строку отдельно как json, а потом через мат вью перекладываю в нормальную структуру и формирую DLQ через второй мат вью.
Читать полностью…