Перейти к основному содержанию

Релиз ClickHouse 19.17

Релиз ClickHouse 19.17.6.36, 2019-12-27

Исправление ошибки

  • Исправлено потенциальное переполнение буфера при распаковке. Злоумышленник мог передать специально сформированные сжатые данные, что могло привести к чтению за пределами буфера. Эту проблему обнаружил Eldar Zaitov из команды информационной безопасности Yandex. #8404 (alexey-milovidov)
  • Исправлено возможное аварийное завершение работы сервера (std::terminate), если сервер не может отправить или записать данные в формате JSON или XML, содержащие значения типа String (требующие проверки UTF-8), а также при сжатии данных результата алгоритмом Brotli и в некоторых других редких случаях. #8384 (alexey-milovidov)
  • Исправлены словари, использующие в качестве источника ClickHouse VIEW: теперь чтение таких словарей не вызывает ошибку There is no query. #8351 (Nikolai Kochetov)
  • Исправлена проверка, разрешён ли хост клиента по host_regexp, указанному в users.xml. #8241, #8342 (Vitaly Baranov)
  • RENAME TABLE для distributed таблицы теперь переименовывает папку, содержащую вставленные данные, перед их отправкой в сегменты. Это устраняет проблему при последовательных переименованиях tableA->tableB, tableC->tableA. #8306 (tavplubix)
  • range_hashed внешние словари, созданные с помощью DDL-запросов, теперь поддерживают диапазоны для произвольных числовых типов. #8275 (alesapin)
  • Исправлена ошибка в табличной функции INSERT INTO table SELECT ... FROM mysql(...). #8234 (tavplubix)
  • Исправлен segfault в INSERT INTO TABLE FUNCTION file() при вставке в несуществующий файл. Теперь в этом случае файл будет создан, а затем будет выполнена вставка. #8177 (Olga Khvostikova)
  • Исправлена ошибка в bitmapAnd при пересечении агрегированного битмапа и скалярного битмапа. #8082 (Yue Huang)
  • Исправлен segfault при использовании запроса EXISTS без квалификатора TABLE или DICTIONARY, например EXISTS t. #8213 (alexey-milovidov)
  • Исправлен возвращаемый тип функций rand и randConstant в случае аргумента типа Nullable. Теперь эти функции всегда возвращают UInt32 и никогда — Nullable(UInt32). #8204 (Nikolai Kochetov)
  • Исправлен DROP DICTIONARY IF EXISTS db.dict: теперь исключение не генерируется, если db не существует. #8185 (Vitaly Baranov)
  • Если таблица была удалена не полностью из-за сбоя сервера, сервер попытается восстановить её и загрузить #8176 (tavplubix)
  • Исправлен тривиальный count-запрос для distributed таблицы, если локальных таблиц сегментов больше двух. #8164 (小路)
  • Исправлена ошибка, которая приводила к гонке данных в DB::BlockStreamProfileInfo::calculateRowsBeforeLimit() #8143 (Alexander Kazakov)
  • Исправлено выполнение ALTER table MOVE part сразу после слияния указанной части, из-за чего могла перемещаться часть, в которую сливалась указанная. Теперь корректно перемещается именно указанная часть. #8104 (Vladimir Chebotarev)
  • Теперь выражения для словарей можно задавать в виде строк. Это полезно для вычисления атрибутов при извлечении данных из источников, отличных от ClickHouse, поскольку позволяет использовать в таких выражениях синтаксис, отличный от синтаксиса ClickHouse. #8098 (alesapin)
  • Исправлено очень редкое состояние гонки в clickhouse-copier, вызванное переполнением ZXid. #8088 (Ding Xiang Fei)
  • Исправлена ошибка, из-за которой после сбоя запроса (например, из-за “Too many simultaneous queries”) не считывалась информация о внешних таблицах, и следующий запрос воспринимал эту информацию как начало нового запроса, что приводило к ошибке вида Unknown packet from client. #8084 (Azat Khuzhin)
  • Предотвращено разыменование null после “Unknown packet X from server” #8071 (Azat Khuzhin)
  • Восстановлена поддержка всех локалей ICU, добавлена возможность применять collation к константным выражениям, а в таблицу system.collations добавлено название языка. #8051 (alesapin)
  • Количество потоков чтения из StorageFile и StorageHDFS теперь ограничено, чтобы не допускать превышения лимита памяти. #7981 (alesapin)
  • Исправлен запрос CHECK TABLE для таблиц семейства *MergeTree без ключа. #7979 (alesapin)
  • Удалён номер мутации из имени части, если мутаций не было. Это улучшило совместимость со старыми версиями. #8250 (alesapin)
  • Исправлена ошибка, из-за которой для некоторых присоединённых частей пропускались мутации, поскольку их data_version превышает версию мутации таблицы. #7812 (Zhichang Yu)
  • Разрешён запуск сервера при наличии избыточных копий частей после их перемещения на другое устройство. #7810 (Vladimir Chebotarev)
  • Исправлена ошибка “Sizes of columns does not match”, которая могла возникать при использовании столбцов с агрегатными функциями. #7790 (Boris Granveaud)
  • Теперь при использовании WITH TIES вместе с LIMIT BY будет сгенерировано исключение. Также теперь можно использовать TOP с LIMIT BY. #7637 (Nikita Mikhaylov)
  • Исправлена перезагрузка словаря при наличии invalidate_query, из-за которого прекращались обновления и возникало исключение при предыдущих попытках обновления. #8029 (alesapin)

Релиз ClickHouse 19.17.4.11, 2019-11-22

Обратно несовместимое изменение

  • Для хранения результатов скалярных подзапросов вместо AST теперь используется столбец — для повышения производительности. Параметр enable_scalar_subquery_optimization был добавлен в версии 19.17 и включен по умолчанию. Это приводит к ошибкам, подобным этой, при обновлении с предыдущих версий до 19.17.2 или 19.17.3. В 19.17.4 этот параметр по умолчанию отключили, чтобы сделать возможным обновление с 19.16 и более ранних версий без ошибок. #7392 (Amos Bird)

Новая возможность

  • Добавлена возможность создавать словари с помощью DDL-запросов. #7360 (alesapin)
  • Тип индекса bloom_filter теперь поддерживает LowCardinality и Nullable #7363 #7561 (Nikolai Kochetov)
  • Добавлена функция isValidJSON для проверки того, что переданная строка является корректным JSON. #5910 #7293 (Vdimir)
  • Реализована функция arrayCompact #7328 (Memo)
  • Добавлена функция hex для чисел типа Decimal. Она работает как hex(reinterpretAsString()), но не удаляет последние нулевые байты. #7355 (Mikhail Korotov)
  • Добавлены функции arrayFill и arrayReverseFill, которые заменяют элементы другими элементами перед ними или после них в массиве. #7380 (hcz)
  • Добавлена поддержка CRC32IEEE()/CRC64() #7480 (Azat Khuzhin)
  • Реализована функция char, аналогичная функции в mysql #7486 (sundyli)
  • Добавлена функция bitmapTransform. Она преобразует массив значений в битмапе в другой массив значений; результатом является новый битмап #7598 (Zhichang Yu)
  • Реализована функция javaHashUTF16LE() #7651 (achimbab)
  • Добавлен виртуальный столбец _shard_num для движка Distributed #7624 (Azat Khuzhin)

Экспериментальные возможности

  • Поддержка processors (новый конвейер выполнения запроса) в MergeTree. #7181 (Nikolai Kochetov)

Исправление ошибки

  • Исправлен некорректный разбор чисел с плавающей точкой в Values #7817 #7870 (tavplubix)
  • Исправлена редкая взаимная блокировка, которая может возникнуть при включенном trace_log. #7838 (filimonov)
  • Предотвращено дублирование сообщений при записи в таблицу Kafka, если из неё выбирают данные MV #7265 (Ivan)
  • Поддержка Array(LowCardinality(Nullable(String))) в IN. Устранена проблема #7364 #7366 (achimbab)
  • Добавлена обработка SQL_TINYINT и SQL_BIGINT, а также исправлена обработка типа данных SQL_FLOAT в источниках данных моста ODBC. #7491 (Denis Glazachev)
  • Исправлена агрегация (avg и quantiles) для пустых столбцов типа Decimal #7431 (Andrey Konyaev)
  • Исправлена операция INSERT в Distributed со столбцами MATERIALIZED #7377 (Azat Khuzhin)
  • Исправлена работа MOVE PARTITION, если некоторые части партиции уже находятся на целевом диске или томе #7434 (Vladimir Chebotarev)
  • Исправлена ошибка, из-за которой в многодисковых конфигурациях во время мутаций в ReplicatedMergeTree не создавались жёсткие ссылки. #7558 (Vladimir Chebotarev)
  • Исправлена ошибка мутации в MergeTree, возникавшая, когда вся часть оставалась неизменной и подбирался другой диск с наибольшим свободным местом #7602 (Vladimir Chebotarev)
  • Исправлена ошибка, из-за которой keep_free_space_ratio не считывался из раздела конфигурации disks #7645 (Vladimir Chebotarev)
  • Исправлена ошибка в таблицах, содержащих только столбцы Tuple или столбцы со сложными путями. Исправлено в 7541. #7545 (alesapin)
  • Не учитывать использование памяти движком Buffer в ограничении max_memory_usage #7552 (Azat Khuzhin)
  • Исправлено использование финальной метки в таблицах MergeTree, упорядоченных по tuple(). В редких случаях это могло приводить к ошибке Can't adjust last granule при выполнении SELECT. #7639 (Anton Popov)
  • Исправлена ошибка в мутациях, где в предикате используются действия, требующие Context (например, функции для JSON), которая могла приводить к сбоям или странным исключениям. #7664 (alesapin)
  • Исправлено несоответствие в экранировании имён баз данных и таблиц в каталогах data/ и shadow/ #7575 (Alexander Burmak)
  • Добавлена поддержка дублирующихся ключей в RIGHT|FULL JOIN, например ON t.x = u.x AND t.x = u.y. Исправлено падение в этом случае. #7586 (Artem Zuikov)
  • Исправлена ошибка Not found column <expression> in block при JOIN по выражению с RIGHT или FULL JOIN. #7641 (Artem Zuikov)
  • Ещё одна попытка исправить бесконечный цикл в формате PrettySpace #7591 (Olga Khvostikova)
  • Исправлена ошибка в функции concat, которая возникала, когда все аргументы имели тип FixedString и одинаковый размер. #7635 (alesapin)
  • Исправлено исключение, возникавшее при использовании 1 аргумента при задании хранилищ S3, URL и HDFS. #7618 (Vladimir Chebotarev)
  • Исправлена область видимости InterpreterSelectQuery для представлений, содержащих запрос #7601 (Azat Khuzhin)

Улучшения

  • Столбцы Nullable распознаются, а значения NULL корректно обрабатываются через мост ODBC #7402 (Vasily Nemkov)
  • Текущий батч для распределённой отправки теперь записывается атомарно #7600 (Azat Khuzhin)
  • Если не удаётся определить таблицу по имени столбца в запросе, генерируется исключение. #7358 (Artem Zuikov)
  • В MergeTreeSettings добавлена настройка merge_max_block_size #7412 (Artem Zuikov)
  • Запросы с HAVING и без GROUP BY предполагают группировку по константе. Поэтому SELECT 1 HAVING 1 теперь возвращает результат. #7496 (Amos Bird)
  • Добавлена поддержка разбора (X,) как кортежа, аналогично Python. #7501, #7562 (Amos Bird)
  • Поведение функции range сделано почти таким же, как в Python. #7518 (sundyli)
  • В таблицу system.settings добавлены столбцы constraints #7553 (Vitaly Baranov)
  • Улучшен формат Null для обработчика TCP, поэтому теперь можно использовать select ignore(<expression>) from table format Null для измерения производительности через clickhouse-client #7606 (Amos Bird)
  • Запросы вида CREATE TABLE ... AS (SELECT (1, 2)) теперь разбираются корректно #7542 (hcz)

Повышение производительности

  • Повышена производительность агрегации по коротким строковым ключам. #6243 (Alexander Kuzmenkov, Amos Bird)
  • Выполняется дополнительный проход анализа синтаксиса/выражений для получения возможных оптимизаций после свёртки константных предикатов. #7497 (Amos Bird)
  • Для вычисления тривиального SELECT count() FROM table; используется метаинформация хранилища. #7510 (Amos Bird, alexey-milovidov)
  • Обработка arrayReduce векторизована аналогично addBatch в Aggregator. #7608 (Amos Bird)
  • Небольшое повышение производительности при чтении из Kafka #7475 (Ivan)

Улучшения сборки/тестирования/упаковки

  • Добавлена поддержка кросс-компиляции для архитектуры процессора AARCH64. Переработан скрипт упаковщика. #7370 #7539 (Ivan)
  • Toolchain darwin-x86_64 и linux-aarch64 теперь распаковываются в смонтированный Docker-том при сборке пакетов #7534 (Ivan)
  • Обновлён Docker-образ для упаковщика бинарных файлов #7474 (Ivan)
  • Исправлены ошибки компиляции на macOS Catalina #7585 (Ernest Poletaev)
  • Небольшой рефакторинг логики анализа запросов: сложный класс разделён на несколько простых. #7454 (Artem Zuikov)
  • Исправлена сборка без подмодулей #7295 (proller)
  • Улучшен add_globs в файлах CMake #7418 (Amos Bird)
  • Удалены жёстко заданные пути в цели unwind #7460 (Konstantin Podshumok)
  • Разрешено использовать формат MySQL без SSL #7524 (proller)

Прочее

Релиз ClickHouse 19.16

Релиз ClickHouse 19.16.14.65, 2020-03-25

  • Исправлена ошибка при пакетных вычислениях тернарных логических операций с несколькими аргументами (более 10). #8718 (Alexander Kazakov) Это исправление было бэкпортировано в версию 19.16 по специальному запросу Altinity.

Релиз ClickHouse 19.16.14.65, 2020-03-05

  • Исправлена несовместимость распределённых подзапросов со старыми версиями ClickHouse. Исправляет #7851 (tabplubix)
  • При выполнении запроса CREATE сворачиваются константные выражения в аргументах движка хранения. Пустое имя базы данных заменяется на текущую базу данных. Также исправлена проверка локального адреса в ClickHouseDictionarySource. Исправляет #6508, #3492. #9262 (tabplubix)
  • Теперь фоновые слияния в таблицах семейства *MergeTree точнее сохраняют порядок томов в политике хранения. #8549 (Vladimir Chebotarev)
  • Предотвращена потеря данных в Kafka в редких случаях, когда после чтения суффикса, но до коммита, возникает исключение. Исправляет #9378. Связано: #7175 #9507 (filimonov)
  • Исправлена ошибка, приводившая к завершению работы сервера при попытке использовать / удалить таблицу Kafka, созданную с неверными параметрами. Исправляет #9494. Включает #9507. #9513 (filimonov)
  • Разрешено использовать MaterializedView с подзапросами над таблицами Kafka. #8197 (filimonov)

Новая возможность

  • Добавлена опция deduplicate_blocks_in_dependent_materialized_views для управления поведением идемпотентных вставок в таблицы с materialized view. Эта возможность была добавлена в релиз с исправлениями ошибок по специальному запросу Altinity. #9070 (urykhy)

Релиз ClickHouse 19.16.2.2, 2019-10-30

Обратно несовместимое изменение

  • Добавлена ранее отсутствовавшая проверка арности для count/counIf. #7095 #7298 (Vdimir)
  • Удалён устаревший параметр asterisk_left_columns_only (по умолчанию он был отключён). #7335 (Artem Zuikov)
  • Строки формата для формата данных Template теперь задаются в файлах. #7118 (tavplubix)

Новая возможность

  • Представлена uniqCombined64() для вычисления мощности, превышающей UINT_MAX. #7213, #7222 (Azat Khuzhin)
  • Добавлена поддержка индексов Bloom filter для столбцов типа Array. #6984 (achimbab)
  • Добавлена функция getMacro(name), которая возвращает String со значением соответствующего <macros> из конфигурации сервера. #7240 (alexey-milovidov)
  • Добавлены две опции конфигурации для словаря с HTTP-источником: credentials и http-headers. #7092 (Guillaume Tassery)
  • Добавлено новое ProfileEvent Merge, которое подсчитывает количество запущенных фоновых слияний. #7093 (Mikhail Korotov)
  • Добавлена функция fullHostName, которая возвращает полностью определённое доменное имя. #7263 #7291 (sundyli)
  • Добавлены функции arraySplit и arrayReverseSplit, которые разбивают массив по условиям “отсечения”. Они полезны при обработке временных последовательностей. #7294 (hcz)
  • Добавлены новые функции, которые возвращают Array всех совпадающих индексов в семействе функций multiMatch. #7299 (Danila Kutenin)
  • Добавлен новый движок базы данных Lazy, оптимизированный для хранения большого числа небольших таблиц типа -Log. #7171 (Nikita Vasilev)
  • Добавлены агрегатные функции groupBitmapAnd, -Or, -Xor для столбцов битмапа. #7109 (Zhichang Yu)
  • Добавлены комбинаторы агрегатных функций -OrNull и -OrDefault, которые возвращают null или значения по умолчанию, когда агрегировать нечего. #7331 (hcz)
  • Представлен формат данных CustomSeparated, который поддерживает пользовательские правила экранирования и использования разделителей. #7118 (tavplubix)
  • Добавлена поддержка Redis в качестве источника внешнего словаря. #4361 #6962 (comunodi, Anton Popov)

Исправление ошибки

  • Исправлен неверный результат запроса, если в нём есть секция WHERE IN (SELECT ...) и используется optimize_read_in_order. #7371 (Anton Popov)
  • Отключён плагин аутентификации MariaDB, который зависит от файлов вне проекта. #7140 (Yuriy Baranov)
  • Исправлено исключение Cannot convert column ... because it is constant but values of constants are different in source and result, которое в редких случаях могло возникать при использовании функций now(), today(), yesterday(), randConstant(). #7156 (Nikolai Kochetov)
  • Исправлено использование тайм-аута HTTP keep-alive вместо тайм-аута TCP keep-alive. #7351 (Vasily Nemkov)
  • Исправлена ошибка сегментации в groupBitmapOr (проблема #7109). #7289 (Zhichang Yu)
  • Для materialized view операция commit для Kafka вызывается после записи всех данных. #7175 (Ivan)
  • Исправлено неверное значение duration_ms в таблице system.part_log. Оно отличалось в десять раз. #7172 (Vladimir Chebotarev)
  • Быстро исправлен сбой в таблице LIVE VIEW и вновь включены все тесты LIVE VIEW. #7201 (vzakaznikov)
  • Исправлена корректная сериализация значений NULL в min/max-индексах частей MergeTree. #7234 (Alexander Kuzmenkov)
  • Не добавлять виртуальные столбцы в метаданные .sql, когда таблица создаётся как CREATE TABLE AS. #7183 (Ivan)
  • Исправлена ошибка сегментации в запросе ATTACH PART. #7185 (alesapin)
  • Исправлен неверный результат для некоторых запросов, вызванный оптимизацией пустых подзапросов IN и пустых INNER/RIGHT JOIN. #7284 (Nikolai Kochetov)
  • Исправлена ошибка AddressSanitizer в методе getHeader() для LIVE VIEW. #7271 (vzakaznikov)

Улучшения

  • Добавлено сообщение на случай ожидания по queue_wait_max_ms. #7390 (Azat Khuzhin)
  • Настройка s3_min_upload_part_size переведена на уровень таблицы. #7059 (Vladimir Chebotarev)
  • Проверка TTL в StorageFactory. #7304 (sundyli)
  • Объединение левых блоков в частичном соединении слиянием (оптимизация). #7122 (Artem Zuikov)
  • Недетерминированные функции больше не разрешены в мутациях движков таблиц Replicated, поскольку это может приводить к несогласованности между репликами. #7247 (Alexander Kazakov)
  • Отключён трекер памяти при преобразовании трассировки стека исключения в строку. Это позволяет избежать потери сообщений об ошибке типа Memory limit exceeded на сервере, из-за которой на клиенте возникало исключение Attempt to read after eof. #7264 (Nikolai Kochetov)
  • Различные улучшения форматов. Исправляет #6033, #2633, #6611, #6742 #7215 (tavplubix)
  • ClickHouse игнорирует значения в правой части оператора IN, которые нельзя преобразовать к типу левой части. Исправлена работа для составных типов — Array и Tuple. #7283 (Alexander Kuzmenkov)
  • Добавлена поддержка отсутствующих неравенств для ASOF JOIN. В синтаксисе ON для столбца ASOF можно использовать вариант less-or-equal, а также строгие варианты greater и less. #7282 (Artem Zuikov)
  • Оптимизация частичного соединения слиянием. #7070 (Artem Zuikov)
  • В функциях uniqCombined теперь используется не более 98K памяти. #7236, #7270 (Azat Khuzhin)
  • Части правой соединяемой таблицы выгружаются на диск в PartialMergeJoin (если памяти недостаточно). При необходимости данные загружаются обратно. #7186 (Artem Zuikov)

Повышение производительности

  • Ускорена работа joinGet с константными аргументами за счёт устранения дублирования данных. #7359 (Amos Bird)
  • Добавлен ранний возврат, если подзапрос пуст. #7007 (小路)
  • Оптимизирован разбор SQL-выражения в Values. #6781 (tavplubix)

Улучшения сборки/тестирования/упаковки

  • Отключены некоторые компоненты contrib для кросс-компиляции под Mac OS. #7101 (Ivan)
  • Добавлена недостающая линковка с PocoXML для clickhouse_common_io. #7200 (Azat Khuzhin)
  • В clickhouse-test добавлена поддержка нескольких аргументов фильтра тестов. #7226 (Alexander Kuzmenkov)
  • Включены musl и jemalloc для ARM. #7300 (Amos Bird)
  • В clickhouse-test добавлен параметр --client-option, позволяющий передавать клиенту дополнительные параметры. #7277 (Nikolai Kochetov)
  • При обновлении rpm-пакета теперь сохраняются существующие конфигурационные файлы. #7103 (filimonov)
  • Исправлены ошибки, выявленные PVS. #7153 (Artem Zuikov)
  • Исправлена сборка под Darwin. #7149 (Ivan)
  • Обеспечена совместимость с glibc 2.29. #7142 (Amos Bird)
  • Убедитесь, что dh_clean не изменяет потенциальные исходные файлы. #7205 (Amos Bird)
  • Попытка избежать конфликта при обновлении из altinity rpm — в нём файл конфигурации упакован отдельно в clickhouse-server-common. #7073 (filimonov)
  • Оптимизированы некоторые заголовочные файлы для ускорения пересборки. #7212, #7231 (Alexander Kuzmenkov)
  • Добавлены тесты производительности для типов Date и DateTime. #7332 (Vasily Nemkov)
  • Исправлены некоторые тесты с недетерминированными мутациями. #7132 (Alexander Kazakov)
  • В CI добавлена сборка с MemorySanitizer. #7066 (Alexander Kuzmenkov)
  • Предотвращено использование неинициализированных значений в MetricsTransmitter. #7158 (Azat Khuzhin)
  • Исправлены некоторые проблемы с полями, выявленные MemorySanitizer. #7135, #7179 (Alexander Kuzmenkov), #7376 (Amos Bird)
  • Исправлено неопределённое поведение функции murmurhash32. #7388 (Amos Bird)
  • Устранено неопределённое поведение в StoragesInfoStream. #7384 (tavplubix)
  • Исправлено сворачивание константных выражений для движков внешних баз данных (MySQL, ODBC, JDBC). В предыдущих версиях это не работало для нескольких константных выражений и вообще не работало для Date, DateTime и UUID. Это исправление устраняет проблему #7245 #7252 (alexey-milovidov)
  • Исправлена ошибка гонки данных, обнаруженная ThreadSanitizer, в LIVE VIEW при обращении к переменной no_users_thread. #7353 (vzakaznikov)
  • Удалены символы malloc из libcommon #7134, #7065 (Amos Bird)
  • Добавлен глобальный флаг ENABLE_LIBRARIES, отключающий все библиотеки. #7063 (proller)

Приведение кода в порядок

  • Обобщён репозиторий конфигурации в рамках подготовки к DDL для словарей. #7155 (alesapin)
  • Парсер для DDL словарей без какой-либо семантики. #7209 (alesapin)
  • ParserCreateQuery разделён на несколько более мелких парсеров. #7253 (alesapin)
  • Небольшой рефакторинг и переименование, связанные с внешними словарями. #7111 (alesapin)
  • Часть кода переработана в рамках подготовки к ролевому управлению доступом. #7235 (Vitaly Baranov)
  • Несколько улучшений в коде DatabaseOrdinary. #7086 (Nikita Vasilev)
  • В методах find() и emplace() хеш-таблиц больше не используются итераторы. #7026 (Alexander Kuzmenkov)
  • Исправлен getMultipleValuesFromConfig для случая, когда корень параметра не пуст. #7374 (Mikhail Korotov)
  • Удалено некоторое дублирование кода (TemporaryFile и TemporaryFileStream) #7166 (Artem Zuikov)
  • Немного улучшена читаемость кода (MergeTreeData::getActiveContainingPart). #7361 (Vladimir Chebotarev)
  • Добавлено ожидание завершения всех запланированных задач, использующих локальные объекты, если ThreadPool::schedule(...) генерирует исключение. ThreadPool::schedule(...) переименован в ThreadPool::scheduleOrThrowOnError(...), а комментарии исправлены так, чтобы было очевидно, что он может генерировать исключение. #7350 (tavplubix)

Релиз ClickHouse 19.15

Релиз ClickHouse 19.15.4.10, 2019-10-31

Исправление ошибки

  • Добавлена обработка SQL_TINYINT и SQL_BIGINT, а также исправлена обработка типа данных SQL_FLOAT в мосте ODBC. #7491 (Denis Glazachev)
  • В MOVE PARTITION разрешено размещать некоторые части на целевом диске или томе. #7434 (Vladimir Chebotarev)
  • Исправлена обработка значений NULL в столбцах с типом Nullable через мост ODBC. #7402 (Vasily Nemkov)
  • Исправлен INSERT в Distributed на удалённый узел с MATERIALIZED столбцами. #7377 (Azat Khuzhin)
  • Исправлена функция getMultipleValuesFromConfig. #7374 (Mikhail Korotov)
  • Исправлена проблема, из-за которой использовался тайм-аут HTTP keep alive вместо тайм-аута TCP keep alive. #7351 (Vasily Nemkov)
  • Добавлено ожидание завершения всех задач при исключении (исправляет редкие segfault). #7350 (tavplubix)
  • Отключён push в MV при вставке в таблицу Kafka. #7265 (Ivan)
  • Отключен трекер памяти для стека исключений. #7264 (Nikolai Kochetov)
  • Исправлен некорректный код преобразования запроса для внешней базы данных. #7252 (alexey-milovidov)
  • Исключено использование неинициализированных значений в MetricsTransmitter. #7158 (Azat Khuzhin)
  • Добавлен пример конфигурации с макросами для тестов (alexey-milovidov)

Релиз ClickHouse 19.15.3.6, 2019-10-09

Исправление ошибки

  • Исправлен bad_variant в хешированном словаре. (alesapin)
  • Исправлена ошибка, вызывавшая segmentation fault в запросе ATTACH PART. (alesapin)
  • Исправлен расчёт времени в MergeTreeData. (Vladimir Chebotarev)
  • После завершения записи commit в Kafka теперь выполняется явно. #7175 (Ivan)
  • Значения NULL теперь корректно сериализуются в индексах min/max частей MergeTree. #7234 (Alexander Kuzmenkov)

Релиз ClickHouse 19.15.2.2, 2019-10-01

Новая возможность

  • Многоуровневое хранение: добавлена поддержка использования нескольких томов хранилища для таблиц с движком MergeTree. Свежие данные можно хранить на SSD, а старые автоматически перемещать на HDD. (пример). #4918 (Igr) #6489 (alesapin)
  • Добавлена табличная функция input для чтения входящих данных в запросе INSERT SELECT. #5450 (palasonic1) #6832 (Anton Popov)
  • Добавлена структура словаря sparse_hashed, функционально эквивалентная структуре hashed, но более эффективно использующая память. Она использует примерно вдвое меньше памяти ценой более медленного получения значений. #6894 (Azat Khuzhin)
  • Реализована возможность задавать список пользователей для доступа к словарям. Используется только для текущей подключённой базы данных. #6907 (Guillaume Tassery)
  • В запрос SHOW добавлена опция LIMIT. #6944 (Philipp Malkovsky)
  • Добавлена функция bitmapSubsetLimit(bitmap, range_start, limit), которая возвращает подмножество из наименьших limit значений в наборе, не меньших range_start. #6957 (Zhichang Yu)
  • Добавлены функции bitmapMin и bitmapMax. #6970 (Zhichang Yu)
  • Добавлена функция repeat, связанная с issue-6648 #6999 (flynn)

Экспериментальные возможности

  • Реализован вариант Merge JOIN (в памяти), который не изменяет текущий конвейер. Результат частично отсортирован по ключу слияния. Чтобы использовать эту возможность, установите partial_merge_join = 1. Merge JOIN всё ещё находится в разработке. #6940 (Artem Zuikov)
  • Добавлены движок S3 и табличная функция. Они всё ещё находятся в разработке (поддержка authentication пока отсутствует). #5596 (Vladimir Chebotarev)

Улучшения

  • Каждое сообщение, прочитанное из Kafka, вставляется атомарно. Это решает почти все известные проблемы с движком Kafka. #6950 (Ivan)
  • Улучшен failover для распределенных запросов. Сокращено время восстановления; кроме того, этот параметр теперь можно настраивать и видеть в system.clusters. #6399 (Vasily Nemkov)
  • Добавлена поддержка числовых значений для Enum напрямую в операторе IN. #6766 #6941 (dimarub2000)
  • Добавлена поддержка перенаправлений в URL-хранилище (необязательно, по умолчанию отключено). #6914 (maqroll)
  • Добавлено информационное сообщение при подключении к серверу клиента более старой версии. #6893 (Philipp Malkovsky)
  • Удалено ограничение на максимальное время ожидания задержки при отправке данных в Distributed-таблицах #6895 (Azat Khuzhin)
  • Добавлена возможность отправлять profile events (счетчики) с накопительными значениями в Graphite. Это можно включить в <events_cumulative> в серверном config.xml. #6969 (Azat Khuzhin)
  • Добавлено автоматическое приведение типа T к LowCardinality(T) при вставке данных в столбец типа LowCardinality(T) в формате Native через HTTP. #6891 (Nikolai Kochetov)
  • Добавлена возможность использовать функцию hex без reinterpretAsString для Float32, Float64. #7024 (Mikhail Korotov)

улучшение сборки/тестирования/упаковки

  • В бинарный файл clickhouse с отладочной информацией добавлен gdb-index. Это ускорит запуск gdb. #6947 (alesapin)
  • Ускорена сборка deb-пакетов с помощью пропатченного dpkg-deb, который использует pigz. #6960 (alesapin)
  • Для включения инструментирования всего кода проекта через libfuzzer установлено enable_fuzzing = 1. #7042 (kyprizel)
  • В CI добавлен smoke-тест раздельной сборки. #7061 (alesapin)
  • В CI добавлена сборка с MemorySanitizer. #7066 (Alexander Kuzmenkov)
  • libsparsehash заменён на sparsehash-c11 #6965 (Azat Khuzhin)

Исправление ошибки

  • Исправлена деградация производительности анализа индексов для сложных ключей в больших таблицах. Это исправляет #6924. #7075 (alexey-milovidov)
  • Исправлена логическая ошибка, вызывавшая segfault при чтении из пустого топика Kafka. #6909 (Ivan)
  • Исправлено слишком раннее закрытие соединения MySQL в MySQLBlockInputStream.cpp. #6882 (Clément Rodriguez)
  • Возвращена поддержка очень старых ядер Linux (исправление #6841) #6853 (alexey-milovidov)
  • Исправлена возможная потеря данных в запросе insert select в случае пустого блока во входном потоке. #6834 #6862 #6911 (Nikolai Kochetov)
  • Исправлена функция АrrayEnumerateUniqRanked для случая пустых массивов в параметрах. #6928 (proller)
  • Исправлены сложные запросы с ARRAY JOIN и глобальными подзапросами. #6934 (Ivan)
  • Исправлена ошибка Unknown identifier в ORDER BY и GROUP BY при использовании нескольких JOIN. #7022 (Artem Zuikov)
  • Исправлено предупреждение MSan при выполнении функции с аргументом LowCardinality. #7062 (Nikolai Kochetov)

Обратно несовместимое изменение

  • Изменён формат сериализации состояний агрегатной функции bitmap* для повышения производительности. Сериализованные состояния bitmap* из предыдущих версий больше не читаются. #6908 (Zhichang Yu)

Релиз ClickHouse 19.14

Релиз ClickHouse 19.14.7.15, 2019-10-02

Исправление ошибки

  • Этот релиз также включает все исправления ошибок из версии 19.11.12.69.
  • Исправлена совместимость распределённых запросов между версией 19.14 и более ранними версиями. Это исправление устраняет проблему #7068. #7069 (alexey-milovidov)

Релиз ClickHouse 19.14.6.12, 2019-09-19

Исправление ошибки

  • Исправлена работа функции АrrayEnumerateUniqRanked в случае пустых массивов в параметрах. #6928 (proller)
  • Исправлено имя подзапроса в запросах с ARRAY JOIN и GLOBAL IN subquery при использовании псевдонима. Если псевдоним указан, он используется как имя внешней таблицы. #6934 (Ivan)

Улучшения сборки/тестирования/упаковки

  • Исправлен нестабильный тест 00715_fetch_merged_or_mutated_part_zookeeper: его переписали на shell-скрипт, так как в нём нужно дождаться применения мутаций. #6977 (Alexander Kazakov)
  • Исправлен сбой UBSan и MemSan в функции groupUniqArray при пустом массиве в качестве аргумента. Он был вызван помещением пустого PaddedPODArray в нулевую ячейку хеш-таблицы, поскольку не вызывался конструктор значения нулевой ячейки. #6937 (Amos Bird)

Релиз ClickHouse 19.14.3.3, 2019-09-10

Новая возможность

  • Модификатор WITH FILL для ORDER BY. (продолжение #5069) #6610 (Anton Popov)
  • Модификатор WITH TIES для LIMIT. (продолжение #5069) #6610 (Anton Popov)
  • Разбирать литерал NULL без кавычек как NULL (если включена настройка format_csv_unquoted_null_literal_as_null=1). Инициализировать поля null значениями по умолчанию, если тип данных этого поля не Nullable (если включена настройка input_format_null_as_default=1). #5990 #6055 (tavplubix)
  • Поддержка подстановочных шаблонов в путях табличных функций file и hdfs. Если путь содержит подстановочные шаблоны, таблица будет доступна в режиме только для чтения. Пример использования: select * from hdfs('hdfs://hdfs1:9000/some_dir/another_dir/*/file{0..9}{0..9}') и select * from file('some_dir/{some_file,another_file,yet_another}.tsv', 'TSV', 'value UInt32'). #6092 (Olga Khvostikova)
  • Новая таблица system.metric_log, которая хранит значения system.events и system.metrics через заданный интервал времени. #6363 #6467 (Nikita Mikhaylov) #6530 (alexey-milovidov)
  • Добавлена возможность записывать текстовые журналы ClickHouse в таблицу system.text_log. #6037 #6103 (Nikita Mikhaylov) #6164 (alexey-milovidov)
  • Показываются закрытые символы в трассировках стека (это делается путём разбора таблиц символов ELF-файлов). В трассировки стека добавлена информация о файле и номере строки, если доступна отладочная информация. Ускорен поиск имён символов за счёт индексации символов, присутствующих в программе. Добавлены новые SQL-функции для интроспекции: demangle и addressToLine. Функция symbolizeAddress переименована в addressToSymbol для единообразия. Функция addressToSymbol в целях производительности будет возвращать манглированное имя, поэтому необходимо применять demangle. Добавлена настройка allow_introspection_functions, которая по умолчанию отключена. #6201 (alexey-milovidov)
  • Табличная функция values (имя — регистронезависимое). Позволяет читать данные из списка VALUES, предложенного в #5984. Пример: SELECT * FROM VALUES('a UInt64, s String', (1, 'one'), (2, 'two'), (3, 'three')). #6217. #6209 (dimarub2000)
  • Добавлена возможность изменять параметры хранилища. Синтаксис: ALTER TABLE <table> MODIFY SETTING <setting> = <value>. #6366 #6669 #6685 (alesapin)
  • Добавлена поддержка удаления отсоединённых частей. Синтаксис: ALTER TABLE <table_name> DROP DETACHED PART '<part_id>'. #6158 (tavplubix)
  • Ограничения таблиц. Позволяет добавлять ограничения в определение таблицы, которые проверяются при вставке. #5273 (Gleb Novikov) #6652 (alexey-milovidov)
  • Поддержка каскадных materialized views. #6324 (Amos Bird)
  • Профилировщик запросов теперь включён по умолчанию и раз в секунду снимает сэмплы со всех потоков выполнения запроса. #6283 (alexey-milovidov)
  • Входной формат ORC. #6454 #6703 (akonyaev90)
  • Добавлены две новые функции: sigmoid и tanh (полезные для задач машинного обучения). #6254 (alexey-milovidov)
  • Функции hasToken(haystack, token), hasTokenCaseInsensitive(haystack, token) для проверки наличия заданного токена в haystack. Токен — это подстрока максимальной длины между двумя ASCII-символами, не являющимися буквенно-цифровыми (или границами haystack). Токен должен быть константной строкой. Поддерживается специализацией индекса tokenbf_v1. #6596, #6662 (Vasily Nemkov)
  • Новая функция neighbor(value, offset[, default_value]). Позволяет получить предыдущее/следующее значение в столбце в пределах блока данных. #5925 (Alex Krash) 6685365ab8c5b74f9650492c88a012596eb1b0c6 341e2e4587a18065c2da1ca888c73389f48ce36c Alexey Milovidov
  • Создана функция currentUser(), которая возвращает логин авторизованного пользователя. Для совместимости с MySQL добавлен псевдоним user(). #6470 (Alex Krash)
  • Новые агрегатные функции quantilesExactInclusive и quantilesExactExclusive, добавленные по предложению из #5885. #6477 (dimarub2000)
  • Функция bitmapRange(bitmap, range_begin, range_end), которая возвращает новое множество для указанного диапазона (без range_end). #6314 (Zhichang Yu)
  • Функция geohashesInBox(longitude_min, latitude_min, longitude_max, latitude_max, precision), которая создаёт массив строк длины precision с геохешами ячеек, покрывающих указанную область. #6127 (Vasily Nemkov)
  • Добавлена поддержка запросов INSERT для таблиц Kafka. #6012 (Ivan)
  • Добавлена поддержка виртуальных столбцов _partition и _timestamp для движка Kafka. #6400 (Ivan)
  • Возможность удалять конфиденциальные данные из query_log, серверных журналов и списка процессов по правилам на основе регулярных выражений. #5710 (filimonov)

Экспериментальные возможности

  • Формат входных и выходных данных Template. Позволяет задавать пользовательскую format string для ввода и вывода. #4354 #6727 (tavplubix)
  • Реализованы таблицы LIVE VIEW, первоначально предложенные в #2898, подготовленные в #3925 и затем обновлённые в #5541. Подробное описание см. в #5541. #5541 (vzakaznikov) #6425 (Nikolai Kochetov) #6656 (vzakaznikov) Обратите внимание, что возможность LIVE VIEW может быть удалена в следующих версиях.

Исправление ошибки

  • В этот выпуск также включены все исправления ошибок из версий 19.13 и 19.11.
  • Исправлена ошибка сегментации, когда у таблицы есть skip-индексы и происходит Вертикальное слияние. #6723 (alesapin)
  • Исправлен per-column TTL для столбцов с нетривиальными значениями по умолчанию. Ранее при принудительном TTL-слиянии запросом OPTIMIZE ... FINAL истёкшие значения заменялись значениями типа по умолчанию, а не заданными пользователем значениями по умолчанию для столбца. #6796 (Anton Popov)
  • Исправлена проблема дублирования сообщений Kafka при штатном перезапуске сервера. #6597 (Ivan)
  • Исправлен бесконечный цикл при чтении сообщений из Kafka. Не следует вообще приостанавливать/возобновлять consumer для subscription — иначе в некоторых сценариях он может остаться приостановленным на неопределённое время. #6354 (Ivan)
  • Исправлено исключение Key expression contains comparison between inconvertible types в функции bitmapContains. #6136 #6146 #6156 (dimarub2000)
  • Исправлен segfault при включенной настройке optimize_skip_unused_shards и отсутствии ключа сегментирования. #6384 (Anton Popov)
  • Исправлен некорректный код в мутациях, который мог приводить к повреждению памяти. Исправлен segfault при чтении по адресу 0x14c0, который мог возникать при одновременном DROP TABLE и SELECT из system.parts или system.parts_columns. Исправлено состояние гонки при подготовке запросов мутации. Исправлена взаимная блокировка, вызванная OPTIMIZE таблиц Replicated и одновременными операциями модификации, такими как ALTER. #6514 (alexey-milovidov)
  • Удалено избыточно подробное логирование в интерфейсе MySQL #6389 (alexey-milovidov)
  • Возвращена возможность разбирать логические настройки из значений ‘true’ и ‘false’ в файле конфигурации. #6278 (alesapin)
  • Исправлено аварийное завершение в функциях quantile и median при работе с Nullable(Decimal128). #6378 (Artem Zuikov)
  • Исправлена возможная ошибка, из-за которой запрос SELECT с условием WHERE по primary key, содержащим преобразование к типу Float, мог возвращать неполный результат. Причиной была некорректная проверка монотонности в функции toFloat. #6248 #6374 (dimarub2000)
  • Проверка настройки max_expanded_ast_elements для мутаций. Очистка мутаций после TRUNCATE TABLE. #6205 (Winter Zhang)
  • Исправлен результат JOIN для столбцов ключа при использовании join_use_nulls. Подставляются NULL вместо значений столбцов по умолчанию. #6249 (Artem Zuikov)
  • Исправлены индексы пропуска при Вертикальном слиянии и alter. Исправлено исключение Bad size of marks file. #6594 #6713 (alesapin)
  • Исправлено редкое падение в ALTER MODIFY COLUMN и при вертикальном слиянии, когда одна из слитых/изменённых частей пуста (0 строк) #6746 #6780 (alesapin)
  • Исправлена ошибка при преобразовании типов LowCardinality в AggregateFunctionFactory. Это исправление устраняет проблему #6257. #6281 (Nikolai Kochetov)
  • Исправлены некорректное поведение и возможные segfault в агрегатных функциях topK и topKWeighted. #6404 (Anton Popov)
  • Исправлен небезопасный код, связанный с функцией getIdentifier. #6401 #6409 (alexey-milovidov)
  • Исправлена ошибка в протоколе MySQL, который используется при подключении к ClickHouse из клиента MySQL. Причиной было переполнение буфера кучи в PacketPayloadWriteBuffer. #6212 (Yuriy Baranov)
  • Исправлена утечка памяти в функции bitmapSubsetInRange. #6819 (Zhichang Yu)
  • Исправлена редкая ошибка при выполнении мутации после изменения гранулярности. #6816 (alesapin)
  • По умолчанию разрешены сообщения Protobuf со всеми полями. #6132 (Vitaly Baranov)
  • Исправлена ошибка в функции nullIf, возникавшая при передаче NULL в качестве второго аргумента. #6446 (Guillaume Tassery)
  • Исправлена редкая ошибка, связанная с некорректным выделением/освобождением памяти в словарях типа cache со сложным ключом и строковыми полями, которая приводила к неограниченному потреблению памяти (похоже на утечку памяти). Ошибка воспроизводилась, когда размер строки был степенью двойки, начиная с восьми (8, 16, 32 и т. д.). #6447 (alesapin)
  • Исправлено кодирование Gorilla для коротких последовательностей, из-за которого возникало исключение Cannot write after end of buffer. #6398 #6444 (Vasily Nemkov)
  • Разрешено использовать типы, не допускающие NULL, в JOIN при включенной join_use_nulls. #6705 (Artem Zuikov)
  • Отключены подстановки Poco::AbstractConfiguration в запросах в clickhouse-client. #6706 (alexey-milovidov)
  • Предотвращена взаимная блокировка в REPLACE PARTITION. #6677 (alexey-milovidov)
  • Использование arrayReduce с константными аргументами может приводить к ошибке сегментации. #6242 #6326 (alexey-milovidov)
  • Исправлены неконсистентные части, которые могли появиться, если реплика была восстановлена после DROP PARTITION. #6522 #6523 (tavplubix)
  • Устранено зависание в функции JSONExtractRaw. #6195 #6198 (alexey-milovidov)
  • Исправлена ошибка, связанная с некорректной сериализацией индексов пропуска и агрегированием при использовании адаптивной гранулярности. #6594. #6748 (alesapin)
  • Исправлены модификаторы WITH ROLLUP и WITH CUBE в GROUP BY при двухуровневой агрегации. #6225 (Anton Popov)
  • Исправлена ошибка при записи меток вторичных индексов с адаптивной гранулярностью. #6126 (alesapin)
  • Исправлен порядок инициализации при запуске сервера. Поскольку StorageMergeTree::background_task_handle инициализируется в startup(), MergeTreeBlockOutputStream::write() может попытаться использовать его до инициализации. Теперь просто проверяется, был ли он инициализирован. #6080 (Ivan)
  • Очистка буфера данных после предыдущей операции чтения, завершившейся ошибкой. #6026 (Nikolay)
  • Исправлена ошибка при включении адаптивной гранулярности при создании новой реплики для таблицы семейства Replicated*MergeTree. #6394 #6452 (alesapin)
  • Исправлен возможный сбой при запуске сервера, если в libunwind возникало Исключение во время обработки другого исключения при обращении к неинициализированной структуре ThreadStatus. #6456 (Nikita Mikhaylov)
  • Исправлен сбой в функции yandexConsistentHash. Выявлено с помощью фазз-тестирования. #6304 #6305 (alexey-milovidov)
  • Исправлена проблема, из-за которой запросы могли зависать, когда сервер перегружен и глобальный пул потоков почти полностью занят. Это с большей вероятностью происходит в кластерах с большим числом сегментов (сотни), поскольку распределённые запросы выделяют по одному потоку на соединение с каждым сегментом. Например, эта проблема может воспроизводиться, если кластер из 330 сегментов обрабатывает 30 параллельных распределённых запросов. Эта проблема затрагивает все версии, начиная с 19.2. #6301 (alexey-milovidov)
  • Исправлена логика работы функции arrayEnumerateUniqRanked. #6423 (alexey-milovidov)
  • Исправлен segfault при декодировании таблицы символов. #6603 (Amos Bird)
  • Исправлено лишнее исключение при приведении LowCardinality(Nullable) к столбцу not-Nullable в случае, если он не содержит значений NULL (например, в запросе вида SELECT CAST(CAST('Hello' AS LowCardinality(Nullable(String))) AS String). #6094 #6119 (Nikolai Kochetov)
  • Убраны лишние кавычки в описании в таблице system.settings. #6696 #6699 (alexey-milovidov)
  • Устранена возможная взаимная блокировка при TRUNCATE таблицы Replicated. #6695 (alexey-milovidov)
  • Исправлено чтение в порядке, заданном ключом сортировки. #6189 (Anton Popov)
  • Исправлен запрос ALTER TABLE ... UPDATE для таблиц с enable_mixed_granularity_parts=1. #6543 (alesapin)
  • Исправлена ошибка из #4405 (начиная с 19.4.0). Воспроизводится в запросах к таблицам Distributed поверх таблиц MergeTree, когда не запрашивается ни один столбец (SELECT 1). #6236 (alesapin)
  • Исправлено переполнение при целочисленном делении из знакового типа в беззнаковый. Поведение было в точности таким же, как в языке C или C++ (правила целочисленного продвижения), что могло оказаться неожиданным. Обратите внимание, что переполнение по-прежнему возможно при делении большого знакового числа на большое беззнаковое число или наоборот (хотя такой случай встречается реже). Эта проблема существовала во всех версиях сервера. #6214 #6233 (alexey-milovidov)
  • Ограничено максимальное время паузы при throttling, когда задан max_execution_speed или max_execution_speed_bytes. Исправлены ложные ошибки вида Estimated query execution time (inf seconds) is too long. #5547 #6232 (alexey-milovidov)
  • Исправлены проблемы при использовании столбцов MATERIALIZED и псевдонимов в MaterializedView. #448 #3484 #3450 #2878 #2285 #3796 (Amos Bird) #6316 (alexey-milovidov)
  • Исправлено поведение FormatFactory для входных потоков, не реализованных в виде процессора. #6495 (Nikolai Kochetov)
  • Исправлена опечатка. #6631 (Alex Ryndin)
  • Исправлена опечатка в сообщении об ошибке ( is -> are ). #6839 (Denis Zhuravlev)
  • Исправлена ошибка при разборе из строки списка столбцов, если тип содержал запятую (эта проблема касалась хранилищ File, URL, HDFS) #6217. #6209 (dimarub2000)

Исправления безопасности

  • Этот релиз также содержит все исправления ошибок безопасности из версий 19.13 и 19.11.
  • Устранена возможность того, что специально сформированный запрос мог вызвать сбой сервера из-за переполнения стека в SQL-парсере. Также устранена возможность переполнения стека в таблицах Merge и Distributed, materialized view и условиях безопасности на уровне строк, включающих подзапросы. #6433 (alexey-milovidov)

Улучшения

  • Корректная реализация трёхзначной логики для AND/OR. #6048 (Alexander Kazakov)
  • Теперь значения и строки с истёкшим TTL будут удаляться после запроса OPTIMIZE ... FINAL из старых частей без информации о TTL или с устаревшей информацией о TTL, например после запроса ALTER ... MODIFY TTL. Добавлены запросы SYSTEM STOP/START TTL MERGES, позволяющие запрещать/разрешать назначение слияний с TTL и отфильтровывать истёкшие значения во всех слияниях. #6274 (Anton Popov)
  • Возможность изменить расположение файла истории ClickHouse для клиента с помощью переменной среды CLICKHOUSE_HISTORY_FILE. #6840 (filimonov)
  • Удалён флаг dry_run из InterpreterSelectQuery. … #6375 (Nikolai Kochetov)
  • Добавлена поддержка ASOF JOIN в секции ON. #6211 (Artem Zuikov)
  • Улучшена поддержка индексов пропуска данных в мутациях и репликации. Добавлена поддержка запроса MATERIALIZE/CLEAR INDEX ... IN PARTITION. UPDATE x = x пересчитывает все индексы, использующие столбец x. #5053 (Nikita Vasilev)
  • Разрешён ATTACH live views (например, при запуске сервера) независимо от настройки allow_experimental_live_view. #6754 (alexey-milovidov)
  • В трассировки стека, собранные профилировщиком запросов, не включать кадры стека, созданные самим профилировщиком запросов. #6250 (alexey-milovidov)
  • Теперь в табличных функциях values, file, url, hdfs появилась поддержка ALIAS-столбцов. #6255 (alexey-milovidov)
  • Сгенерировать исключение, если файл config.d не содержит того же корневого элемента, что и файл config. #6123 (dimarub2000)
  • Добавлен вывод дополнительной информации в сообщении об исключении при no space left on device. #6182, #6252 #6352 (tavplubix)
  • При определении сегментов таблицы Distributed, к которым должен обращаться запрос на чтение (для optimize_skip_unused_shards = 1), ClickHouse теперь проверяет условия как из секции prewhere, так и из секции where оператора select. #6521 (Alexander Kazakov)
  • Добавлена поддержка SIMDJSON для машин без AVX2, но с набором инструкций SSE 4.2 и PCLMUL. #6285 #6320 (alexey-milovidov)
  • ClickHouse может работать в файловых системах без поддержки O_DIRECT (например, ZFS и BtrFS) без дополнительной настройки. #4449 #6730 (alexey-milovidov)
  • Поддержка проталкивания предиката для FINAL-подзапроса. #6120 (TCeason) #6162 (alexey-milovidov)
  • Улучшено извлечение ключей из JOIN ON #6131 (Artem Zuikov)
  • Обновлён SIMDJSON. #6285. #6306 (alexey-milovidov)
  • Оптимизирован выбор столбца наименьшего размера для запроса SELECT count(). #6344 (Amos Bird)
  • Добавлен параметр strict в windowFunnel(). Если задан strict, windowFunnel() применяет условия только к уникальным значениям. #6548 (achimbab)
  • Более безопасный интерфейс mysqlxx::Pool. #6150 (avasiliev)
  • Ширина строк параметров при выводе справки с параметром --help теперь соответствует размеру терминала. #6590 (dimarub2000)
  • Отключена оптимизация “чтение по порядку” при агрегации без ключей. #6599 (Anton Popov)
  • HTTP-код состояния для кодов ошибок INCORRECT_DATA и TYPE_MISMATCH был изменён со стандартного 500 Internal Server Error на 400 Bad Request. #6271 (Alexander Rodin)
  • Объект JOIN перенесён из ExpressionAction в AnalyzedJoin. ExpressionAnalyzer и ExpressionAction больше не зависят от класса Join. Его логика скрыта за интерфейсом AnalyzedJoin. #6801 (Artem Zuikov)
  • Исправлена возможная взаимная блокировка распределённых запросов, когда один из сегментов находится на localhost, а запрос отправляется по сетевому соединению. #6759 (alexey-milovidov)
  • Изменена семантика операции RENAME для нескольких таблиц, чтобы избежать возможных взаимных блокировок. #6757. #6756 (alexey-milovidov)
  • Переписан сервер совместимости с MySQL, чтобы не загружать в память полезную нагрузку пакета целиком. Потребление памяти для каждого соединения снижено примерно до 2 * DBMS_DEFAULT_BUFFER_SIZE (буферы чтения/записи). #5811 (Yuriy Baranov)
  • Логика интерпретации алиасов AST вынесена из парсера, который не должен ничего знать о семантике запроса. #6108 (Artem Zuikov)
  • Немного более безопасный парсинг NamesAndTypesList. #6408. #6410 (alexey-milovidov)
  • clickhouse-copier: Разрешено использовать where_condition из конфигурации вместе с алиасом partition_key в запросе для проверки существования партиции (ранее это использовалось только в запросах на чтение данных). #6577 (proller)
  • В throwIf добавлен необязательный аргумент сообщения. (#5772) #6329 (Vdimir)
  • Исключение сервера, возникающее при отправке данных для вставки, теперь также обрабатывается клиентом. #5891 #6711 (dimarub2000)
  • Добавлена метрика DistributedFilesToInsert, которая показывает общее число файлов в файловой системе, выбранных таблицами Distributed для отправки на удалённые серверы. Значение суммируется по всем сегментам. #6600 (alexey-milovidov)
  • Большая часть логики подготовки JOIN перенесена из ExpressionAction/ExpressionAnalyzer в AnalyzedJoin. #6785 (Artem Zuikov)
  • Исправлено предупреждение TSan о нарушении порядка блокировок ‘lock-order-inversion’. #6740 (Vasily Nemkov)
  • Более информативные сообщения об отсутствии привилегий Linux. Фатальные ошибки теперь записываются с уровнем “fatal”, что упрощает их поиск в system.text_log. #6441 (alexey-milovidov)
  • Когда для ограничения использования памяти при GROUP BY и ORDER BY была включена выгрузка временных данных на диск, свободное место на диске не проверялось. В исправлении добавлена новая настройка min_free_disk_space: если свободного места на диске меньше порогового значения, запрос будет остановлен и будет сгенерировано исключение ErrorCodes::NOT_ENOUGH_SPACE. #6678 (Weiqing Xu) #6691 (alexey-milovidov)
  • Убрали привязку рекурсивного rwlock к потоку. Это не имеет смысла, потому что потоки повторно используются между запросами. Запрос SELECT может захватить блокировку в одном потоке, удерживать её в другом и завершиться в первом. В то же время первый поток может быть повторно использован запросом DROP. Это будет приводить к ложным сообщениям “Attempt to acquire exclusive lock recursively”. #6771 (alexey-milovidov)
  • Метод ExpressionAnalyzer.appendJoin() вынесен отдельно. В ExpressionAnalyzer подготовлено место для MergeJoin. #6524 (Artem Zuikov)
  • В сервер совместимости с MySQL добавлен плагин аутентификации mysql_native_password. #6194 (Yuriy Baranov)
  • Уменьшено число вызовов clock_gettime; исправлена совместимость ABI между debug и release в Allocator (незначительная проблема). #6197 (alexey-milovidov)
  • Метод collectUsedColumns перенесён из ExpressionAnalyzer в SyntaxAnalyzer. Теперь SyntaxAnalyzer сам формирует required_source_columns. #6416 (Artem Zuikov)
  • Добавлена настройка joined_subquery_requires_alias, которая требует псевдонимы для вложенных подзапросов и табличных функций в FROM, если там указано более одной таблицы (т. е. в запросах с JOIN). #6733 (Artem Zuikov)
  • Вынесен класс GetAggregatesVisitor из ExpressionAnalyzer. #6458 (Artem Zuikov)
  • system.query_log: тип данных столбца type изменён на Enum. #6265 (Nikita Mikhaylov)
  • Статическая линковка плагина аутентификации sha256_password. #6512 (Yuriy Baranov)
  • Убрана лишняя зависимость, необходимая для работы настройки compile. В предыдущих версиях пользователь мог получать ошибки вида cannot open crti.o, unable to find library -lc и т. д. #6309 (alexey-milovidov)
  • Улучшена проверка входных данных, которые могут поступать от вредоносной реплики. #6303 (alexey-milovidov)
  • Теперь файл clickhouse-obfuscator доступен в составе пакета clickhouse-client. В предыдущих версиях он был доступен под именем clickhouse obfuscator (с пробелом). #5816 #6609 (dimarub2000)
  • Исправлена взаимная блокировка, возникавшая при наличии как минимум двух запросов, читающих как минимум две таблицы в разном порядке, и ещё одного запроса, выполняющего DDL-операцию над одной из этих таблиц. Исправлена ещё одна, очень редкая взаимная блокировка. #6764 (alexey-milovidov)
  • Добавлен столбец os_thread_ids в system.processes и system.query_log для более удобной отладки. #6763 (alexey-milovidov)
  • Обходное решение для ошибок в расширении PHP mysqlnd, которые возникают, когда sha256_password используется в качестве плагина authentication по умолчанию (описано в #6031). #6113 (Yuriy Baranov)
  • Убрано лишнее место в столбцах с изменённой NULL-допустимостью. #6693 (Artem Zuikov)
  • Значение queue_max_wait_ms по умолчанию установлено в ноль, поскольку текущее значение (пять секунд) не имеет смысла. Эта настройка бывает полезна лишь в редких случаях. Для устранения неоднозначности добавлены настройки replace_running_query_max_wait_ms, kafka_max_wait_ms и connection_pool_max_wait_ms. #6692 (alexey-milovidov)
  • Класс SelectQueryExpressionAnalyzer выделен из ExpressionAnalyzer. Последний оставлен для запросов, отличных от SELECT. #6499 (Artem Zuikov)
  • Убраны дублирующиеся входные и выходные форматы. #6239 (Nikolai Kochetov)
  • Пользователь может переопределять настройки poll_interval и idle_connection_timeout для соединения. #6230 (alexey-milovidov)
  • MergeTree теперь поддерживает дополнительную опцию ttl_only_drop_parts (по умолчанию отключена), которая позволяет избежать частичного отсечения частей: если в части истёк срок TTL для всех строк, она удаляется целиком. #6191 (Sergi Vladykin)
  • Проверка типов для функций set-индекса. Генерируется исключение, если функция получила неверный тип. Это исправляет фазз-тест с UBSan. #6511 (Nikita Vasilev)

Повышение производительности

  • Оптимизированы запросы с условием ORDER BY expressions, где у expressions совпадает префикс с ключом сортировки в таблицах MergeTree. Эта оптимизация управляется настройкой optimize_read_in_order. #6054 #6629 (Anton Popov)
  • Разрешено использовать несколько потоков при загрузке и удалении частей. #6372 #6074 #6438 (alexey-milovidov)
  • Реализован батч-вариант обновления состояний агрегатных функций. Это может дать прирост производительности. #6435 (alexey-milovidov)
  • Для функций exp, log, sigmoid, tanh используется библиотека FastOps. FastOps — быстрая библиотека векторной математики от Michael Parakhin (CTO Yandex). Производительность функций exp и log выросла более чем в 6 раз. Функции exp и log с аргументом Float32 теперь возвращают Float32 (в предыдущих версиях они всегда возвращали Float64). Теперь exp(nan) может возвращать inf. Результат функций exp и log может быть не ближайшим к истинному ответу машинно-представимым числом. #6254 (alexey-milovidov) Используется вариант Danila Kutenin, чтобы FastOps работал #6317 (alexey-milovidov)
  • Отключена оптимизация последовательного ключа для UInt8/16. #6298 #6701 (akuzm)
  • Улучшена производительность библиотеки simdjson за счёт отказа от динамического выделения памяти в ParsedJson::Iterator. #6479 (Vitaly Baranov)
  • Добавлено предварительное отображение страниц в память при выделении памяти с помощью mmap(). #6667 (akuzm)
  • Исправлена проблема с производительностью при сравнении Decimal. #6380 (Artem Zuikov)

Улучшения сборки/тестирования/упаковки

  • Удалён Compiler (инстанцирование шаблонов во время выполнения), так как нам удалось превзойти его по производительности. #6646 (alexey-milovidov)
  • Добавлен тест производительности, чтобы в более изолированном виде показать деградацию производительности в gcc-9. #6302 (alexey-milovidov)
  • Добавлена табличная функция numbers_mt — многопоточная версия numbers. Обновлены тесты производительности для хеш-функций. #6554 (Nikolai Kochetov)
  • Режим сравнения в clickhouse-benchmark #6220 #6343 (dimarub2000)
  • По возможности улучшен вывод трассировок стека. Также добавлен SIGPROF в качестве отладочного сигнала для вывода трассировки стека работающего потока. #6529 (alexey-milovidov)
  • Каждая функция в отдельном файле, часть 10. #6321 (alexey-milovidov)
  • Удалена продублированная константа TABLE_IS_READ_ONLY. #6566 (filimonov)
  • Изменения форматирования StringHashMap в PR #5417. #6700 (akuzm)
  • Улучшен подзапрос, используемый для создания JOIN, в ExpressionAnalyzer. #6824 (Artem Zuikov)
  • Удалено избыточное условие (обнаруженное с помощью PVS Studio). #6775 (akuzm)
  • Для ReverseIndex выделен отдельный интерфейс хеш-таблицы. #6672 (akuzm)
  • Рефакторинг настроек. #6689 (alesapin)
  • Добавлены комментарии к функциям индекса set. #6319 (Nikita Vasilev)
  • Повышен OOM score в отладочной версии для Linux. #6152 (akuzm)
  • Поддержка HDFS HA теперь работает в отладочной сборке. #6650 (Weiqing Xu)
  • Добавлен тест в transform_query_for_external_database. #6388 (alexey-milovidov)
  • Добавлен тест для нескольких materialized view таблицы Kafka. #6509 (Ivan)
  • Улучшена схема сборки. #6500 (Ivan)
  • Исправлен интеграционный тест test_external_dictionaries для случая, когда он выполнялся пользователем без прав root. #6507 (Nikolai Kochetov)
  • Ошибка возникает, когда суммарный размер записанных пакетов превышает DBMS_DEFAULT_BUFFER_SIZE. #6204 (Yuriy Baranov)
  • Добавлен тест на состояние гонки при RENAME таблицы #6752 (alexey-milovidov)
  • Устранено состояние гонки в Settings в KILL QUERY. #6753 (alexey-milovidov)
  • Добавлен интеграционный тест для обработки ошибок в словаре типа cache. #6755 (Vitaly Baranov)
  • Отключён разбор ELF-файлов объектов в Mac OS, поскольку в этом нет смысла. #6578 (alexey-milovidov)
  • Попытка улучшить генератор changelog. #6327 (alexey-milovidov)
  • Добавлен флаг -Wshadow в GCC. #6325 (kreuzerkrieg)
  • Удалён устаревший код поддержки mimalloc. #6715 (alexey-milovidov)
  • zlib-ng определяет возможности x86 и сохраняет эту информацию в глобальных переменных. Это происходит при вызове defalteInit, который может одновременно выполняться в разных потоках. Чтобы избежать записи из нескольких потоков, делайте это при запуске библиотеки. #6141 (akuzm)
  • Регрессионный тест для ошибки, связанной с JOIN, которая была исправлена в #5192. #6147 (Bakhtiyor Ruziev)
  • Исправлен отчёт MSan. #6144 (alexey-milovidov)
  • Исправлен флапающий тест TTL. #6782 (Anton Popov)
  • Устранена ложная гонка данных в поле MergeTreeDataPart::is_frozen. #6583 (alexey-milovidov)
  • Исправлены тайм-ауты в fuzz-тесте. В предыдущей версии тест выявлял ложное зависание в запросе SELECT * FROM numbers_mt(gccMurmurHash('')). #6582 (alexey-milovidov)
  • Добавлены отладочные проверки при static_cast столбцов. #6581 (alexey-milovidov)
  • Добавлена поддержка Oracle Linux в официальных RPM-пакетах. #6356 #6585 (alexey-milovidov)
  • Для json perftests тип изменён с once на loop. #6536 (Nikolai Kochetov)
  • odbc-bridge.cpp содержит определение main(), поэтому его не следует включать в clickhouse-lib. #6538 (Orivej Desh)
  • Тест на падение при FULL|RIGHT JOIN с NULL в ключах правой таблицы. #6362 (Artem Zuikov)
  • Добавлен тест на ограничение при раскрытии псевдонимов на всякий случай. #6442 (alexey-milovidov)
  • Где это уместно, перешли с boost::filesystem на std::filesystem. #6253 #6385 (alexey-milovidov)
  • RPM-пакеты добавлены на сайт. #6251 (alexey-milovidov)
  • Добавлен тест для исправленного исключения Unknown identifier в секции IN. #6708 (Artem Zuikov)
  • Упростили shared_ptr_helper, так как многим было сложно понять, как он работает. #6675 (alexey-milovidov)
  • Добавлены тесты производительности для исправленных кодеков Gorilla и DoubleDelta. #6179 (Vasily Nemkov)
  • Интеграционный тест test_dictionaries разделён на 4 отдельных теста. #6776 (Vitaly Baranov)
  • Исправлено предупреждение PVS-Studio в PipelineExecutor. #6777 (Nikolai Kochetov)
  • Разрешено использовать источник словаря library с ASan. #6482 (alexey-milovidov)
  • Добавлена возможность генерировать список изменений по списку PR. #6350 (alexey-milovidov)
  • Блокировка хранилища TinyLog при чтении. #6226 (akuzm)
  • Проверка на наличие битых символьных ссылок в CI. #6634 (alexey-milovidov)
  • Увеличен тайм-аут для теста “stack overflow”, поскольку в отладочной сборке его выполнение может занимать много времени. #6637 (alexey-milovidov)
  • Добавлена проверка двойных пробелов. #6643 (alexey-milovidov)
  • Исправлено отслеживание памяти для new/delete при сборке с санитайзерами. Это отслеживание не вполне прозрачно: оно лишь предотвращает исключения из-за лимита памяти в тестах. #6450 (Artem Zuikov)
  • Вновь включена проверка неопределённых символов при линковке. #6453 (Ivan)
  • Убрана ежедневная пересборка hyperscan. #6307 (alexey-milovidov)
  • Исправлена ошибка, выявленная UBSan, в ProtobufWriter. #6163 (alexey-milovidov)
  • Запрещено использовать профилировщик запросов с санитайзерами, поскольку они несовместимы. #6769 (alexey-milovidov)
  • Добавлен тест на повторную загрузку словаря после сбоя по таймеру. #6114 (Vitaly Baranov)
  • Исправлено несоответствие типа аргумента в PipelineExecutor::prepareProcessor. #6494 (Nikolai Kochetov)
  • Добавлен тест для некорректных URI. #6493 (alexey-milovidov)
  • Добавлены дополнительные проверки в функцию CAST. Это должно дать больше информации об ошибке сегментации в fuzzy-тесте. #6346 (Nikolai Kochetov)
  • Добавлена поддержка gcc-9 в контейнере docker/builder, который локально собирает образ. #6333 (Gleb Novikov)
  • Тестирование первичного ключа с LowCardinality(String). #5044 #6219 (dimarub2000)
  • Исправлены тесты, затронутые медленным выводом трассировок стека. #6315 (alexey-milovidov)
  • Добавлен тест для сбоя в groupUniqArray, исправленного в #6029. #4402 #6129 (akuzm)
  • Исправлены тесты мутаций индексов. #6645 (Nikita Vasilev)
  • В тесте производительности не читать журнал запросов для тех запросов, которые мы не запускали. #6427 (akuzm)
  • materialized view теперь можно создавать с любыми типами LowCardinality независимо от настройки, связанной с подозрительными типами LowCardinality. #6428 (Olga Khvostikova)
  • Обновлены тесты для параметра send_logs_level. #6207 (Nikolai Kochetov)
  • Исправлена сборка под gcc-8.2. #6196 (Max Akhmedov)
  • Исправлена сборка при использовании внутреннего libc++. #6724 (Ivan)
  • Исправлена сборка с общей библиотекой rdkafka #6101 (Ivan)
  • Исправления для сборки под Mac OS (неполные). #6390 (alexey-milovidov) #6429 (alex-zaitsev)
  • Исправлена сборка с разделением. #6618 (alexey-milovidov)
  • Другие исправления сборки: #6186 (Amos Bird) #6486 #6348 (vxider) #6744 (Ivan) #6016 #6421 #6491 (proller)

Обратно несовместимое изменение

  • Удалены редко используемая табличная функция catBoostPool и хранилище CatBoostPool. Если вы использовали эту табличную функцию, напишите на feedback@clickhouse.com. Обратите внимание, что интеграция с CatBoost сохраняется и будет поддерживаться. #6279 (alexey-milovidov)
  • ANY RIGHT JOIN и ANY FULL JOIN по умолчанию отключены. Чтобы включить их, задайте настройку any_join_distinct_right_table_keys. #5126 #6351 (Artem Zuikov)

Релиз ClickHouse 19.13

Релиз ClickHouse 19.13.6.51, 2019-10-02

Исправление ошибки

  • В этот выпуск также вошли все исправления ошибок из версии 19.11.12.69.

Релиз ClickHouse 19.13.5.44, 2019-09-20

Исправление ошибки

  • Этот выпуск также содержит все исправления ошибок из 19.14.6.12.
  • Исправлено возможное несогласованное состояние таблицы при выполнении запроса DROP для реплицируемой таблицы, когда ZooKeeper недоступен. #6045 #6413 (Nikita Mikhaylov)
  • Исправлена возможная гонка данных в StorageMerge. #6717 (alexey-milovidov)
  • Исправлена ошибка в профилировщике запросов, приводившая к бесконечному recv из сокета. #6386 (alesapin)
  • Исправлено чрезмерное использование CPU при выполнении функции JSONExtractRaw для логического значения. #6208 (Vitaly Baranov)
  • Исправлена регрессия при отправке данных в materialized view. #6415 (Ivan)
  • В табличной функции url была уязвимость, позволявшая злоумышленнику внедрять в запрос произвольные HTTP-заголовки. Эту проблему обнаружил Nikita Tikhomirov. #6466 (alexey-milovidov)
  • Исправлена бесполезная проверка AST в индексе Set. #6510 #6651 (Nikita Vasilev)
  • Исправлен разбор значений AggregateFunction, встроенных в запрос. #6575 #6773 (Zhichang Yu)
  • Исправлено некорректное поведение семейства функций trim. #6647 (alexey-milovidov)

Релиз ClickHouse 19.13.4.32, 2019-09-10

Исправление ошибки

  • Этот релиз также содержит все исправления ошибок безопасности из версий 19.11.9.52 и 19.11.10.54.
  • Исправлена гонка данных в таблице system.parts и в запросе ALTER. #6245 #6513 (alexey-milovidov)
  • Исправлено несоответствие заголовков в потоках, возникавшее при чтении из пустой distributed таблицы с sample и prewhere. #6167 (Lixiang Qian) #6823 (Nikolai Kochetov)
  • Исправлен сбой при использовании условия IN с подзапросом с кортежем. #6125 #6550 (tavplubix)
  • Исправлен случай с одинаковыми именами столбцов в секции GLOBAL JOIN ON. #6181 (Artem Zuikov)
  • Исправлен сбой при приведении к Decimal типов, которые этого не поддерживают. Вместо этого теперь генерируется исключение. #6297 (Artem Zuikov)
  • Исправлен сбой в функции extractAll(). #6644 (Artem Zuikov)
  • Преобразование запросов для табличных функций MySQL, ODBC, JDBC теперь корректно работает для запросов SELECT ... WHERE с несколькими выражениями AND. #6381 #6676 (dimarub2000)
  • Добавлены проверки предыдущих объявлений для интеграции с MySQL 8. #6569 (Rafael David Tinoco)

Исправление уязвимости

  • Исправлены две уязвимости в кодеках на этапе распаковки (злоумышленник может сформировать специально подготовленные сжатые данные, что приведёт к переполнению буфера при распаковке). #6670 (Artem Zuikov)

Релиз ClickHouse 19.13.3.26, 2019-08-22

Исправление ошибки

  • Исправлен запрос ALTER TABLE ... UPDATE для таблиц с enable_mixed_granularity_parts=1. #6543 (alesapin)
  • Исправлен NPE при использовании оператора IN с подзапросом, возвращающим кортеж. #6125 #6550 (tavplubix)
  • Исправлена проблема, из-за которой устаревшая реплика после восстановления могла по-прежнему содержать части данных, удалённые командой DROP PARTITION. #6522 #6523 (tavplubix)
  • Исправлена проблема с разбором CSV. #6426 #6559 (tavplubix)
  • Исправлено состояние гонки в таблице system.parts и запросе ALTER. Это исправление устраняет #6245. #6513 (alexey-milovidov)
  • Исправлен некорректный код в мутациях, который мог приводить к повреждению памяти. Исправлен segfault при чтении по адресу 0x14c0, который мог происходить из-за одновременного выполнения DROP TABLE и SELECT из system.parts или system.parts_columns. Исправлено состояние гонки при подготовке запросов мутации. Исправлена взаимная блокировка, вызванная OPTIMIZE таблиц Replicated и одновременными операциями модификации, такими как ALTER. #6514 (alexey-milovidov)
  • Исправлена возможная потеря данных после запроса ALTER DELETE для таблицы с индексом пропуска данных. #6224 #6282 (Nikita Vasilev)

Исправление уязвимости

  • Если у атакующего есть доступ на запись в ZooKeeper и возможность запустить собственный сервер, доступный из той же сети, где работает ClickHouse, он может создать специально подготовленный вредоносный сервер, который будет выдавать себя за реплику ClickHouse, и зарегистрировать его в ZooKeeper. Когда другая реплика будет получать часть данных с вредоносной реплики, это может заставить clickhouse-server записать данные по произвольному пути в файловой системе. Обнаружено Eldar Zaitov из команды информационной безопасности Yandex. #6247 (alexey-milovidov)

Релиз ClickHouse 19.13.2.19, 2019-08-14

Новая возможность

  • Профилировщик со сэмплированием на уровне запроса. Пример. #4247 (laplab) #6124 (alexey-milovidov) #6250 #6283 #6386
  • Разрешено указывать список столбцов с помощью выражения COLUMNS('regexp'), которое работает как более продвинутый вариант символа *. #5951 (mfridental), (alexey-milovidov)
  • Теперь можно использовать CREATE TABLE AS table_function() #6057 (dimarub2000)
  • Оптимизатор Adam для стохастического градиентного спуска теперь используется по умолчанию в агрегатных функциях stochasticLinearRegression() и stochasticLogisticRegression(), поскольку он обеспечивает хорошее качество почти без дополнительной настройки. #6000 (Quid37)
  • Добавлены функции для работы с пользовательским номером недели #5212 (Andy Yang)
  • Запросы RENAME теперь работают со всеми хранилищами. #5953 (Ivan)
  • Теперь клиент может получать журналы сервера любого нужного уровня с помощью настройки send_logs_level, независимо от уровня журналирования, указанного в настройках сервера. #5964 (Nikita Mikhaylov)

Обратно несовместимое изменение

  • Параметр input_format_defaults_for_omitted_fields включен по умолчанию. Для вставки в таблицы Distributed требуется, чтобы значение этого параметра было одинаковым во всем кластере (его нужно установить перед rolling update). Он включает вычисление сложных выражений по умолчанию для пропущенных полей в форматах JSONEachRow и CSV*. Это ожидаемое поведение, но оно может привести к незначительному изменению производительности. #6043 (Artem Zuikov), #5625 (akuzm)

Экспериментальные возможности

  • Новый конвейер обработки запросов. Чтобы включить его, используйте параметр experimental_use_processors=1. Используйте на свой страх и риск. #4914 (Nikolai Kochetov)

Исправление ошибки

  • В этой версии исправлена интеграция Kafka.
  • Исправлено кодирование DoubleDelta для Int64 при больших значениях DoubleDelta; также улучшено кодирование DoubleDelta для случайных данных с Int32. #5998 (Vasily Nemkov)
  • Исправлена завышенная оценка max_rows_to_read, если настройка merge_tree_uniform_read_distribution установлена в 0. #6019 (alexey-milovidov)

Улучшения

  • Генерирует исключение, если в файле config.d отсутствует корневой элемент, соответствующий файлу конфигурации #6123 (dimarub2000)

Повышение производительности

  • Оптимизирован count(). Теперь он использует наименьший столбец (если это возможно). #6028 (Amos Bird)

Улучшения сборки/тестирования/упаковки

  • Добавлен отчёт об использовании памяти в тестах производительности. #5899 (akuzm)
  • Исправлена сборка с внешней библиотекой libcxx #6010 (Ivan)
  • Исправлена динамическая сборка с библиотекой rdkafka #6101 (Ivan)

Релиз ClickHouse 19.11

Релиз ClickHouse 19.11.13.74, 2019-11-01

Исправление ошибки

  • Исправлено редкое аварийное завершение в ALTER MODIFY COLUMN и при вертикальном слиянии, когда одна из сливаемых или изменяемых частей пуста (0 строк). #6780 (alesapin)
  • Ручное обновление SIMDJSON. Это устраняет возможное засорение файлов stderr ложными диагностическими сообщениями JSON. #7548 (Alexander Kazakov)
  • Исправлена ошибка с расширением файла mrk для мутаций (alesapin)

Релиз ClickHouse 19.11.12.69, 2019-10-02

Исправление ошибки

  • Устранена деградация производительности анализа индексов для сложных ключей в больших таблицах. Это исправляет #6924. #7075 (alexey-milovidov)
  • Устранён редкий SIGSEGV при отправке данных в таблицах с движком Distributed (Failed to send batch: file with index XXXXX is absent). #7032 (Azat Khuzhin)
  • Исправлена ошибка Unknown identifier в запросах с несколькими JOIN. Это исправляет #5254. #7022 (Artem Zuikov)

Релиз ClickHouse 19.11.11.57, 2019-09-13

  • Исправлена логическая ошибка, вызывавшая segfault при выборке из пустого топика Kafka. #6902 #6909 (Ivan)
  • Исправлена функция АrrayEnumerateUniqRanked для случая с пустыми массивами в параметрах. #6928 (proller)

Релиз ClickHouse 19.11.10.54, 2019-09-10

Исправление ошибки

  • Смещения сообщений Kafka теперь сохраняются вручную, чтобы можно было зафиксировать их все разом для всех партиций. Это устраняет возможное дублирование в сценарии «один консьюмер — много партиций». #6872 (Ivan)

Релиз ClickHouse 19.11.9.52, 2019-09-6

  • Улучшена обработка ошибок в словарях cache. #6737 (Vitaly Baranov)
  • Исправлена ошибка в функции arrayEnumerateUniqRanked. #6779 (proller)
  • Исправлена работа функции JSONExtract при извлечении Tuple из JSON. #6718 (Vitaly Baranov)
  • Исправлена возможная потеря данных после запроса ALTER DELETE к таблице с индексом пропуска данных. #6224 #6282 (Nikita Vasilev)
  • Исправлен тест производительности. #6392 (alexey-milovidov)
  • Parquet: исправлено чтение булевых столбцов. #6579 (alexey-milovidov)
  • Исправлено некорректное поведение функции nullIf для константных аргументов. #6518 (Guillaume Tassery) #6580 (alexey-milovidov)
  • Исправлена проблема с дублированием сообщений Kafka при обычном перезапуске сервера. #6597 (Ivan)
  • Исправлена проблема, из-за которой длительные ALTER UPDATE или ALTER DELETE могли мешать выполнению обычных слияний. Мутации теперь не выполняются, если недостаточно свободных потоков. #6502 #6617 (tavplubix)
  • Исправлена ошибка при обработке “timezone” в файле конфигурации сервера. #6709 (alexey-milovidov)
  • Исправлены тесты Kafka. #6805 (Ivan)

Исправление уязвимости

  • Если у злоумышленника есть доступ на запись в ZooKeeper и он может запустить произвольный сервер, доступный из сети, в которой работает ClickHouse, он может создать специально подготовленный вредоносный сервер, который будет выдавать себя за реплику ClickHouse, и зарегистрировать его в ZooKeeper. Когда другая реплика будет получать часть данных от вредоносной реплики, та сможет заставить clickhouse-server записывать данные по произвольному пути в файловой системе. Обнаружено Eldar Zaitov, командой информационной безопасности Yandex. #6247 (alexey-milovidov)

Релиз ClickHouse 19.11.8.46, 2019-08-22

Исправление ошибки

  • Исправлен запрос ALTER TABLE ... UPDATE для таблиц с enable_mixed_granularity_parts=1. #6543 (alesapin)
  • Исправлен NPE при использовании оператора IN с подзапросом, содержащим кортеж. #6125 #6550 (tavplubix)
  • Исправлена проблема, из-за которой устаревшая реплика после восстановления могла по-прежнему содержать части данных, удалённые командой DROP PARTITION. #6522 #6523 (tavplubix)
  • Исправлена проблема с разбором CSV. #6426 #6559 (tavplubix)
  • Исправлено состояние гонки в таблице system.parts и в запросе ALTER. Это исправление для #6245. #6513 (alexey-milovidov)
  • Исправлен некорректный код в мутациях, который мог приводить к повреждению памяти. Исправлен segfault при чтении по адресу 0x14c0, который мог происходить из-за параллельных DROP TABLE и SELECT из system.parts или system.parts_columns. Исправлено состояние гонки при подготовке запросов мутации. Исправлена взаимная блокировка, вызванная OPTIMIZE таблиц Replicated и параллельными операциями изменения, такими как ALTER. #6514 (alexey-milovidov)

Релиз ClickHouse 19.11.7.40, 2019-08-14

Исправление ошибки

  • В этой версии исправлена интеграция с Kafka.
  • Исправлен segfault при использовании arrayReduce с константными аргументами. #6326 (alexey-milovidov)
  • Исправлена монотонность функции toFloat(). #6374 (dimarub2000)
  • Исправлен segfault при включенном optimize_skip_unused_shards и отсутствующем ключе сегментирования. #6384 (CurtizJ)
  • Исправлена логика функции arrayEnumerateUniqRanked. #6423 (alexey-milovidov)
  • Из обработчика MySQL удалено избыточно подробное логирование. #6389 (alexey-milovidov)
  • Исправлены некорректное поведение и возможные segfault в агрегатных функциях topK и topKWeighted. #6404 (CurtizJ)
  • Виртуальные столбцы больше не отображаются в таблице system.columns. Это требуется для обратной совместимости. #6406 (alexey-milovidov)
  • Исправлена ошибка выделения памяти для строковых полей в словаре cache с составным ключом. #6447 (alesapin)
  • Исправлена ошибка при включении adaptive granularity при создании новой реплики для таблицы Replicated*MergeTree. #6452 (alesapin)
  • Исправлен бесконечный цикл при чтении сообщений Kafka. #6354 (abyss7)
  • Устранена возможность того, что специально сформированный запрос мог вызвать сбой сервера из-за переполнения стека в SQL-парсере, а также возможность переполнения стека в таблицах Merge и Distributed #6433 (alexey-milovidov)
  • Исправлена ошибка кодирования Gorilla на коротких последовательностях. #6444 (Enmk)

Улучшения

  • Пользователь может переопределять настройки poll_interval и idle_connection_timeout для подключения. #6230 (alexey-milovidov)

Релиз ClickHouse 19.11.5.28, 2019-08-05

Исправление ошибки

  • Устранена возможность зависания запросов при перегрузке сервера. #6301 (alexey-milovidov)
  • Исправлен FPE в функции yandexConsistentHash. Исправлена проблема #6304. #6126 (alexey-milovidov)
  • Исправлена ошибка при преобразовании типов LowCardinality в AggregateFunctionFactory. Исправлена проблема #6257. #6281 (Nikolai Kochetov)
  • Исправлен разбор настроек bool из строк true и false в файлах конфигурации. #6278 (alesapin)
  • Исправлена редкая ошибка с несовместимыми заголовками потока в запросах к таблице Distributed, построенной поверх таблицы MergeTree, когда часть WHERE переносится в PREWHERE. #6236 (alesapin)
  • Исправлено переполнение при целочисленном делении значения знакового типа на беззнаковый тип. Исправлена проблема #6214. #6233 (alexey-milovidov)

Обратно несовместимое изменение

  • Kafka всё ещё не работает.

Релиз ClickHouse 19.11.4.24, 2019-08-01

Исправление ошибки

  • Исправлена ошибка при записи меток вторичных индексов с адаптивной гранулярностью. #6126 (alesapin)
  • Исправлены модификаторы WITH ROLLUP и WITH CUBE в GROUP BY при двухуровневой агрегации. #6225 (Anton Popov)
  • Исправлено зависание в функции JSONExtractRaw. Исправлено #6195 #6198 (alexey-milovidov)
  • Исправлен segfault в ExternalLoader::reloadOutdated(). #6082 (Vitaly Baranov)
  • Исправлен случай, когда сервер мог закрыть прослушивающие сокеты, но не завершиться и продолжить обрабатывать оставшиеся запросы. В результате могли одновременно работать два процесса clickhouse-server. Иногда сервер мог возвращать ошибку bad_function_call для оставшихся запросов. #6231 (alexey-milovidov)
  • Исправлено бесполезное и некорректное условие для поля update при первоначальной загрузке внешних словарей через ODBC, MySQL, ClickHouse и HTTP. Это исправляет #6069 #6083 (alexey-milovidov)
  • Исправлено лишнее исключение при приведении LowCardinality(Nullable) к столбцу не-Nullable, если он не содержит значений NULL (например, в запросе вида SELECT CAST(CAST('Hello' AS LowCardinality(Nullable(String))) AS String). #6094 #6119 (Nikolai Kochetov)
  • Исправлен недетерминированный результат агрегатной функции “uniq” в крайне редких случаях. Ошибка присутствовала во всех версиях ClickHouse. #6058 (alexey-milovidov)
  • Segfault при установке слишком большого значения CIDR для функции IPv6CIDRToRange. #6068 (Guillaume Tassery)
  • Исправлена небольшая утечка памяти, возникавшая, когда сервер генерировал много исключений из множества разных контекстов. #6144 (alexey-milovidov)
  • Исправлена ситуация, когда consumer был приостановлен до subscription и после этого не возобновлялся. #6075 (Ivan) Обратите внимание, что Kafka в этой версии не работает.
  • Очищается буфер данных Kafka от предыдущей операции чтения, завершившейся ошибкой #6026 (Nikolay) Обратите внимание, что Kafka в этой версии не работает.
  • Поскольку StorageMergeTree::background_task_handle инициализируется в startup(), MergeTreeBlockOutputStream::write() может попытаться использовать его до инициализации. Нужно просто проверить, инициализирован ли он. #6080 (Ivan)

Улучшения сборки/тестирования/пакетирования

  • Добавлены официальные пакеты rpm. #5740 (proller) (alesapin)
  • Добавлена возможность собирать пакеты .rpm и .tgz с помощью скрипта packager. #5769 (alesapin)
  • Исправления в системе сборки Arcadia. #6223 (proller)

Обратно несовместимое изменение

  • Kafka не работает в этой версии.

Релиз ClickHouse 19.11.3.11, 2019-07-18

Новая возможность

  • Добавлена поддержка подготовленных операторов. #5331 (Alexander) #5630 (alexey-milovidov)
  • Добавлены кодеки столбцов DoubleDelta и Gorilla #5600 (Vasily Nemkov)
  • Добавлена настройка os_thread_priority, которая позволяет управлять значением “nice” у потоков обработки запросов, используемым ОС для настройки приоритета динамического планирования. Для ее работы требуются привилегии CAP_SYS_NICE. Реализовано в рамках #5858 #5909 (alexey-milovidov)
  • Реализованы столбцы _topic, _offset, _key для движка Kafka #5382 (Ivan) Обратите внимание, что Kafka не работает в этой версии.
  • Добавлен комбинатор агрегатной функции -Resample #5590 (hcz)
  • Добавлены агрегатные функции groupArrayMovingSum(win_size)(x) и groupArrayMovingAvg(win_size)(x), которые вычисляют скользящую сумму/среднее с ограничением размера окна и без него. #5595 (inv2004)
  • Добавлен синоним arrayFlatten <-> flatten #5764 (hcz)
  • Интегрирована H3-функция geoToH3 от Uber. #4724 (Remen Ivan) #5805 (alexey-milovidov)

Исправление ошибки

  • Реализован DNS-кэш с асинхронным обновлением. Отдельный поток разрешает имена всех хостов и с заданной периодичностью обновляет DNS-кэш (настройка dns_cache_update_period). Это должно помочь, если IP-адреса хостов часто меняются. #5857 (Anton Popov)
  • Исправлен segfault в кодеке Delta, который затрагивал столбцы со значениями размером менее 32 бит. Ошибка приводила к случайному повреждению памяти. #5786 (alesapin)
  • Исправлен segfault при TTL-слиянии с нефизическими столбцами в блоке. #5819 (Anton Popov)
  • Исправлена редкая ошибка при проверке части со столбцом LowCardinality. Ранее проверка checkDataPart всегда завершалась ошибкой для части со столбцом LowCardinality. #5832 (alesapin)
  • Предотвращено зависание соединений, когда пул потоков сервера переполнен. Это важно для соединений из табличной функции remote или соединений с сегментом без реплик при длительном тайм-ауте соединения. Исправлено в #5878 #5881 (alexey-milovidov)
  • Поддержка константных аргументов в функции evalMLModel. Исправлено в #5817 #5820 (alexey-milovidov)
  • Исправлена проблема, из-за которой ClickHouse определял часовой пояс по умолчанию как UCT вместо UTC. Это исправление для #5804. #5828 (alexey-milovidov)
  • Исправлен выход за нижнюю границу буфера в visitParamExtractRaw. Это исправляет #5901 #5902 (alexey-milovidov)
  • Теперь распределённые запросы DROP/ALTER/TRUNCATE/OPTIMIZE ON CLUSTER будут выполняться напрямую на реплике-лидере. #5757 (alesapin)
  • Исправлена работа coalesce для ColumnConst с ColumnNullable + связанные изменения. #5755 (Artem Zuikov)
  • Исправлен ReadBufferFromKafkaConsumer: теперь после commit() он продолжает читать новые сообщения, даже если до этого зависал #5852 (Ivan)
  • Исправлены результаты FULL и RIGHT JOIN при выполнении JOIN по ключам Nullable в правой таблице. #5859 (Artem Zuikov)
  • Возможно, исправлено бесконечное ожидание низкоприоритетных запросов. #5842 (alexey-milovidov)
  • Исправлено состояние гонки, из-за которого некоторые запросы могли не попадать в query_log после выполнения запроса SYSTEM FLUSH LOGS. #5456 #5685 (Anton Popov)
  • Исправлено предупреждение ASan heap-use-after-free в ClusterCopier из-за наблюдения, которое пыталось использовать уже удалённый объект copier. #5871 (Nikolai Kochetov)
  • Исправлен неверный указатель StringRef, возвращаемый некоторыми реализациями IColumn::deserializeAndInsertFromArena. Эта ошибка влияла только на модульные тесты. #5973 (Nikolai Kochetov)
  • Предотвращено маскирование одноимённых столбцов исходными и промежуточными столбцами ARRAY JOIN. #5941 (Artem Zuikov)
  • Исправлены операции вставки и запросы select к движку MySQL при экранировании идентификаторов в стиле MySQL. #5704 (Winter Zhang)
  • Теперь запрос CHECK TABLE может работать с семейством движков MergeTree. Он возвращает статус проверки и, если есть, сообщение для каждой части (или файла в случае более простых движков). Также исправлена ошибка при получении повреждённой части. #5865 (alesapin)
  • Исправлен runtime для SPLIT_SHARED_LIBRARIES #5793 (Danila Kutenin)
  • Исправлена инициализация часового пояса в случае, когда /etc/localtime является относительной символической ссылкой, например ../usr/share/zoneinfo/Asia/Istanbul #5922 (alexey-milovidov)
  • clickhouse-copier: Исправлена ошибка use-after-free при завершении работы #5752 (proller)
  • Обновлён simdjson. Исправлена проблема, из-за которой некоторые некорректные JSON-документы, содержащие нулевые байты, успешно разбирались. #5938 (alexey-milovidov)
  • Исправлено завершение работы SystemLogs #5802 (Anton Popov)
  • Исправлено зависание, если условие в invalidate_query зависит от словаря. #6011 (Vitaly Baranov)

Улучшения

  • Разрешить использование неразрешимых адресов в конфигурации кластера. Они будут считаться недоступными, и попытка разрешить их будет предприниматься при каждом подключении. Это особенно полезно для Kubernetes. Это исправляет #5714 #5924 (alexey-milovidov)
  • Закрытие бездействующих TCP-соединений (по умолчанию с тайм-аутом в один час). Это особенно важно для крупных кластеров с несколькими распределёнными таблицами на каждом сервере, поскольку каждый сервер потенциально может держать пул соединений с каждым другим сервером, и после пикового параллелизма запросов эти соединения будут простаивать. Это исправляет #5879 #5880 (alexey-milovidov)
  • Улучшено качество работы функции topK. Изменено поведение набора SavingSpace: теперь последний элемент удаляется, если новый элемент имеет больший вес. #5833 #5850 (Guillaume Tassery)
  • URL-функции для работы с доменами теперь поддерживают неполные URL без схемы #5725 (alesapin)
  • В таблицу system.parts_columns добавлены хеш-суммы. #5874 (Nikita Mikhaylov)
  • Добавлен тип данных Enum как синоним Enum8 или Enum16. #5886 (dimarub2000)
  • Полная побитовая транспозиция для кодека T64. Может дать более эффективное сжатие с zstd. #5742 (Artem Zuikov)
  • Условие с функцией startsWith теперь может использовать первичный ключ. Это исправляет #5310 и #5882 #5919 (dimarub2000)
  • Разрешено использовать clickhouse-copier с топологией кластера с перекрёстной репликацией, допуская пустое имя базы данных. #5745 (nvartolomei)
  • Использовать UTC в качестве часового пояса по умолчанию в системе без tzdata (например, в обычном Docker-контейнере). До этого исправления выводилось сообщение об ошибке Could not determine local time zone, и сервер или клиент отказывались запускаться. #5827 (alexey-milovidov)
  • Вернули поддержку аргумента типа с плавающей точкой в функции quantileTiming для обратной совместимости. #5911 (alexey-milovidov)
  • Показывать в сообщениях об ошибках, в какой таблице отсутствует столбец. #5768 (Ivan)
  • Запрещено выполнять запрос с одинаковым query_id разными пользователями #5430 (proller)
  • Более надёжный код для отправки метрик в Graphite. Он будет работать даже во время длительной серии операций RENAME TABLE. #5875 (alexey-milovidov)
  • При невозможности ThreadPool запланировать задачу на выполнение будут отображаться более информативные сообщения об ошибках. Это исправляет #5305 #5801 (alexey-milovidov)
  • Инвертирована логика ngramSearch, чтобы сделать её более интуитивной #5807 (Danila Kutenin)
  • Добавлен разбор пользователя в конструкторе движка HDFS #5946 (akonyaev90)
  • Обновлено значение по умолчанию для параметра max_ast_elements #5933 (Artem Konovalov)
  • Введено понятие устаревших настроек. Устаревшая настройка allow_experimental_low_cardinality_type может использоваться, но не оказывает никакого эффекта. 0f15c01c6802f7ce1a1494c12c846be8c98944cd Alexey Milovidov

Повышение производительности

  • Увеличено число потоков чтения для SELECT из таблицы Merge, чтобы добиться более равномерного распределения потоков выполнения. Добавлена настройка max_streams_multiplier_for_merge_tables. Это исправляет #5797 #5915 (alexey-milovidov)

улучшение сборки/тестирования/пакетирования

  • Добавлен тест на обратную совместимость взаимодействия клиента с сервером при разных версиях ClickHouse. #5868 (alesapin)
  • Информация о покрытии тестами в каждом коммите и пул-реквесте. #5896 (alesapin)
  • Добавлено взаимодействие с AddressSanitizer для поддержки наших пользовательских аллокаторов (Arena и ArenaWithFreeLists), что улучшает отладку ошибок “use-after-free”. #5728 (akuzm)
  • Переход на реализацию LLVM libunwind для обработки исключений C++ и вывода трассировки стека #4828 (Nikita Lapkov)
  • Добавлены ещё два предупреждения компилятора из -Weverything #5923 (alexey-milovidov)
  • Добавлена возможность собирать ClickHouse с Memory Sanitizer. #3949 (alexey-milovidov)
  • Исправлен отчёт ubsan о функции bitTest в фазз-тесте. #5943 (alexey-milovidov)
  • Docker: добавлена возможность инициализации экземпляра ClickHouse, требующего аутентификации. #5727 (Korviakov Andrey)
  • Обновлён librdkafka до версии 1.1.0 #5872 (Ivan)
  • Добавлен глобальный тайм-аут для интеграционных тестов, а часть из них отключена в тестовом коде. #5741 (alesapin)
  • Исправлены некоторые ошибки, выявленные ThreadSanitizer. #5854 (akuzm)
  • Опция --no-undefined заставляет компоновщик при компоновке проверять наличие всех внешних имён. Это очень полезно для отслеживания реальных зависимостей между библиотеками в режиме split build. #5855 (Ivan)
  • Добавлен тест на производительность для #5797 #5914 (alexey-milovidov)
  • Исправлена проблема совместимости с gcc-7. #5840 (alexey-milovidov)
  • Добавлена поддержка gcc-9. Исправлены проблемы #5717 #5774 (alexey-milovidov)
  • Исправлена ошибка, из-за которой libunwind мог быть некорректно слинкован. #5948 (alexey-milovidov)
  • Исправлено несколько предупреждений, выявленных PVS-Studio. #5921 (alexey-milovidov)
  • Добавлена первоначальная поддержка статического анализатора clang-tidy. #5806 (alexey-milovidov)
  • Замена endian-макросов BSD/Linux( ‘be64toh’ and ‘htobe64’) на эквиваленты для Mac OS X #5785 (Fu Chen)
  • Улучшено руководство по интеграционному тестированию. #5796 (Vladimir Chebotarev)
  • Исправлена сборка на macOS + gcc9 #5822 (filimonov)
  • Исправлена труднозаметная опечатка: aggreAGte -> aggregate. #5753 (akuzm)
  • Исправлена сборка под FreeBSD #5760 (proller)
  • На сайт добавлена ссылка на экспериментальный YouTube-канал #5845 (Ivan Blinkov)
  • CMake: добавлена опция для флагов покрытия: WITH_COVERAGE #5776 (proller)
  • У некоторых встроенных PODArray’ов исправлен начальный размер. #5787 (akuzm)
  • clickhouse-server.postinst: исправлено определение ОС для CentOS 6 #5788 (proller)
  • Добавлена сборка пакетов для Arch Linux. #5719 (Vladimir Chebotarev)
  • Разделили Common/config.h по библиотекам (dbms) #5715 (proller)
  • Исправления для сборочной платформы “Arcadia” #5795 (proller)
  • Исправления для нестандартной сборки (gcc9, без субмодулей) #5792 (proller)
  • Требовать явного указания типа в unalignedStore, поскольку выяснилось, что без этого часто возникают ошибки #5791 (akuzm)
  • Исправлена сборка для macOS #5830 (filimonov)
  • Тест производительности новой возможности JIT на более крупном наборе данных, как запрошено здесь #5263 #5887 (Guillaume Tassery)
  • Запуск тестов с сохранением состояния при стресс-тестировании 12693e568722f11e19859742f56428455501fd2a (alesapin)

Обратно несовместимое изменение

  • В этой версии Kafka не работает.
  • Для новых таблиц MergeTree по умолчанию включён adaptive_index_granularity = 10MB. Если вы создали новые таблицы MergeTree начиная с версии 19.11+, откатиться до версий ниже 19.6 будет невозможно. #5628 (alesapin)
  • Удалены устаревшие недокументированные встроенные словари, которые использовались в Yandex.Metrica. Функции OSIn, SEIn, OSToRoot, SEToRoot, OSHierarchy, SEHierarchy больше недоступны. Если вы используете эти функции, напишите по адресу clickhouse-feedback@yandex-team.com. Примечание: в последний момент мы решили оставить эти функции ещё на некоторое время. #5780 (alexey-milovidov)

Релиз ClickHouse 19.10

Релиз ClickHouse 19.10.1.5, 2019-07-12

Новая возможность

  • Добавлен новый кодек для столбцов: T64. Предназначен для столбцов (U)IntX/EnumX/Data(Time)/DecimalX. Хорошо подходит для столбцов с константными значениями или значениями из небольшого диапазона. Сам кодек позволяет увеличивать или уменьшать тип данных без повторного сжатия. #5557 (Artem Zuikov)
  • Добавлен движок базы данных MySQL, который позволяет просматривать все таблицы на удалённом сервере MySQL #5599 (Winter Zhang)
  • Реализована функция bitmapContains. Она в 2 раза быстрее, чем bitmapHasAny, если второй битмап содержит один элемент. #5535 (Zhichang Yu)
  • Добавлена поддержка функции crc32 (с поведением, точно таким же, как в MySQL или PHP). Не используйте её, если вам нужна хеш-функция. #5661 (Remen Ivan)
  • Реализованы запросы SYSTEM START/STOP DISTRIBUTED SENDS для управления асинхронными вставками в таблицы Distributed. #4935 (Winter Zhang)

Исправление ошибки

  • При выполнении мутаций для ограничений слияния теперь игнорируются лимиты на выполнение запросов и максимальный размер частей. #5659 (Anton Popov)
  • Исправлена ошибка, которая могла приводить к дедупликации обычных блоков (крайне редко) и вставке дублирующихся блоков (чаще). #5549 (alesapin)
  • Исправлена функция arrayEnumerateUniqRanked для аргументов с пустыми массивами #5559 (proller)
  • Не выполняется подписка на топики Kafka, если не предполагается опрос сообщений. #5698 (Ivan)
  • Настройка join_use_nulls больше не влияет на типы, которые не могут быть внутри Nullable #5700 (Olga Khvostikova)
  • Исправлены ошибки Incorrect size of index granularity #5720 (coraxster)
  • Исправлено переполнение при преобразовании Float в Decimal #5607 (coraxster)
  • Буфер сбрасывается при вызове деструктора WriteBufferFromHDFS. Это исправляет запись в HDFS. #5684 (Xindong Peng)

Улучшения

  • Пустые ячейки в CSV рассматриваются как значения по умолчанию, если включена настройка input_format_defaults_for_omitted_fields. #5625 (akuzm)
  • Неблокирующая загрузка внешних словарей. #5567 (Vitaly Baranov)
  • Сетевые тайм-ауты для уже установленных соединений теперь можно динамически изменять в соответствии с настройками. #4558 (Konstantin Podshumok)
  • Для функций firstSignificantSubdomain, cutToFirstSignificantSubdomain используется “public_suffix_list”. Используется идеальная хеш-таблица, сгенерированная с помощью gperf, со списком, созданным из файла: https://publicsuffix.org/list/public&#95;suffix&#95;list.dat. (например, теперь домен ac.uk распознается как незначимый). #5030 (Guillaume Tassery)
  • Тип данных IPv6 добавлен в системные таблицы; унифицированы столбцы с информацией о клиенте в system.processes и system.query_log #5640 (alexey-milovidov)
  • Добавлено использование сеансов для соединений по протоколу совместимости с MySQL. #5476 #5646 (Yuriy Baranov)
  • Поддержка большего числа запросов ALTER с предложением ON CLUSTER. #5593 #5613 (sundyli)
  • Добавлена поддержка секции <logger> в файле config clickhouse-local. #5540 (proller)
  • Разрешен запуск запроса с табличной функцией remote в clickhouse-local #5627 (proller)

Повышение производительности

  • Добавлена возможность записывать финальную метку в конец столбцов MergeTree. Это позволяет избежать лишних чтений для ключей, выходящих за пределы диапазона данных таблицы. Функция работает только при использовании адаптивной гранулярности индекса. #5624 (alesapin)
  • Улучшена производительность таблиц MergeTree на очень медленных файловых системах за счет сокращения количества системных вызовов stat. #5648 (alexey-milovidov)
  • Исправлено падение производительности при чтении из таблиц MergeTree, появившееся в версии 19.6. Исправляет #5631. #5633 (alexey-milovidov)

Улучшения сборки/тестирования/упаковки

  • Реализован TestKeeper — реализация интерфейса ZooKeeper, используемая для тестирования #5643 (alexey-milovidov) (levushkin aleksej)
  • Теперь .sql-тесты можно запускать изолированно на отдельных серверах, параллельно и со случайной базой данных. Это позволяет выполнять их быстрее, добавлять новые тесты с пользовательскими конфигурациями сервера и быть уверенными, что разные тесты не влияют друг на друга. #5554 (Ivan)
  • Из performance tests удалены <name> и <metrics> #5672 (Olga Khvostikova)
  • Исправлен performance test select_format для форматов Pretty #5642 (alexey-milovidov)

Релиз ClickHouse 19.9

Релиз ClickHouse 19.9.3.31, 2019-07-05

Исправление ошибки

  • Исправлен segfault в кодеке Delta, затрагивавший столбцы со значениями размером менее 32 бит. Ошибка приводила к случайному повреждению памяти. #5786 (alesapin)
  • Исправлена редкая ошибка при проверке части со столбцом LowCardinality. #5832 (alesapin)
  • Исправлен segfault при TTL merge с нефизическими столбцами в блоке. #5819 (Anton Popov)
  • Исправлена потенциальная бесконечная задержка низкоприоритетных запросов. #5842 (alexey-milovidov)
  • Исправлено определение часового пояса по умолчанию в ClickHouse как UCT вместо UTC. #5828 (alexey-milovidov)
  • Исправлена ошибка, из-за которой распределённые запросы DROP/ALTER/TRUNCATE/OPTIMIZE с предложением ON CLUSTER выполнялись на реплике-последователе раньше, чем на реплике-лидере. Теперь они будут выполняться напрямую на реплике-лидере. #5757 (alesapin)
  • Исправлено состояние гонки, из-за которого некоторые запросы могли не появляться в query_log сразу после запроса SYSTEM FLUSH LOGS. #5685 (Anton Popov)
  • Добавлена отсутствовавшая поддержка константных аргументов для функции evalMLModel. #5820 (alexey-milovidov)

Релиз ClickHouse 19.9.2.4, 2019-06-24

Новая возможность

  • Вывод информации о замороженных частях в таблице system.parts. #5471 (proller)
  • При запуске clickhouse-client в tty запрашивается пароль клиента, если он не задан в аргументах #5092 (proller)
  • Реализованы функции dictGet и dictGetOrDefault для типов Decimal. #5394 (Artem Zuikov)

Улучшения

  • Debian init: добавлен тайм-аут при остановке сервиса #5522 (proller)
  • Добавлена настройка, которая по умолчанию запрещает создание таблицы с подозрительными типами для LowCardinality #5448 (Olga Khvostikova)
  • Функции регрессии возвращают веса модели, если не используются как State в функции evalMLMethod. #5411 (Quid37)
  • Переименованы и улучшены методы регрессии. #5492 (Quid37)
  • Интерфейсы средств поиска по строкам стали понятнее. #5586 (Danila Kutenin)

Исправление ошибки

  • Исправлена возможная потеря данных в Kafka #5445 (Ivan)
  • Исправлен потенциальный бесконечный цикл в формате PrettySpace при вызове с нулевым количеством столбцов #5560 (Olga Khvostikova)
  • Исправлена ошибка переполнения UInt32 в линейных моделях. Разрешён eval ML model для неконстантного аргумента модели. #5516 (Nikolai Kochetov)
  • ALTER TABLE ... DROP INDEX IF EXISTS ... не должен генерировать исключение, если указанный индекс не существует #5524 (Gleb Novikov)
  • Исправлен segfault при использовании bitmapHasAny в скалярном подзапросе #5528 (Zhichang Yu)
  • Исправлена ошибка, из-за которой пул соединений репликации не пытался повторно разрешить имя хоста даже после сброса DNS-кэша. #5534 (alesapin)
  • Исправлена работа ALTER ... MODIFY TTL в ReplicatedMergeTree. #5539 (Anton Popov)
  • Исправлена вставка в distributed таблицу с MATERIALIZED столбцом #5429 (Azat Khuzhin)
  • Исправлена ошибка bad alloc при TRUNCATE хранилища Join #5437 (TCeason)
  • В последних версиях пакета tzdata некоторые файлы теперь являются символическими ссылками. Из-за этого текущий механизм определения часового пояса по умолчанию работает некорректно и выдаёт неправильные названия для некоторых часовых поясов. Теперь мы как минимум принудительно задаём имя часового пояса по содержимому TZ, если оно указано. #5443 (Ivan)
  • Исправлены некоторые крайне редкие случаи в поисковике MultiVolnitsky, когда суммарная длина константных искомых подстрок составляет не менее 16 КБ. Алгоритм пропускал предыдущие результаты или перезаписывал их, что могло приводить к некорректному результату multiSearchAny. #5588 (Danila Kutenin)
  • Исправлена проблема, из-за которой в запросах ExternalData нельзя было использовать настройки ClickHouse. Также на данный момент нельзя использовать настройки date_time_input_format и low_cardinality_allow_in_native_format из-за неоднозначности имен (во внешних данных это может интерпретироваться как формат таблицы, а в запросе — как настройка). #5455 (Danila Kutenin)
  • Исправлена ошибка, из-за которой части удалялись только из FS и не удалялись из Zookeeper. #5520 (alesapin)
  • Убрано отладочное логирование из протокола MySQL #5478 (alexey-milovidov)
  • Пропускать ZNONODE при обработке DDL-запросов #5489 (Azat Khuzhin)
  • Исправлен тип результирующего столбца для смешанного UNION ALL. Встречались случаи с несогласованными типами данных и столбцов в результирующих столбцах. #5503 (Artem Zuikov)
  • В функциях dictGetT при некорректных целых числах теперь генерируется исключение вместо сбоя. #5446 (Artem Zuikov)
  • Исправлены некорректные значения element_count и load_factor для хешированного словаря в таблице system.dictionaries. #5440 (Azat Khuzhin)

Улучшения сборки/тестирования/упаковки

  • Исправлена сборка без поддержки HTTP-сжатия Brotli (переменная CMake ENABLE_BROTLI=OFF). #5521 (Anton Yuzhaninov)
  • Подключение roaring.h как roaring/roaring.h #5523 (Orivej Desh)
  • Исправлены предупреждения gcc9 в hyperscan (#line directive is evil!) #5546 (Danila Kutenin)
  • Исправлены все предупреждения при компиляции с gcc-9. Исправлены некоторые проблемы в contrib. Исправлен внутренний сбой компилятора (ICE) в gcc9 и отправлен отчёт в bugzilla. #5498 (Danila Kutenin)
  • Исправлена линковка с lld #5477 (alexey-milovidov)
  • Удалены неиспользуемые специализации в словарях #5452 (Artem Zuikov)
  • Улучшены тесты производительности форматирования и парсинга таблиц для разных типов файлов #5497 (Olga Khvostikova)
  • Исправления для параллельного запуска тестов #5506 (proller)
  • Docker: используются конфигурации из clickhouse-test #5531 (proller)
  • Исправлена компиляция для FreeBSD #5447 (proller)
  • Boost обновлён до 1.70 #5570 (proller)
  • Исправлена сборка ClickHouse как подмодуля #5574 (proller)
  • Улучшены тесты производительности JSONExtract #5444 (Vitaly Baranov)

Релиз ClickHouse 19.8

Релиз ClickHouse 19.8.3.8, 2019-06-11

Новые возможности

  • Добавлены функции для работы с JSON #4686 (hcz) #5124. (Vitaly Baranov)
  • Добавлена функция basename с поведением, аналогичным одноимённой функции, существующей во многих языках (os.path.basename in python, basename in PHP и т. д.). Работает как с UNIX-подобными путями, так и с путями Windows. #5136 (Guillaume Tassery)
  • Добавлен синтаксис LIMIT n, m BY или LIMIT m OFFSET n BY для указания смещения n в предложении LIMIT BY. #5138 (Anton Popov)
  • Добавлен новый тип данных SimpleAggregateFunction, который позволяет использовать столбцы с простой агрегацией в AggregatingMergeTree. Его можно использовать только с простыми функциями, такими как any, anyLast, sum, min, max. #4629 (Boris Granveaud)
  • Добавлена поддержка неконстантных аргументов функции ngramDistance #5198 (Danila Kutenin)
  • Добавлены функции skewPop, skewSamp, kurtPop и kurtSamp для вычисления асимметрии последовательности значений, выборочной асимметрии, эксцесса и выборочного эксцесса соответственно. #5200 (hcz)
  • Добавлена поддержка операции переименования для хранилища MaterializeView. #5209 (Guillaume Tassery)
  • Добавлен сервер, позволяющий подключаться к ClickHouse с помощью клиента MySQL. #4715 (Yuriy Baranov)
  • Добавлены функции toDecimal*OrZero и toDecimal*OrNull. #5291 (Artem Zuikov)
  • Добавлена поддержка Decimal types в функциях: quantile, quantiles, median, quantileExactWeighted, quantilesExactWeighted, medianExactWeighted. #5304 (Artem Zuikov)
  • Добавлена функция toValidUTF8, которая заменяет все некорректные символы UTF-8 символом замены � (U+FFFD). #5322 (Danila Kutenin)
  • Добавлена функция format. Выполняет форматирование константного шаблона (упрощённого шаблона формата Python) с использованием строк, перечисленных в аргументах. #5330 (Danila Kutenin)
  • Добавлена таблица system.detached_parts, содержащая информацию об отсоединённых частях таблиц MergeTree. #5353 (akuzm)
  • Добавлена функция ngramSearch для вычисления несимметрической разности между needle и haystack. #5418#5422 (Danila Kutenin)
  • Реализованы базовые методы машинного обучения (стохастическая линейная регрессия и логистическая регрессия) с использованием интерфейса агрегатных функций. Поддерживаются различные стратегии обновления весов модели (простой градиентный спуск, метод импульса, метод Нестерова). Также поддерживаются мини-батчи произвольного размера. #4943 (Quid37)
  • Реализованы функции geohashEncode и geohashDecode. #5003 (Vasily Nemkov)
  • Добавлена агрегатная функция timeSeriesGroupSum, которая может агрегировать разные временные ряды, у которых временные метки выборок не выровнены. Она использует линейную интерполяцию между двумя временными метками выборок, а затем суммирует временные ряды. Добавлена агрегатная функция timeSeriesGroupRateSum, которая вычисляет скорость изменения временных рядов, а затем суммирует эти скорости. #4542 (Yangkuan Liu)
  • Добавлены функции IPv4CIDRtoIPv4Range и IPv6CIDRtoIPv6Range для вычисления нижней и верхней границ диапазона IP-адресов подсети по CIDR. #5095 (Guillaume Tassery)
  • Добавлен заголовок X-ClickHouse-Summary, который передаётся при отправке запроса по HTTP с включенной настройкой send_progress_in_http_headers. Он возвращает стандартную информацию из X-ClickHouse-Progress, а также дополнительные сведения, например сколько строк и байт было вставлено в ходе запроса. #5116 (Guillaume Tassery)

Улучшения

  • Добавлена настройка max_parts_in_total для таблиц семейства MergeTree (по умолчанию: 100 000), предотвращающая небезопасное задание ключа партиционирования #5166. #5171 (alexey-milovidov)
  • clickhouse-obfuscator: вычислять seed для отдельных столбцов, комбинируя исходный seed с именем столбца, а не с его позицией. Это предназначено для преобразования наборов данных с несколькими связанными таблицами, чтобы после преобразования таблицы по-прежнему можно было связывать через JOIN. #5178 (alexey-milovidov)
  • Добавлены функции JSONExtractRaw, JSONExtractKeyAndValues. Функции jsonExtract<type> переименованы в JSONExtract<type>. В случае ошибки эти функции возвращают значения соответствующего типа, а не NULL. Изменена функция JSONExtract: теперь она получает тип результата из последнего параметра и не оборачивает типы в Nullable. Реализован fallback на RapidJSON в случае, если инструкции AVX2 недоступны. Библиотека Simdjson обновлена до новой версии. #5235 (Vitaly Baranov)
  • Теперь функции if и multiIf для совместимости с SQL зависят не от Nullable условия, а от ветвей. #5238 (Jian Wu)
  • Предикат In теперь возвращает результат Null при входном значении Null, как и функция Equal. #5152 (Jian Wu)
  • Проверять ограничение по времени после каждых (flush_interval / poll_timeout) строк из Kafka. Это позволяет чаще прерывать чтение из потребителя Kafka и проверять временные ограничения для потоков верхнего уровня #5249 (Ivan)
  • Собрать rdkafka со встроенной поддержкой SASL. Это должно позволить использовать аутентификацию SASL SCRAM #5253 (Ivan)
  • Батч-версия RowRefList для ALL JOIN. #5267 (Artem Zuikov)
  • clickhouse-server: более информативные сообщения об ошибках при прослушивании. #5268 (proller)
  • Поддержка словарей в clickhouse-copier для функций внутри <sharding_key> #5270 (proller)
  • Добавлена новая настройка kafka_commit_every_batch для управления политикой коммита в Kafka. Она позволяет выбрать режим коммита: после обработки каждого батча сообщений или после записи в хранилище всего блока. Это компромисс между потерей части сообщений и их повторным чтением в некоторых редких ситуациях. #5308 (Ivan)
  • Добавлена поддержка других беззнаковых целочисленных типов в windowFunnel. #5320 (sundyli)
  • Разрешено затенение виртуального столбца _table в движке Merge. #5325 (Ivan)
  • Добавлена поддержка других целочисленных типов без знака для агрегатных функций sequenceMatch #5339 (sundyli)
  • Более понятные сообщения об ошибках, если несовпадение контрольной суммы, скорее всего, вызвано аппаратными сбоями. #5355 (alexey-milovidov)
  • Проверка того, что базовые таблицы поддерживают сэмплирование для StorageMerge #5366 (Ivan)
  • Закрытие MySQL-соединений после использования во внешних словарях. Связано с проблемой #893. #5395 (Clément Rodriguez)
  • Улучшения протокола MySQL. Имя формата изменено на MySQLWire. Для вызова RSA_free теперь используется RAII. SSL отключается, если не удается создать контекст. #5419 (Yuriy Baranov)
  • clickhouse-client: теперь может запускаться с недоступным файлом истории (только для чтения, нет места на диске, файл является каталогом, …). #5431 (proller)
  • Настройки запроса теперь учитываются при асинхронных INSERT в таблицы Distributed. #4936 (TCeason)
  • Функции leastSqr, LinearRegression и LogisticRegression были переименованы в simpleLinearRegression, linearRegression и logisticRegression соответственно. #5391 (Nikolai Kochetov)

Повышение производительности

  • Распараллелена обработка частей нереплицируемых таблиц MergeTree в запросе ALTER MODIFY. #4639 (Ivan Kush)
  • Оптимизировано извлечение данных с помощью регулярных выражений. #5193 #5191 (Danila Kutenin)
  • Правый столбец ключа JOIN не добавляется в результат JOIN, если он используется только в секции ON. #5260 (Artem Zuikov)
  • Буфер Kafka замораживается после первого пустого ответа. Это позволяет избежать многократных вызовов ReadBuffer::next() для пустого результата в некоторых потоках разбора строк. #5283 (Ivan)
  • Оптимизирована функция concat для нескольких аргументов. #5357 (Danila Kutenin)
  • Оптимизация запросов: разрешено проталкивать оператор IN при переписывании comma/cross JOIN во inner JOIN. #5396 (Artem Zuikov)
  • Наша реализация LZ4 заменена на эталонную для ускорения декомпрессии. #5070 (Danila Kutenin)
  • Реализованы MSD radix sort (на основе kxsort) и частичная сортировка. #5129 (Evgenii Pravda)

Исправления ошибок

  • Исправлено требование наличия столбцов для push при JOIN #5192 (Winter Zhang)
  • Исправлена ошибка: когда ClickHouse был запущен через systemd, команда sudo service clickhouse-server forcerestart работала не так, как ожидалось. #5204 (proller)
  • Исправлены HTTP-коды ошибок в DataPartsExchange (межсерверный HTTP-сервер на порту 9009 всегда возвращал код 200, даже при ошибках). #5216 (proller)
  • Исправлен SimpleAggregateFunction для String длиннее MAX_SMALL_STRING_SIZE #5311 (Azat Khuzhin)
  • Исправлена ошибка при преобразовании Decimal в Nullable(Decimal) в IN. Добавлена поддержка и других преобразований Decimal в Decimal (в том числе с разным scale). #5350 (Artem Zuikov)
  • Исправлено повреждение FPU в библиотеке simdjson, которое приводило к неправильным вычислениям агрегатных функций uniqHLL и uniqCombined, а также математических функций, таких как log. #5354 (alexey-milovidov)
  • Исправлена обработка смешанных const/nonconst случаев в JSON-функциях. #5435 (Vitaly Baranov)
  • Исправлена функция retention. Теперь все условия, выполняющиеся в строке данных, добавляются в состояние данных. #5119 (小路)
  • Исправлен тип результата для quantileExact с Decimal. #5304 (Artem Zuikov)

Документация

  • Документация по CollapsingMergeTree переведена на китайский. #5168 (张风啸)
  • Часть документации о движках таблиц переведена на китайский. #5134 #5328 (never lee)

Улучшения сборки/тестирования/упаковки

  • Исправлены некоторые отчёты санитайзера, указывающие на вероятное использование памяти после освобождения.#5139 #5143 #5393 (Ivan)
  • Для удобства тесты производительности вынесены из отдельных каталогов. #5158 (alexey-milovidov)
  • Исправлены некорректные тесты производительности. #5255 (alesapin)
  • Добавлен инструмент для вычисления контрольных сумм при перевороте битов для отладки аппаратных проблем. #5334 (alexey-milovidov)
  • Скрипт runner сделан более удобным в использовании. #5340#5360 (filimonov)
  • Добавлена небольшая инструкция о том, как писать тесты производительности. #5408 (alesapin)
  • Добавлена возможность делать подстановки в запросах CREATE, FILL и DROP в тестах производительности #5367 (Olga Khvostikova)

Релиз ClickHouse 19.7

Релиз ClickHouse 19.7.5.29, 2019-07-05

Исправление ошибки

  • Исправлена проблема с регрессией производительности в некоторых запросах с JOIN. #5192 (Winter Zhang)

Релиз ClickHouse 19.7.5.27, 2019-06-09

Новые возможности

  • Добавлены функции для битмапов bitmapHasAny и bitmapHasAll, аналогичные функциям hasAny и hasAll для массивов. #5279 (Sergi Vladykin)

Исправления ошибок

  • Исправлен segfault при использовании minmax INDEX со значением NULL. #5246 (Nikita Vasilev)
  • Все входные столбцы в LIMIT BY теперь помечаются как обязательные в выходных данных. Это исправляет ошибку ‘Not found column’ в некоторых распределённых запросах. #5407 (Constantin S. Pan)
  • Исправлена ошибка “Column ‘0’ already exists” в SELECT .. PREWHERE для столбца с DEFAULT #5397 (proller)
  • Исправлен запрос ALTER MODIFY TTL для ReplicatedMergeTree. #5539 (Anton Popov)
  • Сервер больше не падает, если не удалось запустить консьюмеры Kafka. #5285 (Ivan)
  • Исправлено некорректное поведение функций битмап, из-за которого они возвращали неверный результат. #5359 (Andy Yang)
  • Исправлен element_count для хешированного словаря (без учёта дубликатов) #5440 (Azat Khuzhin)
  • В качестве имени часового пояса теперь используется содержимое переменной окружения TZ. Это помогает в некоторых случаях корректно определять часовой пояс по умолчанию.#5443 (Ivan)
  • Убрана попытка преобразования целых чисел в функциях dictGetT, так как это работает некорректно. Вместо этого генерируется исключение. #5446 (Artem Zuikov)
  • Исправлены settings в HTTP request ExternalData. #5455 (Danila Kutenin)
  • Исправлена ошибка, из-за которой части удалялись только из FS без удаления их из Zookeeper. #5520 (alesapin)
  • Исправлен segfault в функции bitmapHasAny. #5528 (Zhichang Yu)
  • Исправлена ошибка, из-за которой пул соединений репликации не выполнял повторную попытку разрешения хоста, даже если кэш DNS был сброшен. #5534 (alesapin)
  • Исправлен запрос DROP INDEX IF EXISTS. Теперь запрос ALTER TABLE ... DROP INDEX IF EXISTS ... не генерирует исключение, если указанный индекс не существует. #5524 (Gleb Novikov)
  • Исправлено определение супертипа столбца для union all. В некоторых случаях это приводило к несогласованности данных и типов результирующих столбцов. #5503 (Artem Zuikov)
  • ZNONODE теперь пропускается при обработке DDL-запроса. Раньше, если другой узел удалял znode в очереди задач, тот, который не обработал его, но уже получил список дочерних элементов, завершал поток DDLWorker. #5489 (Azat Khuzhin)
  • Исправлена вставка в таблицу Distributed() с MATERIALIZED-столбцом. #5429 (Azat Khuzhin)

Релиз ClickHouse 19.7.3.9, 2019-05-30

Новые возможности

  • Добавлена возможность ограничивать диапазон значений настройки, которые может задавать пользователь. Эти ограничения можно задать в профиле настроек пользователя. #4931 (Vitaly Baranov)
  • Добавлена вторая версия функции groupUniqArray с необязательным параметром max_size, который ограничивает размер результирующего массива. Такое поведение аналогично функции groupArray(max_size)(x). #5026 (Guillaume Tassery)
  • Для входных форматов файлов TSVWithNames/CSVWithNames порядок столбцов теперь можно определять по заголовку файла. Это задаётся параметром input_format_with_names_use_header. #5081 (Alexander)

Исправления ошибок

  • Падение с uncompressed_cache + JOIN во время слияния (#5197) #5133 (Danila Kutenin)
  • Сегментационная ошибка при запросе к системным таблицам из clickhouse-client. #5066 #5127 (Ivan)
  • Потеря данных при высокой нагрузке через KafkaEngine (#4736) #5080 (Ivan)
  • Исправлено очень редкое состояние гонки данных, которое могло возникнуть при выполнении запроса с UNION ALL, включающего как минимум два SELECT из system.columns, system.tables, system.parts, system.parts_tables или таблиц семейства Merge, и одновременном выполнении ALTER для столбцов соответствующих таблиц. #5189 (alexey-milovidov)

Повышение производительности

  • Для сортировки по одному числовому столбцу в ORDER BY без LIMIT теперь используется поразрядная сортировка. #5106, #4439 (Evgenii Pravda, alexey-milovidov)

Документация

Улучшения сборки/тестирования/упаковки

  • Исправлен вывод символов UTF-8 в clickhouse-test. #5084 (alexey-milovidov)
  • Добавлен параметр командной строки для clickhouse-client, чтобы всегда загружать данные автодополнения. #5102 (alexey-milovidov)
  • Устранены некоторые предупреждения PVS-Studio. #5082 (alexey-milovidov)
  • Обновлён LZ4 #5040 (Danila Kutenin)
  • gperf добавлен в требования к сборке для предстоящего pull request #5030. #5110 (proller)

Релиз ClickHouse 19.6

Релиз ClickHouse 19.6.3.18, 2019-06-13

Исправления ошибок

  • Исправлен pushdown для условия IN в запросах из табличных функций mysql и odbc и соответствующих движков таблиц. Тем самым исправлены #3540 и #2384. #5313 (alexey-milovidov)
  • Исправлена взаимная блокировка в Zookeeper. #5297 (github1youlc)
  • Разрешены значения Decimal в кавычках в CSV. #5284 (Artem Zuikov
  • Запрещено преобразование float Inf/NaN в Decimals (с выдачей исключения). #5282 (Artem Zuikov)
  • Исправлена гонка данных в запросе rename. #5247 (Winter Zhang)
  • Временно отключён LFAlloc. Использование LFAlloc может приводить к большому числу MAP_FAILED при выделении UncompressedCache и, как следствие, к сбоям запросов на серверах с высокой нагрузкой. cfdba93(Danila Kutenin)

Релиз ClickHouse 19.6.2.11, 2019-05-13

Новые возможности

  • TTL-выражения для столбцов и таблиц. #4212 (Anton Popov)
  • Добавлена поддержка сжатия brotli для HTTP-ответов (Accept-Encoding: br) #4388 (Mikhail)
  • Добавлена новая функция isValidUTF8 для проверки того, является ли набор байтов корректно закодированным в UTF-8. #4934 (Danila Kutenin)
  • Добавлена новая политика балансировки нагрузки first_or_random, которая отправляет запросы на первый указанный хост, а если он недоступен — на случайные хосты сегмента. Полезна для топологий с перекрёстной репликацией. #5012 (nvartolomei)

Экспериментальные возможности

  • Добавлена настройка index_granularity_bytes (адаптивная гранулярность индекса) для таблиц семейства MergeTree*. #4826 (alesapin)

Улучшения

  • Добавлена поддержка неконстантных и отрицательных аргументов размера и длины для функции substringUTF8. #4989 (alexey-milovidov)
  • Отключён push-down в правую таблицу при left JOIN, в левую таблицу при right JOIN и в обе таблицы при full JOIN. Это исправляет неверный результат JOIN в некоторых случаях. #4846 (Ivan)
  • clickhouse-copier: автоматическая загрузка конфигурации задачи из параметра --task-file #4876 (proller)
  • Добавлен обработчик опечаток для фабрики хранилищ и фабрики табличных функций. #4891 (Danila Kutenin)
  • Поддержка звёздочек и квалифицированных звёздочек для множественных JOIN без подзапросов #4898 (Artem Zuikov)
  • Сообщение об ошибке отсутствующего столбца сделано более понятным для пользователя. #4915 (Artem Zuikov)

Повышение производительности

Обратно несовместимые изменения

  • HTTP-заголовок Query-Id был переименован в X-ClickHouse-Query-Id для согласованности. #4972 (Mikhail)

Исправления ошибок

  • Исправлено потенциальное разыменование нулевого указателя в clickhouse-copier. #4900 (proller)
  • Исправлена ошибка в запросе с JOIN + ARRAY JOIN #4938 (Artem Zuikov)
  • Исправлено зависание при запуске сервера, когда словарь зависит от другого словаря через базу данных с движком Dictionary. #4962 (Vitaly Baranov)
  • Частично исправлен режим distributed_product_mode = local. Теперь можно использовать столбцы локальных таблиц в WHERE/HAVING/ORDER BY/… через псевдонимы таблиц. Если у таблицы нет псевдонима, генерируется исключение. Доступ к столбцам без псевдонимов таблиц пока невозможен. #4986 (Artem Zuikov)
  • Исправлен потенциально неверный результат для SELECT DISTINCT с JOIN #5001 (Artem Zuikov)
  • Исправлено очень редкое состояние гонки данных, которое могло возникать при выполнении запроса с UNION ALL, включающего как минимум два SELECT из system.columns, system.tables, system.parts, system.parts_tables или таблиц семейства Merge, при одновременном выполнении ALTER столбцов соответствующих таблиц. #5189 (alexey-milovidov)

Улучшения сборки/тестирования/упаковки

  • Исправлены падения тестов при запуске clickhouse-server на другом хосте #4713 (Vasily Nemkov)
  • clickhouse-test: отключены управляющие последовательности цветов в среде без TTY. #4937 (alesapin)
  • clickhouse-test: разрешено использовать любую тестовую базу данных (удалена квалификация test. там, где это возможно) #5008 (proller)
  • Исправлены ошибки UBSan #5037 (Vitaly Baranov)
  • В ClickHouse добавлен Yandex LFAlloc, чтобы по-разному выделять память для данных MarkCache и UncompressedCache и надежнее выявлять segfault #4995 (Danila Kutenin)
  • Утилита на Python для упрощения работы с бэкпортами и журналами изменений. #4949 (Ivan)

Релиз ClickHouse 19.5

Релиз ClickHouse 19.5.4.22, 2019-05-13

Исправления ошибок

  • Исправлен возможный сбой в функциях bitmap* #5220 #5228 (Andy Yang)
  • Исправлено крайне редкое состояние гонки данных, которое могло возникнуть при выполнении запроса с UNION ALL, включающего как минимум два SELECT из system.columns, system.tables, system.parts, system.parts_tables или таблиц семейства Merge, при одновременном выполнении ALTER для столбцов связанных таблиц. #5189 (alexey-milovidov)
  • Исправлена ошибка Set for IN is not created yet in case of using single LowCardinality column in the left part of IN. Она возникала, если столбец LowCardinality был частью первичного ключа. #5031 #5154 (Nikolai Kochetov)
  • Изменено поведение функции retention: если строка удовлетворяла и первому, и N-му условию, в состояние данных добавлялось только первое выполненное условие. Теперь в состояние данных добавляются все условия, которым удовлетворяет строка. #5119 (小路)

Релиз ClickHouse 19.5.3.8, 2019-04-18

Исправления ошибок

  • Тип настройки max_partitions_per_insert_block исправлен: вместо boolean теперь используется UInt64. #5028 (Mohammad Hossein Sekhavat)

Релиз ClickHouse 19.5.2.6, 2019-04-15

Новые возможности

  • Добавлена поддержка множественного сопоставления с Hyperscan для регулярных выражений (функции multiMatchAny, multiMatchAnyIndex, multiFuzzyMatchAny, multiFuzzyMatchAnyIndex). #4780, #4841 (Danila Kutenin)
  • Добавлена функция multiSearchFirstPosition. #4780 (Danila Kutenin)
  • Реализован предопределённый фильтр выражения для каждой строки в таблицах. #4792 (Ivan)
  • Добавлен новый тип индекса пропуска данных на основе bloom-фильтров (может использоваться для функций equal, in и like). #4499 (Nikita Vasilev)
  • Добавлен ASOF JOIN, который позволяет выполнять запросы с объединением по последнему известному значению. #4774 #4867 #4863 #4875 (Martijn Bakker, Artem Zuikov)
  • Переписывание нескольких COMMA JOIN в CROSS JOIN. Затем, если возможно, они переписываются в INNER JOIN. #4661 (Artem Zuikov)

Улучшения

  • topK и topKWeighted теперь поддерживают пользовательский loadFactor (исправляет проблему #4252). #4634 (Kirill Danshin)
  • Разрешено использовать parallel_replicas_count > 1 даже для таблиц без сэмплирования (для них эта настройка просто игнорируется). В предыдущих версиях это приводило к исключению. #4637 (Alexey Elymanov)
  • Поддержка CREATE OR REPLACE VIEW. Позволяет создать представление или задать новое определение одним оператором. #4654 (Boris Granveaud)
  • Движок таблицы Buffer теперь поддерживает PREWHERE. #4671 (Yangkuan Liu)
  • Добавлена возможность запускать реплицированную таблицу без метаданных в ZooKeeper в режиме readonly. #4691 (alesapin)
  • Исправлено мерцание индикатора выполнения в clickhouse-client. Проблема была особенно заметна при использовании FORMAT Null с потоковыми запросами. #4811 (alexey-milovidov)
  • Добавлена возможность отключать функции с библиотекой hyperscan для отдельных пользователей, чтобы ограничить потенциально чрезмерное и неконтролируемое потребление ресурсов. #4816 (alexey-milovidov)
  • Во все сообщения об ошибках добавлен номер версии. #4824 (proller)
  • Добавлено ограничение для функций multiMatch, требующее, чтобы размер строки помещался в unsigned int. Также добавлено ограничение на число аргументов для функций multiSearch. #4834 (Danila Kutenin)
  • Улучшено использование рабочего буфера и обработка ошибок в Hyperscan. #4866 (Danila Kutenin)
  • system.graphite_detentions теперь заполняется из конфигурации таблиц с движком *GraphiteMergeTree. #4584 (Mikhail f. Shiryaev)
  • Функция trigramDistance переименована в ngramDistance, а также добавлены новые функции с CaseInsensitive и UTF. #4602 (Danila Kutenin)
  • Улучшен расчет индексов пропуска данных. #4640 (Nikita Vasilev)
  • Обычные столбцы, а также столбцы DEFAULT, MATERIALIZED и ALIAS теперь хранятся в одном списке (исправляет проблему #2867). #4707 (Alex Zatelepin)

Исправление ошибки

  • Устранён вызов std::terminate в случае сбоя выделения памяти. Теперь, как и ожидалось, генерируется исключение std::bad_alloc. #4665 (alexey-milovidov)
  • Исправлено чтение capnproto из буфера. Иногда не удавалось успешно загрузить файлы по HTTP. #4674 (Vladislav)
  • Исправлена ошибка Unknown log entry type: 0, возникавшая после выполнения запроса OPTIMIZE TABLE FINAL. #4683 (Amos Bird)
  • Некорректные аргументы в функциях hasAny и hasAll могут приводить к ошибке сегментации. #4698 (alexey-milovidov)
  • При выполнении запроса DROP DATABASE dictionary возможна взаимная блокировка. #4701 (alexey-milovidov)
  • Исправлено неопределённое поведение функций median и quantile. #4702 (hcz)
  • Исправлено определение уровня сжатия, если network_compression_method указан в нижнем регистре. Ошибка в v19.1. #4706 (proller)
  • Устранено игнорирование настройки <timezone>UTC</timezone> (исправлена проблема #4658). #4718 (proller)
  • Исправлено поведение функции histogram при работе с таблицами Distributed. #4741 (olegkv)
  • Исправлена ошибка tsan destroy of a locked mutex. #4742 (alexey-milovidov)
  • Исправлен отчет TSan при завершении работы, вызванный состоянием гонки при использовании системных журналов. Исправлено потенциальное обращение к уже освобожденной памяти при завершении работы с включенным part_log. #4758 (alexey-milovidov)
  • Исправлена перепроверка частей в ReplicatedMergeTreeAlterThread в случае ошибки. #4772 (Nikolai Kochetov)
  • Арифметические операции над промежуточными состояниями агрегатных функций не работали с константными аргументами (например, с результатами подзапроса). #4776 (alexey-milovidov)
  • Всегда заключайте имена столбцов в метаданных в обратные кавычки. Иначе невозможно создать таблицу, в которой есть столбец с именем index (сервер не перезапустится из-за некорректного запроса ATTACH в метаданных). #4782 (alexey-milovidov)
  • Исправлен сбой при ALTER ... MODIFY ORDER BY для таблицы Distributed. #4790 (TCeason)
  • Исправлен segfault в JOIN ON при включенном enable_optimize_predicate_expression. #4794 (Winter Zhang)
  • Исправлена ошибка, из-за которой после обработки сообщения Protobuf из Kafka добавлялась лишняя строка. #4808 (Vitaly Baranov)
  • Исправлено падение JOIN для не-Nullable и Nullable столбцов. Исправлены значения NULL в правых ключах в ANY JOIN + join_use_nulls. #4815 (Artem Zuikov)
  • Исправлена ошибка сегментации в clickhouse-copier. #4835 (proller)
  • Исправлено состояние гонки при выполнении SELECT из system.tables, если таблица одновременно переименовывается или изменяется. #4836 (alexey-milovidov)
  • Исправлено состояние гонки при получении устаревшей части данных. #4839 (alexey-milovidov)
  • Исправлено редкое состояние гонки, которое могло возникать при RENAME таблицы семейства MergeTree. #4844 (alexey-milovidov)
  • Исправлена ошибка сегментации в функции arrayIntersect. Ошибка сегментации могла возникнуть, если функция вызывалась со смешанными константными и обычными аргументами. #4847 (Lixiang Qian)
  • Исправлено чтение из столбца Array(LowCardinality) в редком случае, когда он содержал длинную последовательность пустых массивов. #4850 (Nikolai Kochetov)
  • Исправлено падение при FULL/RIGHT JOIN при выполнении JOIN по Nullable и не-Nullable полям. #4855 (Artem Zuikov)
  • Исправлено исключение No message received при получении частей от других реплик. #4856 (alesapin)
  • Исправлен неверный результат работы функции arrayIntersect при наличии нескольких повторяющихся значений в одном массиве. #4871 (Nikolai Kochetov)
  • Исправлено состояние гонки при одновременном выполнении запросов ALTER COLUMN, которое могло приводить к сбою сервера (исправлена проблема #3421). #4592 (Alex Zatelepin)
  • Исправлен некорректный результат в FULL/RIGHT JOIN при константном столбце. #4723 (Artem Zuikov)
  • Исправлены дубликаты в GLOBAL JOIN с символом *. #4705 (Artem Zuikov)
  • Исправлено определение параметра в ALTER MODIFY для столбца CODEC, если тип столбца не указан. #4883 (alesapin)
  • Функции cutQueryStringAndFragment() и queryStringAndFragment() теперь корректно работают, если URL содержит фрагмент, но не содержит строки запроса. #4894 (Vitaly Baranov)
  • Исправлена редкая ошибка, возникающая, когда значение настройки min_bytes_to_use_direct_io больше нуля и потоку требуется сместить позицию чтения назад в файле столбца. #4897 (alesapin)
  • Исправлены некорректные типы аргументов для агрегатных функций с аргументами LowCardinality (исправлена проблема #4919). #4922 (Nikolai Kochetov)
  • Исправлена неверная квалификация имён в GLOBAL JOIN. #4969 (Artem Zuikov)
  • Исправлен результат функции toISOWeek для 1970 года. #4988 (alexey-milovidov)
  • Исправлено дублирование запросов DROP, TRUNCATE и OPTIMIZE при выполнении с предложением ON CLUSTER для семейства таблиц ReplicatedMergeTree*. #4991 (alesapin)

Обратно несовместимое изменение

  • Параметр insert_sample_with_metadata переименован в input_format_defaults_for_omitted_fields. #4771 (Artem Zuikov)
  • Добавлен параметр max_partitions_per_insert_block (по умолчанию имеет значение 100). Если вставляемый блок содержит большее число партиций, генерируется исключение. Установите значение 0, если хотите снять это ограничение (не рекомендуется). #4845 (alexey-milovidov)
  • Функции множественного поиска были переименованы (multiPosition в multiSearchAllPositions, multiSearch в multiSearchAny, firstMatch в multiSearchFirstIndex). #4780 (Danila Kutenin)

Повышение производительности

  • Оптимизирован поисковый алгоритм Volnitsky за счёт инлайнинга, что даёт примерно 5–10% прироста производительности поиска для запросов с большим количеством искомых подстрок или множеством похожих биграмм. #4862 (Danila Kutenin)
  • Исправлена проблема с производительностью, возникавшая, когда значение настройки use_uncompressed_cache было больше нуля и все читаемые данные находились в кэше. #4913 (alesapin)

Улучшения сборки/тестирования/упаковки

  • Усилена debug-сборка: более детальные отображения памяти и ASLR; добавлена защита памяти для mark cache и индекса. Это позволяет находить больше ошибок повреждения памяти в случаях, когда ASan и MSan не справляются. #4632 (alexey-milovidov)
  • Добавлена поддержка переменных cmake ENABLE_PROTOBUF, ENABLE_PARQUET и ENABLE_BROTLI, позволяющих включать и отключать указанные выше возможности (так же, как для librdkafka, mysql и т. д.). #4669 (Silviu Caragea)
  • Добавлена возможность выводить список процессов и трассировки стека всех потоков, если некоторые запросы зависают после выполнения тестов. #4675 (alesapin)
  • Добавлены повторные попытки при ошибке Connection loss в clickhouse-test. #4682 (alesapin)
  • В скрипт packager добавлены сборка FreeBSD с Vagrant и сборка с Thread sanitizer. #4712 #4748 (alesapin)
  • Теперь во время установки у пользователя запрашивается пароль для пользователя 'default'. #4725 (proller)
  • Подавлено предупреждение в библиотеке rdkafka. #4740 (alexey-milovidov)
  • Добавлена возможность сборки без SSL. #4750 (proller)
  • Добавлен способ запускать образ clickhouse-server от имени произвольного пользователя. #4753 (Mikhail f. Shiryaev)
  • Обновлён contrib boost до 1.69. #4793 (proller)
  • Отключено использование mremap при компиляции с Thread Sanitizer. Как ни странно, TSan не перехватывает mremap (хотя перехватывает mmap, munmap), что приводит к ложноположительным срабатываниям. Исправлен отчёт TSan в тестах с сохранением состояния. #4859 (alexey-milovidov)
  • Добавлен тест, проверяющий использование схемы формата через HTTP-интерфейс. #4864 (Vitaly Baranov)

Релиз ClickHouse 19.4

Релиз ClickHouse 19.4.4.33, 2019-04-17

Исправления ошибок

  • Предотвращён вызов std::terminate в случае ошибки выделения памяти. Теперь, как и ожидается, генерируется исключение std::bad_alloc. #4665 (alexey-milovidov)
  • Исправлено чтение capnproto из буфера. Иногда файлы не удавалось успешно загрузить по HTTP. #4674 (Vladislav)
  • Исправлена ошибка Unknown log entry type: 0, возникавшая при выполнении запроса OPTIMIZE TABLE FINAL. #4683 (Amos Bird)
  • Некорректные аргументы функций hasAny и hasAll могут приводить к segfault. #4698 (alexey-milovidov)
  • При выполнении запроса DROP DATABASE dictionary могла возникать взаимная блокировка. #4701 (alexey-milovidov)
  • Исправлено неопределённое поведение функций median и quantile. #4702 (hcz)
  • Исправлено определение уровня сжатия, если network_compression_method указан в нижнем регистре. Ошибка появилась в v19.1. #4706 (proller)
  • Устранено игнорирование настройки <timezone>UTC</timezone> (исправлена проблема #4658). #4718 (proller)
  • Исправлено поведение функции histogram при работе с таблицами Distributed. #4741 (olegkv)
  • Исправлен отчёт tsan destroy of a locked mutex. #4742 (alexey-milovidov)
  • Исправлено сообщение TSan при завершении работы из-за race condition при использовании системных журналов. Исправлено потенциальное use-after-free при завершении работы, когда включен part_log. #4758 (alexey-milovidov)
  • Исправлена повторная проверка частей в ReplicatedMergeTreeAlterThread при возникновении ошибки. #4772 (Nikolai Kochetov)
  • Арифметические операции с промежуточными состояниями агрегатных функций не работали для константных аргументов (например, результатов подзапросов). #4776 (alexey-milovidov)
  • Всегда заключайте имена столбцов в метаданных в обратные кавычки. В противном случае будет невозможно создать таблицу со столбцом с именем index (сервер не перезапустится из-за некорректного запроса ATTACH в метаданных). #4782 (alexey-milovidov)
  • Исправлено падение в ALTER ... MODIFY ORDER BY для таблицы Distributed. #4790 (TCeason)
  • Исправлен segfault при JOIN ON с включенным enable_optimize_predicate_expression. #4794 (Winter Zhang)
  • Исправлена ошибка, из-за которой после обработки сообщения Protobuf из Kafka добавлялась лишняя строка. #4808 (Vitaly Baranov)
  • Исправлена ошибка сегментации в clickhouse-copier. #4835 (proller)
  • Исправлена гонка в SELECT из system.tables, если таблица одновременно переименовывается или изменяется. #4836 (alexey-milovidov)
  • Исправлено состояние гонки при получении уже устаревшей части данных. #4839 (alexey-milovidov)
  • Исправлена редкая состояние гонки, которое могло возникать при RENAME таблицы семейства MergeTree. #4844 (alexey-milovidov)
  • Исправлена ошибка сегментации в функции arrayIntersect. Она могла возникнуть, если функция вызывалась со смешанными константными и обычными аргументами. #4847 (Lixiang Qian)
  • Исправлено чтение из столбца Array(LowCardinality) в редком случае, когда он содержал длинную последовательность пустых массивов. #4850 (Nikolai Kochetov)
  • Исправлено исключение No message received при получении частей от других реплик. #4856 (alesapin)
  • Исправлен некорректный результат функции arrayIntersect в случае наличия нескольких повторяющихся значений в одном массиве. #4871 (Nikolai Kochetov)
  • Исправлено состояние гонки при одновременном выполнении запросов ALTER COLUMN, которое могло привести к аварийному завершению сервера (исправлена проблема #3421). #4592 (Alex Zatelepin)
  • Исправлено определение параметров в ALTER MODIFY для столбца CODEC, если тип столбца не указан. #4883 (alesapin)
  • Функции cutQueryStringAndFragment() и queryStringAndFragment() теперь корректно работают, если URL содержит фрагмент, но не содержит строки запроса. #4894 (Vitaly Baranov)
  • Исправлена редкая ошибка, возникавшая при ненулевом значении настройки min_bytes_to_use_direct_io, когда потоку требовалось переместиться назад в файле столбца. #4897 (alesapin)
  • Исправлены неверные типы аргументов у агрегатных функций с аргументами LowCardinality (исправление проблемы #4919). #4922 (Nikolai Kochetov)
  • Исправлен результат работы функции toISOWeek для 1970 года. #4988 (alexey-milovidov)
  • Исправлено дублирование запросов DROP, TRUNCATE и OPTIMIZE при выполнении с использованием предложения ON CLUSTER для семейства таблиц ReplicatedMergeTree*. #4991 (alesapin)

Улучшения

  • Обычные столбцы, а также столбцы DEFAULT, MATERIALIZED и ALIAS теперь хранятся в одном списке (исправлена проблема #2867). #4707 (Alex Zatelepin)

Релиз ClickHouse 19.4.3.11, 2019-04-02

Исправления ошибок

  • Исправлен сбой в FULL/RIGHT JOIN при JOIN по Nullable- и не-Nullable-полям. #4855 (Artem Zuikov)
  • Устранена ошибка сегментации в clickhouse-copier. #4835 (proller)

Улучшения сборки/тестирования/упаковки

  • Добавлена возможность запускать образ clickhouse-server от имени произвольного пользователя. #4753 (Mikhail f. Shiryaev)

Релиз ClickHouse 19.4.2.7, 2019-03-30

Исправления ошибок

  • Исправлено чтение из столбца Array(LowCardinality) в редком случае, когда он содержал длинную последовательность пустых массивов. #4850 (Nikolai Kochetov)

Релиз ClickHouse 19.4.1.3, 2019-03-19

Исправления ошибок

  • Исправлена обработка удалённых запросов, содержащих одновременно LIMIT BY и LIMIT. Ранее, если в удалённом запросе использовались LIMIT BY и LIMIT, LIMIT мог применяться раньше LIMIT BY, что приводило к чрезмерно отфильтрованному результату. #4708 (Constantin S. Pan)

Релиз ClickHouse 19.4.0.49, 2019-03-09

Новые возможности

  • Добавлена полная поддержка формата Protobuf (ввод и вывод, вложенные структуры данных). #4174 #4493 (Vitaly Baranov)
  • Добавлены функции для работы с битмапами на базе Roaring Bitmaps. #4207 (Andy Yang) #4568 (Vitaly Baranov)
  • Добавлена поддержка формата Parquet. #4448 (proller)
  • Добавлена n-gram distance для неточного сравнения строк. Она аналогична q-gram-метрикам в языке R. #4466 (Danila Kutenin)
  • Объединены правила graphite rollup из отдельных шаблонов агрегации и хранения данных. #4426 (Mikhail f. Shiryaev)
  • Добавлены max_execution_speed и max_execution_speed_bytes для ограничения использования ресурсов. Также добавлена настройка min_execution_speed_bytes в дополнение к min_execution_speed. #4430 (Winter Zhang)
  • Реализована функция flatten. #4555 #4409 (alexey-milovidov, kzon)
  • Добавлены функции arrayEnumerateDenseRanked и arrayEnumerateUniqRanked (аналогично arrayEnumerateUniq, но позволяют более точно настраивать глубину массива для работы с многомерными массивами). #4475 (proller) #4601 (alexey-milovidov)
  • Несколько JOIN с некоторыми ограничениями: без звёздочек, без сложных псевдонимов в ON/WHERE/GROUP BY/… #4462 (Artem Zuikov)

Исправления ошибок

  • В этот релиз также вошли все исправления ошибок из версий 19.3 и 19.1.
  • Исправлена ошибка в индексах для пропуска данных: порядок гранул после INSERT был неправильным. #4407 (Nikita Vasilev)
  • Исправлен индекс set для столбцов Nullable и LowCardinality. Ранее использование индекса set со столбцом Nullable или LowCardinality приводило к ошибке Data type must be deserialized with multiple streams при выполнении выборки. #4594 (Nikolai Kochetov)
  • Корректно устанавливается update_time при полном обновлении словаря executable. #4551 (Tema Novikov)
  • Исправлен неработающий индикатор выполнения в 19.3. #4627 (filimonov)
  • Исправлены некорректные значения MemoryTracker, которые в некоторых случаях возникали при уменьшении области памяти. #4619 (alexey-milovidov)
  • Исправлено неопределённое поведение в ThreadPool. #4612 (alexey-milovidov)
  • Исправлен очень редкий сбой с сообщением mutex lock failed: Invalid argument, который мог произойти при одновременном удалении таблицы MergeTree и выполнении SELECT. #4608 (Alex Zatelepin)
  • Поддержка драйвером ODBC типа данных LowCardinality. #4381 (proller)
  • FreeBSD: исправление для ошибки AIOcontextPool: Found io_event with unknown id 0. #4438 (urgordeadbeef)
  • Таблица system.part_log создавалась вне зависимости от конфигурации. #4483 (alexey-milovidov)
  • Исправлено неопределённое поведение функции dictIsIn для словарей типа cache. #4515 (alesapin)
  • Исправлена взаимная блокировка, возникавшая, когда запрос SELECT несколько раз блокировал одну и ту же таблицу (например, из разных потоков или при выполнении нескольких подзапросов), а одновременно выполнялся DDL-запрос. #4535 (Alex Zatelepin)
  • Отключили compile_expressions по умолчанию, пока у нас не появится собственный llvm contrib и не будет возможности протестировать его с clang и asan. #4579 (alesapin)
  • Предотвращён std::terminate, если invalidate_query для внешнего источника словаря clickhouse возвращал некорректный результат (пустой, более одной строки или более одного столбца). Также исправлена проблема, из-за которой invalidate_query выполнялся каждые пять секунд независимо от значения lifetime. #4583 (alexey-milovidov)
  • Предотвращена взаимная блокировка, когда invalidate_query для словаря с источником clickhouse затрагивал таблицу system.dictionaries или базу данных Dictionaries (редкий случай). #4599 (alexey-milovidov)
  • Исправлено поведение CROSS JOIN при пустом WHERE. #4598 (Artem Zuikov)
  • Устранён segfault в функции “replicate” при передаче константного аргумента. #4603 (alexey-milovidov)
  • Исправлена работа лямбда-функции с оптимизатором предикатов. #4408 (Winter Zhang)
  • Несколько исправлений, связанных с множественными JOIN. #4595 (Artem Zuikov)

Улучшения

  • Поддержка псевдонимов в условии JOIN ON для столбцов правой таблицы. #4412 (Artem Zuikov)
  • Результат нескольких JOIN теперь получает корректные имена, чтобы их можно было использовать в подзапросах. В результирующем наборе плоские псевдонимы заменены исходными именами. #4474 (Artem Zuikov)
  • Улучшена логика pushdown для операторов JOIN. #4387 (Ivan)

Повышение производительности

  • Улучшены эвристики оптимизации «move to PREWHERE». #4405 (alexey-milovidov)
  • Используются корректные таблицы lookup, работающие через API HashTable для 8-битных и 16-битных ключей. #4536 (Amos Bird)
  • Повышена производительность сравнения строк. #4564 (alexey-milovidov)
  • Очередь распределённых DDL-запросов теперь очищается в отдельном потоке, чтобы не замедлять основной цикл обработки задач распределённых DDL-запросов. #4502 (Alex Zatelepin)
  • Когда min_bytes_to_use_direct_io установлено в 1, не каждый файл открывался в режиме O_DIRECT, потому что размер данных для чтения иногда занижался на размер одного сжатого блока. #4526 (alexey-milovidov)

Улучшения сборки/тестирования/упаковки

  • Добавлена поддержка clang-9 #4604 (alexey-milovidov)
  • Исправлены неверные инструкции __asm__ (снова) #4621 (Konstantin Podshumok)
  • Добавлена возможность задавать настройки для clickhouse-performance-test из командной строки. #4437 (alesapin)
  • Тесты Dictionaries добавлены в интеграционные тесты. #4477 (alesapin)
  • В автоматизированные тесты производительности добавлены запросы из бенчмарка на сайте. #4496 (alexey-milovidov)
  • xxhash.h отсутствует во внешнем lz4, поскольку это внутренняя деталь реализации, а его символы находятся в пространстве имен с макросом XXH_NAMESPACE. Когда lz4 используется как внешняя библиотека, xxHash тоже должен быть внешним, а зависимые компоненты должны с ним линковаться. #4495 (Orivej Desh)
  • Исправлен случай, когда агрегатную функцию quantileTiming можно было вызывать с отрицательным аргументом или аргументом с плавающей точкой (это исправляет fuzz-тест с sanitizer неопределенного поведения). #4506 (alexey-milovidov)
  • Исправлена орфографическая ошибка. #4531 (sdk2)
  • Исправлена компиляция на Mac. #4371 (Vitaly Baranov)
  • Исправления сборки для FreeBSD и различных нестандартных конфигураций сборки. #4444 (proller)

Релиз ClickHouse 19.3

Релиз ClickHouse 19.3.9.1, 2019-04-02

Исправления ошибок

  • Исправлен сбой в FULL/RIGHT JOIN при JOIN по Nullable- и не-Nullable-столбцам. #4855 (Artem Zuikov)
  • Исправлена ошибка сегментации в clickhouse-copier. #4835 (proller)
  • Исправлено чтение из столбца Array(LowCardinality) в редком случае, когда столбец содержал длинную последовательность пустых массивов. #4850 (Nikolai Kochetov)

Улучшения сборки/тестирования/упаковки

  • Добавлена возможность запускать образ clickhouse-server от имени произвольного пользователя #4753 (Mikhail f. Shiryaev)

Релиз ClickHouse 19.3.7, 2019-03-12

Исправления ошибок

  • Исправлена ошибка в #3920. Эта ошибка проявляется как случайное повреждение кэша (сообщения Unknown codec family code, Cannot seek through file) и segfault. Эта ошибка впервые появилась в версии 19.1 и присутствует в версиях вплоть до 19.1.10 и 19.3.6. #4623 (alexey-milovidov)

Релиз ClickHouse 19.3.6, 2019-03-02

Исправления ошибок

  • Если в пуле потоков более 1000 потоков, при завершении потока может вызываться std::terminate. Azat Khuzhin #4485 #4505 (alexey-milovidov)
  • Теперь можно создавать таблицы ReplicatedMergeTree*, где у столбцов есть комментарии, но нет значений по умолчанию, а также таблицы, где у столбцов есть кодеки, но нет комментариев и значений по умолчанию. Также исправлено сравнение кодеков. #4523 (alesapin)
  • Исправлен сбой при JOIN с Array или Tuple. #4552 (Artem Zuikov)
  • Исправлен сбой в clickhouse-copier с сообщением ThreadStatus not created. #4540 (Artem Zuikov)
  • Исправлено зависание при завершении работы сервера, если использовались распределённые DDL-запросы. #4472 (Alex Zatelepin)
  • В сообщении об ошибке при разборе текстового формата для столбцов с номером больше 10 выводились неверные номера столбцов. #4484 (alexey-milovidov)

Улучшения сборки/тестирования/упаковки

  • Исправлена сборка при включенном AVX. #4527 (alexey-milovidov)
  • Включен расширенный учет и учет IO на основе заведомо корректной версии, а не ядра, на котором выполняется сборка. #4541 (nvartolomei)
  • Теперь можно пропускать установку core_dump.size_limit; если задать ограничение не удается, выдается предупреждение вместо того, чтобы сгенерировать исключение. #4473 (proller)
  • Удалены спецификаторы inline у void readBinary(...) в Field.cpp. Также объединены избыточные блоки namespace DB. #4530 (hcz)

Релиз ClickHouse 19.3.5, 2019-02-21

Исправления ошибок

  • Исправлена ошибка, связанная с обработкой крупных HTTP-запросов на вставку. #4454 (alesapin)
  • Исправлено нарушение обратной совместимости со старыми версиями из-за неверной реализации настройки send_logs_level. #4445 (alexey-milovidov)
  • Исправлено нарушение обратной совместимости табличной функции remote, возникшее из-за комментариев к столбцам. #4446 (alexey-milovidov)

Релиз ClickHouse 19.3.4, 2019-02-16

Улучшения

  • Размер индекса таблицы не учитывался в лимитах памяти при выполнении запроса ATTACH TABLE. Устранена ситуация, при которой таблицу нельзя было присоединить обратно после отсоединения. #4396 (alexey-milovidov)
  • Немного увеличен лимит максимального размера строки и массива, получаемых из ZooKeeper. Это позволяет продолжить работу при увеличенном значении CLIENT_JVMFLAGS=-Djute.maxbuffer=... в ZooKeeper. #4398 (alexey-milovidov)
  • Теперь можно восстанавливать заброшенную реплику, даже если в её очереди уже очень много узлов. #4399 (alexey-milovidov)
  • Добавлен обязательный аргумент для индекса SET (максимальное число хранимых строк). #4386 (Nikita Vasilev)

Исправления ошибок

  • Исправлен результат WITH ROLLUP при группировке по одному ключу LowCardinality. #4384 (Nikolai Kochetov)
  • Исправлена ошибка в индексе set (гранула отбрасывалась, если содержала более max_rows строк). #4386 (Nikita Vasilev)
  • Много исправлений, связанных со сборкой под FreeBSD. #4397 (proller)
  • Исправлена подстановка псевдонимов в запросах с подзапросом, содержащим тот же псевдоним (проблема #4110). #4351 (Artem Zuikov)

Улучшения сборки/тестирования/упаковки

  • Добавлена возможность запускать clickhouse-server в Docker-образе для тестов без сохранения состояния. #4347 (Vasily Nemkov)

Релиз ClickHouse 19.3.3, 2019-02-13

Новые возможности

  • Добавлен оператор KILL MUTATION, позволяющий удалять мутации, которые по каким-либо причинам зависли. Для упрощения устранения неполадок в таблицу system.mutations добавлены поля latest_failed_part, latest_fail_time, latest_fail_reason. #4287 (Alex Zatelepin)
  • Добавлена агрегатная функция entropy, вычисляющая энтропию Шеннона. #4238 (Quid37)
  • Добавлена возможность отправлять на сервер запросы INSERT INTO tbl VALUES (.... без разделения на части query и data. #4301 (alesapin)
  • Добавлена универсальная реализация функции arrayWithConstant. #4322 (alexey-milovidov)
  • Реализован оператор сравнения NOT BETWEEN. #4228 (Dmitry Naumov)
  • Реализована функция sumMapFiltered, позволяющая ограничить число ключей, для которых sumMap суммирует значения. #4129 (Léo Ercolanelli)
  • Добавлена поддержка типов Nullable в табличной функции mysql. #4198 (Emmanuel Donin de Rosière)
  • Добавлена поддержка произвольных константных выражений в LIMIT. #4246 (k3box)
  • Добавлена агрегатная функция topKWeighted, принимающая дополнительный аргумент веса (unsigned integer). #4245 (Andrew Golman)
  • StorageJoin теперь поддерживает настройку join_any_take_last_row, которая позволяет перезаписывать существующие значения для одного и того же ключа. #3973 (Amos Bird
  • Добавлена функция toStartOfInterval. #4304 (Vitaly Baranov)
  • Добавлен формат RowBinaryWithNamesAndTypes. #4200 (Oleg V. Kozlyuk)
  • Добавлены типы данных IPv4 и IPv6. Реализованы более эффективные версии функций IPv*. #3669 (Vasily Nemkov)
  • Добавлена функция toStartOfTenMinutes(). #4298 (Vitaly Baranov)
  • Добавлен формат вывода Protobuf. #4005 #4158 (Vitaly Baranov)
  • Добавлена поддержка brotli в HTTP-интерфейсе для импорта данных (INSERTs). #4235 (Mikhail)
  • Добавлены подсказки на случай, если пользователь допускает опечатку в имени функции или типа в клиенте командной строки. #4239 (Danila Kutenin)
  • В заголовок HTTP-ответа сервера добавлен Query-Id. #4231 (Mikhail)

Экспериментальные возможности

  • Добавлены индексы для пропуска данных minmax и set для семейства движков таблиц MergeTree. #4143 (Nikita Vasilev)
  • Добавлено преобразование CROSS JOIN в INNER JOIN, если это возможно. #4221 #4266 (Artem Zuikov)

Исправления ошибок

  • Исправлена ошибка Not found column для дублирующихся столбцов в разделе JOIN ON. #4279 (Artem Zuikov)
  • Команда START REPLICATED SENDS теперь запускает реплицированные отправки. #4229 (nvartolomei)
  • Исправлено выполнение агрегатных функций, принимающих аргументы Array(LowCardinality). #4055 (KochetovNicolai)
  • Исправлено некорректное поведение при выполнении запроса INSERT ... SELECT ... FROM file(...), если файл имеет формат CSVWithNames или TSVWIthNames, а первая строка данных отсутствует. #4297 (alexey-milovidov)
  • Исправлен сбой при перезагрузке словаря, если словарь недоступен. Эта ошибка появилась в версии 19.1.6. #4188 (proller)
  • Исправлена ошибка в ALL JOIN при наличии дубликатов в правой таблице. #4184 (Artem Zuikov)
  • Исправлены ошибка сегментации при use_uncompressed_cache=1 и исключение из-за неверного несжатого размера. Эта ошибка появилась в 19.1.6. #4186 (alesapin)
  • Исправлена ошибка compile_expressions при сравнении дат большого диапазона (больше int16). #4341 (alesapin)
  • Исправлен бесконечный цикл при чтении из табличной функции numbers(0). #4280 (alexey-milovidov)
  • Временно отключена оптимизация предикатов для ORDER BY. #3890 (Winter Zhang)
  • Исправлена ошибка Illegal instruction, возникавшая при использовании функций base64 на старых CPU. Эта ошибка воспроизводилась только в случае, если ClickHouse был скомпилирован с gcc-8. #4275 (alexey-milovidov)
  • Исправлена ошибка No message received, возникавшая при работе с PostgreSQL ODBC Driver через TLS‑соединение. Также исправлен segfault при использовании MySQL ODBC Driver. #4170 (alexey-milovidov)
  • Исправлен некорректный результат при использовании аргументов Date и DateTime в ветвях условного оператора (функции if). Добавлен общий случай для функции if. #4243 (alexey-milovidov)
  • Словари ClickHouse теперь загружаются внутри процесса clickhouse. #4166 (alexey-milovidov)
  • Исправлен дедлок при повторном выполнении SELECT из таблицы с движком File после ошибки No such file or directory. #4161 (alexey-milovidov)
  • Исправлено состояние гонки, из-за которого при выборке из system.tables могла возникать ошибка table does not exist. #4313 (alexey-milovidov)
  • clickhouse-client может аварийно завершаться при выходе во время загрузки данных для подсказок в командной строке, если был запущен в интерактивном режиме. #4317 (alexey-milovidov)
  • Исправлена ошибка, из-за которой выполнение мутаций, содержащих операторы IN, приводило к некорректным результатам. #4099 (Alex Zatelepin)
  • Исправлена ошибка: если существовала база данных с движком Dictionary, все словари принудительно загружались при запуске сервера, и если среди них был словарь с источником ClickHouse на localhost, такой словарь не мог загрузиться. #4255 (alexey-milovidov)
  • Исправлена ошибка при повторной попытке создать системные журналы при остановке сервера. #4254 (alexey-milovidov)
  • Исправлен возврат правильного типа и корректная обработка блокировок в функции joinGet. #4153 (Amos Bird)
  • Добавлена функция sumMapWithOverflow. #4151 (Léo Ercolanelli)
  • Исправлен segfault при использовании allow_experimental_multiple_joins_emulation. 52de2c (Artem Zuikov)
  • Исправлена ошибка, связанная с некорректным сравнением Date и DateTime. #4237 (valexey)
  • Исправлен fuzz-тест при использовании санитайзера undefined behavior: добавлена проверка типа параметра для семейства функций quantile*Weighted. #4145 (alexey-milovidov)
  • Исправлено редкое состояние гонки, из-за которого при удалении старых частей данных могла возникать ошибка File not found. #4378 (alexey-milovidov)
  • Исправлен пакет установки, в котором отсутствовал /etc/clickhouse-server/config.xml. #4343 (proller)

Улучшение сборки, тестирования и упаковки

  • Пакет Debian: ссылка /etc/clickhouse-server/preprocessed исправлена в соответствии с конфигурацией. #4205 (proller)
  • Различные исправления сборки для FreeBSD. #4225 (proller)
  • Добавлена возможность создавать, заполнять и удалять таблицы в perftest. #4220 (alesapin)
  • Добавлен скрипт для проверки дублирующихся include. #4326 (alexey-milovidov)
  • Добавлена возможность запускать запросы по индексу в performance test. #4264 (alesapin)
  • Рекомендуется устанавливать пакет с отладочными символами. #4274 (alexey-milovidov)
  • Рефакторинг performance-test. Улучшены логирование и обработка сигналов. #4171 (alesapin)
  • Добавлена документация к анонимизированным датасетам Yandex.Metrica. #4164 (alesapin)
  • Добавлен инструмент для преобразования старой части с месячной партицией в формат с пользовательскими партициями. #4195 (Alex Zatelepin)
  • Добавлена документация о двух датасетах в S3. #4144 (alesapin)
  • Добавлен скрипт, который создаёт changelog из описаний pull request. #4169 #4173 (KochetovNicolai) (KochetovNicolai)
  • Добавлен модуль Puppet для ClickHouse. #4182 (Maxim Fedotov)
  • Добавлена документация для группы недокументированных функций. #4168 (Winter Zhang)
  • Исправления сборки для ARM. #4210#4306 #4291 (proller) (proller)
  • Тесты словарей теперь можно запускать из ctest. #4189 (proller)
  • Теперь /etc/ssl используется как каталог с SSL-сертификатами по умолчанию. #4167 (alexey-milovidov)
  • Добавлена проверка наличия инструкций SSE и AVX при запуске. #4234 (Igr)
  • Init-скрипт будет ждать запуска сервера. #4281 (proller)

Обратно несовместимые изменения

  • Удалена настройка allow_experimental_low_cardinality_type. Типы данных LowCardinality готовы для использования в продакшне. #4323 (alexey-milovidov)
  • Уменьшен размер кэша меток и кэша несжатых данных в соответствии с объёмом доступной памяти. #4240 (Lopatin Konstantin
  • В запрос CREATE TABLE добавлено ключевое слово INDEX. Столбец с именем index должен быть заключён в обратные кавычки или двойные кавычки: `index`. #4143 (Nikita Vasilev)
  • sumMap теперь повышает тип результата вместо переполнения. Прежнее поведение sumMap можно получить с помощью функции sumMapWithOverflow. #4151 (Léo Ercolanelli)

Повышение производительности

  • std::sort заменён на pdqsort для запросов без LIMIT. #4236 (Evgenii Pravda)
  • Теперь сервер повторно использует потоки из глобального пула потоков. Это повышает производительность в некоторых редких случаях. #4150 (alexey-milovidov)

Улучшения

  • Реализована поддержка AIO для FreeBSD. #4305 (urgordeadbeef)
  • SELECT * FROM a JOIN b USING a, b теперь возвращает столбцы a и b только из левой таблицы. #4141 (Artem Zuikov)
  • Разрешено использовать опцию -C клиента так же, как опцию -c. #4232 (syominsergey)
  • Теперь опция --password, используемая без значения, запрашивает пароль из stdin. #4230 (BSD_Conqueror)
  • Добавлена подсветка неэкранированных метасимволов в строковых литералах, содержащих выражения LIKE или регулярные выражения. #4327 (alexey-milovidov)
  • Добавлена отмена HTTP-запросов только на чтение, если клиентский сокет закрывается. #4213 (nvartolomei)
  • Теперь сервер сообщает о прогрессе, чтобы поддерживать клиентские соединения активными. #4215 (Ivan)
  • Немного улучшено сообщение с причиной для запроса OPTIMIZE при включенной настройке optimize_throw_if_noop. #4294 (alexey-milovidov)
  • Добавлена поддержка опции --version для ClickHouse server. #4251 (Lopatin Konstantin)
  • Добавлена опция --help/-h для clickhouse-server. #4233 (Yuriy Baranov)
  • Добавлена поддержка скалярных подзапросов с результатом в виде состояния aggregate function. #4348 (Nikolai Kochetov)
  • Улучшено время остановки сервера и ожидания ALTER. #4372 (alexey-milovidov)
  • В system.replicas добавлена информация о настройке replicated_can_become_leader, а также добавлен logging, если реплика не будет пытаться стать leader. #4379 (Alex Zatelepin)

Релиз ClickHouse 19.1

Релиз ClickHouse 19.1.14, 2019-03-14

  • Исправлена ошибка Column ... queried more than once, которая в редких случаях могла возникать, если параметр asterisk_left_columns_only был установлен в 1 при использовании GLOBAL JOIN с SELECT *. В версии 19.3 и новее этой проблемы нет. 6bac7d8d (Artem Zuikov)

Релиз ClickHouse 19.1.13, 2019-03-12

Этот релиз содержит тот же набор исправлений, что и 19.3.7.

Релиз ClickHouse 19.1.10, 2019-03-03

Этот релиз содержит тот же набор исправлений, что и 19.3.6.

Релиз ClickHouse 19.1

Релиз ClickHouse 19.1.9, 2019-02-21

Исправления ошибок

  • Исправлена потеря обратной совместимости со старыми версиями из-за некорректной реализации настройки send_logs_level. #4445 (alexey-milovidov)
  • Исправлена потеря обратной совместимости табличной функции remote, возникшая после добавления комментариев к столбцам. #4446 (alexey-milovidov)

Релиз ClickHouse 19.1.8, 2019-02-16

Исправления ошибок

  • Исправлена установка пакета в случае отсутствия файла /etc/clickhouse-server/config.xml. #4343 (proller)

Релиз ClickHouse 19.1

Релиз ClickHouse 19.1.7, 2019-02-15

Исправления ошибок

  • В функции joinGet исправлены возврат правильного типа и обработка блокировок. #4153 (Amos Bird)
  • Исправлена ошибка при повторной попытке создать системные журналы во время остановки сервера. #4254 (alexey-milovidov)
  • Исправлена ошибка: если существует база данных с движком Dictionary, все словари принудительно загружаются при запуске сервера, и если среди них есть словарь с источником ClickHouse на localhost, такой словарь не может загрузиться. #4255 (alexey-milovidov)
  • Исправлена ошибка, из-за которой выполнение мутаций, содержащих операторы IN, давало некорректные результаты. #4099 (Alex Zatelepin)
  • clickhouse-client может аварийно завершаться с segfault при завершении работы во время загрузки данных для подсказок командной строки, если он был запущен в интерактивном режиме. #4317 (alexey-milovidov)
  • Исправлено состояние гонки, из-за которого при выборке из system.tables могла возникать ошибка table does not exist. #4313 (alexey-milovidov)
  • Исправлена взаимоблокировка при повторном выполнении SELECT из таблицы с движком File после ошибки No such file or directory. #4161 (alexey-milovidov)
  • Исправлена проблема: локальные словари ClickHouse загружаются через TCP, хотя должны загружаться внутри процесса. #4166 (alexey-milovidov)
  • Исправлена ошибка No message received, возникавшая при работе с PostgreSQL ODBC Driver через TLS‑соединение. Также исправлен segfault при использовании MySQL ODBC Driver. #4170 (alexey-milovidov)
  • Временно отключена оптимизация предикатов для ORDER BY. #3890 (Winter Zhang)
  • Исправлен бесконечный цикл при выборке из табличной функции numbers(0). #4280 (alexey-milovidov)
  • Исправлена ошибка в compile_expressions, связанная со сравнением больших дат (больше int16). #4341 (alesapin)
  • Исправлены сбой сегментации при uncompressed_cache=1 и исключение из-за неверного несжатого размера. #4186 (alesapin)
  • Исправлена ошибка в ALL JOIN при наличии дубликатов в правой таблице. #4184 (Artem Zuikov)
  • Исправлено некорректное поведение при выполнении запроса INSERT ... SELECT ... FROM file(...), если у файла формат CSVWithNames или TSVWIthNames и отсутствует первая строка данных. #4297 (alexey-milovidov)
  • Исправлено выполнение агрегатных функций для аргументов Array(LowCardinality). #4055 (KochetovNicolai)
  • Пакет Debian: ссылка /etc/clickhouse-server/preprocessed исправлена в соответствии с конфигурацией. #4205 (proller)
  • Исправлен fuzz-тест при использовании санитайзера неопределенного поведения: добавлена проверка типа параметра для семейства функций quantile*Weighted. #4145 (alexey-milovidov)
  • Сделать так, чтобы команда START REPLICATED SENDS запускала реплицированные передачи. #4229 (nvartolomei)
  • Исправлена ошибка Not found column для дублирующихся столбцов в разделе JOIN ON. #4279 (Artem Zuikov)
  • Теперь каталогом SSL-сертификатов по умолчанию используется /etc/ssl. #4167 (alexey-milovidov)
  • Исправлен сбой при перезагрузке словаря, когда он недоступен. #4188 (proller)
  • Исправлена ошибка, из-за которой Date и DateTime сравнивались некорректно. #4237 (valexey)
  • Исправлен некорректный результат при использовании аргументов Date и DateTime в ветвях условного оператора (функции if). Добавлен общий случай для функции if. #4243 (alexey-milovidov)

Релиз ClickHouse 19.1.6, 2019-01-24

Новые возможности

  • Пользовательские кодеки сжатия для отдельных столбцов таблиц. #3899 #4111 (alesapin, Winter Zhang, Anatoly)
  • Добавлен кодек сжатия Delta. #4052 (alesapin)
  • Теперь можно изменять кодеки сжатия с помощью ALTER. #4054 (alesapin)
  • Добавлены функции left, right, trim, ltrim, rtrim, timestampadd, timestampsub для совместимости со стандартом SQL. #3826 (Ivan Blinkov)
  • Добавлена поддержка записи в таблицы HDFS и табличную функцию hdfs. #4084 (alesapin)
  • Добавлены функции для поиска нескольких константных строк в большой строке: multiPosition, multiSearch, firstMatch, а также варианты с -UTF8, -CaseInsensitive и -CaseInsensitiveUTF8. #4053 (Danila Kutenin)
  • Отсечение неиспользуемых сегментов, если запрос SELECT фильтрует по ключу сегментирования (настройка optimize_skip_unused_shards). #3851 (Gleb Kanterov, Ivan)
  • Движок Kafka теперь может игнорировать некоторое количество ошибок разбора на блок. #4094 (Ivan)
  • Добавлена поддержка оценки многоклассовых моделей CatBoost. Функция modelEvaluate возвращает кортеж с сырыми предсказаниями по каждому классу для многоклассовых моделей. libcatboostmodel.so должен быть собран с #607. #3959 (KochetovNicolai)
  • Добавлены функции filesystemAvailable, filesystemFree, filesystemCapacity. #4097 (Boris Granveaud)
  • Добавлены хеш-функции xxHash64 и xxHash32. #3905 (filimonov)
  • Добавлена хеш-функция gccMurmurHash (вариант Murmur hash для GCC), которая использует тот же seed хеша, что и gcc #4000 (sundyli)
  • Добавлены хеш-функции javaHash, hiveHash. #3811 (shangshujie365)
  • Добавлена табличная функция remoteSecure. Функция работает как remote, но использует защищённое соединение. #4088 (proller)

Экспериментальные возможности

  • Добавлена эмуляция нескольких операций JOIN (настройка allow_experimental_multiple_joins_emulation). #3946 (Artem Zuikov)

Исправления ошибок

  • Параметр compiled_expression_cache_size теперь по умолчанию ограничен, чтобы снизить потребление памяти. #4041 (alesapin)
  • Исправлена ошибка, приводившая к зависанию потоков, выполняющих ALTER для таблиц Replicated, а также потока, обновляющего конфигурацию из ZooKeeper. #2947 #3891 #3934 (Alex Zatelepin)
  • Исправлено состояние гонки при выполнении распределённой задачи ALTER. Из-за этого состояния гонки несколько реплик пытались выполнить задачу, и все реплики, кроме одной, завершались с ошибкой ZooKeeper. #3904 (Alex Zatelepin)
  • Исправлена ошибка, из-за которой элементы конфигурации from_zk не обновлялись после тайм-аута запроса к ZooKeeper. #2947 #3947 (Alex Zatelepin)
  • Исправлена ошибка с неправильным префиксом для масок подсети IPv4. #3945 (alesapin)
  • Устранён сбой (std::terminate) в редких случаях, когда не удаётся создать новый поток из-за нехватки ресурсов. #3956 (alexey-milovidov)
  • Исправлена ошибка при выполнении табличной функции remote, связанная с использованием неверных ограничений в getStructureOfRemoteTable. #4009 (alesapin)
  • Исправлена утечка netlink-сокетов. Они помещались в пул, где никогда не удалялись, а новые сокеты создавались при запуске нового потока, когда все имеющиеся сокеты были заняты. #4017 (Alex Zatelepin)
  • Исправлена ошибка, из-за которой каталог /proc/self/fd закрывался до того, как из /proc успевали прочитать все файловые дескрипторы, после форка подпроцесса odbc-bridge. #4120 (alesapin)
  • Исправлено монотонное преобразование из String в UInt при использовании String в первичном ключе. #3870 (Winter Zhang)
  • Исправлена ошибка в вычислении монотонности функции преобразования в целые числа. #3921 (alexey-milovidov)
  • Исправлен segfault в функциях arrayEnumerateUniq, arrayEnumerateDense при передаче некоторых некорректных аргументов. #3909 (alexey-milovidov)
  • Исправлено UB в StorageMerge. #3910 (Amos Bird)
  • Исправлен segfault в функциях addDays, subtractDays. #3913 (alexey-milovidov)
  • Исправлена ошибка: функции round, floor, trunc, ceil могли возвращать некорректный результат при работе с целочисленным аргументом и большим отрицательным значением scale. #3914 (alexey-milovidov)
  • Исправлена ошибка, вызванная ‘kill query sync’, которая приводила к созданию core dump. #3916 (muVulDeePecker)
  • Исправлена ошибка, из-за которой возникала длительная задержка после опустошения очереди репликации. #3928 #3932 (alesapin)
  • Исправлено чрезмерное использование памяти при вставке в таблицу с первичным ключом LowCardinality. #3955 (KochetovNicolai)
  • Исправлена сериализация LowCardinality для формата Native в случае пустых массивов. #3907 #4011 (KochetovNicolai)
  • Исправлен некорректный результат при использовании distinct по одному числовому столбцу LowCardinality. #3895 #4012 (KochetovNicolai)
  • Исправлена специализированная агрегация с ключом LowCardinality, когда включена настройка compile. #3886 (KochetovNicolai)
  • Исправлена передача имени пользователя и пароля при запросах к реплицируемым таблицам. #3957 (alesapin) (小路)
  • Исправлено крайне редкое состояние гонки, которое могло возникать при получении списка таблиц в базе данных Dictionary во время перезагрузки словарей. #3970 (alexey-milovidov)
  • Исправлен некорректный результат при использовании HAVING с ROLLUP или CUBE. #3756 #3837 (Sam Chou)
  • Исправлены псевдонимы столбцов для запросов с синтаксисом JOIN ON и distributed таблиц. #3980 (Winter Zhang)
  • Исправлена ошибка во внутренней реализации quantileTDigest (обнаружена Артёмом Вахрушевым). Эта ошибка никогда не возникает в ClickHouse и была актуальна только для тех, кто использует кодовую базу ClickHouse напрямую как библиотеку. #3935 (alexey-milovidov)

Улучшения

  • Поддержка IF NOT EXISTS в операторах ALTER TABLE ADD COLUMN, а также IF EXISTS в DROP/MODIFY/CLEAR/COMMENT COLUMN. #3900 (Boris Granveaud)
  • Функция parseDateTimeBestEffort: добавлена поддержка форматов DD.MM.YYYY, DD.MM.YY, DD-MM-YYYY, DD-Mon-YYYY, DD/Month/YYYY и подобных. #3922 (alexey-milovidov)
  • CapnProtoInputStream теперь поддерживает нерегулярные структуры. #4063 (Odin Hultgren Van Der Horst)
  • Повышено удобство использования: добавлена проверка того, что процесс сервера запускается владельцем каталога данных. Запуск сервера от root запрещён, если данные принадлежат пользователю, отличному от root. #3785 (sergey-v-galtsev)
  • Улучшена логика проверки обязательных столбцов при анализе запросов с JOIN. #3930 (Artem Zuikov)
  • Уменьшено число соединений при большом количестве Distributed tables на одном сервере. #3726 (Winter Zhang)
  • Добавлена поддержка итоговой строки для запроса WITH TOTALS в ODBC Driver. #3836 (Maksim Koritckiy)
  • Разрешено использовать Enum как целые числа внутри функции if. #3875 (Ivan)
  • Добавлена настройка low_cardinality_allow_in_native_format. Если она отключена, тип LowCadrinality не используется в формате Native. #3879 (KochetovNicolai)
  • Из кэша compiled expressions удалены некоторые избыточные объекты, чтобы снизить использование памяти. #4042 (alesapin)
  • Добавлена проверка того, что запрос SET send_logs_level = 'value' принимает допустимое значение. #3873 (Sabyanin Maxim)
  • Исправлена проверка типов данных в функциях преобразования типов. #3896 (Winter Zhang)

Повышение производительности

  • Добавлена настройка MergeTree use_minimalistic_part_header_in_zookeeper. Если она включена, таблицы Replicated будут хранить метаданные компактной части в одном znode для части. Это может значительно уменьшить размер снимка ZooKeeper (особенно если в таблицах много столбцов). Обратите внимание: после включения этой настройки вы не сможете перейти на более раннюю версию, которая её не поддерживает. #3960 (Alex Zatelepin)
  • Добавлена реализация с использованием DFA для функций sequenceMatch и sequenceCount, если шаблон регулярного выражения не содержит временных условий. #4004 (Léo Ercolanelli)
  • Улучшена производительность сериализации целых чисел. #3968 (Amos Bird)
  • Для PODArray добавлено заполнение нулями слева, чтобы элемент с индексом -1 всегда был допустимым и обнулённым. Это используется для вычисления смещений без ветвлений. #3920 (Amos Bird)
  • Возвращена предыдущая версия jemalloc, так как она приводила к снижению производительности. #4018 (alexey-milovidov)

Обратно несовместимые изменения

  • Удалена недокументированная возможность ALTER MODIFY PRIMARY KEY, поскольку её заменила команда ALTER MODIFY ORDER BY. #3887 (Alex Zatelepin)
  • Удалена функция shardByHash. #3833 (alexey-milovidov)
  • Запрещено использовать скалярные подзапросы, возвращающие результат типа AggregateFunction. #3865 (Ivan)

Улучшения сборки, тестирования и упаковки

  • Добавлена поддержка сборки для PowerPC (ppc64le). #4132 (Danila Kutenin)
  • Функциональные тесты с сохранением состояния запускаются на общедоступном наборе данных. #3969 (alexey-milovidov)
  • Исправлена ошибка, из-за которой server не мог запуститься и выводил сообщение bash: /usr/bin/clickhouse-extract-from-config: Operation not permitted в Docker или systemd-nspawn. #4136 (alexey-milovidov)
  • Обновлена библиотека rdkafka до v1.0.0-RC5. Вместо низкоуровневого интерфейса на C использован cppkafka. #4025 (Ivan)
  • Обновлена библиотека mariadb-client. Исправлена одна из проблем, выявленных UBSan. #3924 (alexey-milovidov)
  • Некоторые исправления в сборках UBSan. #3926 #3021 #3948 (alexey-milovidov)
  • Добавлены прогоны тестов для каждого коммита в сборке с UBSan.
  • Добавлены запуски статического анализатора PVS-Studio для каждого коммита.
  • Исправлены ошибки, выявленные с помощью PVS-Studio. #4013 (alexey-milovidov)
  • Исправлены проблемы с совместимостью glibc. #4100 (alexey-milovidov)
  • Docker-образы переведены на 18.10, добавлен файл совместимости для glibc >= 2.28 #3965 (alesapin)
  • Добавлена переменная окружения для случаев, когда пользователь не хочет выполнять chown для каталогов в Docker-образе сервера. #3967 (alesapin)
  • В clang включили большинство предупреждений из -Weverything. Включили -Wpedantic. #3986 (alexey-milovidov)
  • Добавлено ещё несколько предупреждений, доступных только в Clang 8. #3993 (alexey-milovidov)
  • При динамической компоновке используйте libLLVM, а не отдельные библиотеки LLVM. #3989 (Orivej Desh)
  • Добавлены переменные санитайзера для тестовых образов. #4072 (alesapin)
  • Пакет Debian clickhouse-server будет рекомендовать пакет libcap2-bin для использования инструмента setcap при назначении привилегий. Это необязательно. #4093 (alexey-milovidov)
  • Ускорена компиляция, исправлены директивы include. #3898 (proller)
  • Добавлены тесты производительности хеш-функций. #3918 (filimonov)
  • Исправлены циклические зависимости библиотек. #3958 (proller)
  • Улучшена компиляция в условиях ограниченной доступной памяти. #4030 (proller)
  • Добавлен тестовый скрипт для воспроизведения падения производительности в jemalloc. #4036 (alexey-milovidov)
  • Исправлены опечатки в комментариях и строковых литералах в dbms. #4122 (maiha)
  • Исправлены опечатки в комментариях. #4089 (Evgenii Pravda)
Последнее изменение 10 июня 2026 г.