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

Список изменений за 2019 год

Релиз ClickHouse 19.17

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

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

  • Исправлено потенциальное переполнение буфера в функции decompress. Злоумышленник мог передать специально сформированные сжатые данные, что приводило к чтению за пределами буфера. Проблема была обнаружена Эльдаром Зайтовым из команды информационной безопасности 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 для распределённой таблицы теперь сначала переименовывает каталог с вставленными данными, а затем отправляет их на шарды. Это исправляет проблему, возникавшую при последовательных переименованиях tableA->tableB, tableC->tableA. #8306 (tavplubix)
  • Внешние словари range_hashed, создаваемые с помощью DDL-запросов, теперь поддерживают диапазоны произвольных числовых типов. #8275 (alesapin)
  • Исправлена работа запроса INSERT INTO table SELECT ... FROM mysql(...) с табличной функцией mysql. #8234 (tavplubix)
  • Исправлена ошибка сегментации в INSERT INTO TABLE FUNCTION file() при вставке в несуществующий файл. Теперь в этом случае файл будет создан, после чего вставка будет обработана. #8177 (Olga Khvostikova)
  • Исправлена ошибка в функции bitmapAnd при пересечении агрегированного bitmap и скалярного bitmap. #8082 (Yue Huang)
  • Исправлена ошибка сегментации памяти при использовании запроса 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 для распределённой таблицы, если существует более двух локальных таблиц в шарде. #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)
  • Избежать разыменования нулевого указателя после "Unknown packet X from server" #8071 (Azat Khuzhin)
  • Восстановлена поддержка всех локалей ICU, добавлена возможность применять правила сравнения (collations) для константных выражений и добавлено название языка в таблицу 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)

Экспериментальная функциональность

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

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

  • Исправлен некорректный парсинг чисел с плавающей точкой в Values #7817 #7870 (tavplubix)
  • Исправлена редкая взаимоблокировка, которая может возникать при включённом trace_log. #7838 (filimonov)
  • Предотвращено дублирование сообщений при записи в таблицу Kafka, если для неё созданы материализованные представления, читающие из этой таблицы #7265 (Ivan)
  • Поддержка Array(LowCardinality(Nullable(String))) в операторе IN. Исправляет #7364 #7366 (achimbab)
  • Добавлена поддержка типов источников данных SQL_TINYINT и SQL_BIGINT, а также исправлена обработка типа источника данных SQL_FLOAT в ODBC Bridge. #7491 (Denis Glazachev)
  • Исправлена агрегация (avg и квантили) над пустыми десятичными столбцами #7431 (Andrey Konyaev)
  • Исправлена операция INSERT в таблицу с движком Distributed с колонками MATERIALIZED #7377 (Azat Khuzhin)
  • Обеспечена корректная работа команды MOVE PARTITION, если некоторые части раздела уже находятся на целевом диске или томе #7434 (Vladimir Chebotarev)
  • Исправлена ошибка, из-за которой при мутациях в ReplicatedMergeTree в конфигурациях с несколькими дисками не удавалось создать жёсткие ссылки (hardlinks). #7558 (Vladimir Chebotarev)
  • Исправлена ошибка мутации в MergeTree, когда часть целиком остается неизменной, а более подходящее место для неё находится на другом диске #7602 (Vladimir Chebotarev)
  • Исправлена ошибка, из-за которой keep_free_space_ratio не считывался из конфигурации дисков #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)
  • Исправлена ошибка в мутациях с предикатом, в котором используются действия, требующие контекста (например, функции для работы с 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 при соединении по выражению с использованием RIGHT или FULL JOIN. #7641 (Artem Zuikov)
  • Очередная попытка устранить бесконечный цикл в формате PrettySpace #7591 (Olga Khvostikova)
  • Исправлена ошибка в функции concat, возникавшая, когда все аргументы были типа FixedString одного и того же размера. #7635 (alesapin)
  • Исправлено исключение при использовании одного аргумента при определении хранилищ S3, URL и HDFS. #7618 (Vladimir Chebotarev)
  • Исправлена область действия InterpreterSelectQuery для представлений с запросом #7601 (Azat Khuzhin)

Улучшения

  • Столбцы Nullable распознаются, и значения NULL корректно обрабатываются в ODBC-bridge #7402 (Vasily Nemkov)
  • Текущий пакет для распределённой отправки теперь записывается атомарно #7600 (Azat Khuzhin)
  • Теперь выбрасывается исключение, если не удаётся определить таблицу для имени столбца в запросе. #7358 (Artem Zuikov)
  • Добавлена настройка merge_max_block_size в MergeTreeSettings #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)

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

  • Добавлена поддержка кросс-компиляции под архитектуру CPU 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) По специальному запросу Altinity это исправление было бэкпортировано в версию 19.16.

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

  • Исправлена несовместимость распределённых подзапросов со старыми версиями ClickHouse. Исправляет #7851 (tabplubix)
  • При выполнении запроса CREATE теперь выполняется свёртка константных выражений в аргументах движка хранения. Пустое имя базы данных заменяется на текущую. Исправляет #6508, #3492. Также исправлена проверка локального адреса в ClickHouseDictionarySource. #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 для управления поведением идемпотентных вставок в таблицы с материализованными представлениями. Эта новая возможность была добавлена в исправляющий релиз по специальному запросу Altinity. #9070 (urykhy)

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

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

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

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

  • Добавлена функция uniqCombined64() для вычисления кардинальности множества, превышающей UINT_MAX. #7213, #7222 (Azat Khuzhin)
  • Добавлена поддержка индексов Bloom-фильтра для столбцов типа 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 для столбцов типа Bitmap. #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 (issue #7109). #7289 (Zhichang Yu)
  • Для материализованных представлений коммит в 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 в методе LIVE VIEW getHeader(). #7271 (vzakaznikov)

Улучшение

  • Добавлено сообщение на случай ожидания до значения queue_wait_max_ms. #7390 (Azat Khuzhin)
  • Настройку s3_min_upload_part_size можно задавать на уровне таблицы. #7059 (Vladimir Chebotarev)
  • Добавлена проверка TTL в StorageFactory. #7304 (sundyli)
  • Сжатие блоков из левой части в частичном merge join (оптимизация). #7122 (Artem Zuikov)
  • Запрещены недетерминированные функции в мутациях движков реплицируемых таблиц, так как это может приводить к несогласованности данных между репликами. #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. Теперь можно использовать вариант «меньше или равно», а также строго «больше» и «меньше» для колонки ASOF в синтаксисе ON. #7282 (Artem Zuikov)
  • Оптимизирован частичный merge join. #7070 (Artem Zuikov)
  • Не использовать более 98 КБ памяти в функциях uniqCombined. #7236, #7270 (Azat Khuzhin)
  • Сбрасывать на диск части правой таблицы соединения в PartialMergeJoin (если недостаточно памяти). Загружать данные обратно по мере необходимости. #7186 (Artem Zuikov)

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

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

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

  • Отключить некоторые contrib-модули для кросс-компиляции под macOS. #7101 (Ivan)
  • Добавлена отсутствующая линковка с PocoXML для clickhouse_common_io. #7200 (Azat Khuzhin)
  • Разрешить передавать несколько аргументов фильтра тестов в clickhouse-test. #7226 (Alexander Kuzmenkov)
  • Добавлена поддержка musl и jemalloc для ARM. #7300 (Amos Bird)
  • Добавлен параметр --client-option в утилиту clickhouse-test для передачи клиенту дополнительных опций. #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)
  • Добавлена сборка с MemorySanitizer в CI. #7066 (Alexander Kuzmenkov)
  • Исключено использование неинициализированных значений в MetricsTransmitter. #7158 (Azat Khuzhin)
  • Исправлены некоторые проблемы в Fields, выявленные 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 для Dictionaries. #7155 (alesapin)
  • Парсер для DDL словарей без какой-либо семантики. #7209 (alesapin)
  • Разбить ParserCreateQuery на несколько более мелких парсеров. #7253 (alesapin)
  • Небольшой рефакторинг и переименование в области внешних словарей. #7111 (alesapin)
  • Рефакторинг части кода для подготовки к управлению доступом на основе ролей. #7235 (Vitaly Baranov)
  • Некоторые улучшения в коде DatabaseOrdinary. #7086 (Nikita Vasilev)
  • Не использовать итераторы в методах find() и emplace() хеш-таблиц. #7026 (Alexander Kuzmenkov)
  • Исправить getMultipleValuesFromConfig на случай, когда параметр root не пустой. #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 Bridge. #7491 (Denis Glazachev)
  • Разрешено хранить некоторые части на целевом диске или томе при выполнении MOVE PARTITION. #7434 (Vladimir Chebotarev)
  • Исправлены значения NULL в столбцах типа Nullable при работе через ODBC Bridge. #7402 (Vasily Nemkov)
  • Исправлен INSERT в таблицу с движком Distributed на нелокальный узел с MATERIALIZED-столбцами. #7377 (Azat Khuzhin)
  • Исправлена функция getMultipleValuesFromConfig. #7374 (Mikhail Korotov)
  • Исправлена проблема использования тайм-аута HTTP keep alive вместо тайм-аута TCP keep alive. #7351 (Vasily Nemkov)
  • Ожидание завершения всех задач при возникновении исключения (исправляет редкие сегфолты). #7350 (tavplubix)
  • Не выполнять вставку в материализованные представления (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)
  • Добавлен layout словаря sparse_hashed, который функционально эквивалентен layout’у hashed, но более эффективен по потреблению памяти. Он использует примерно вдвое меньше памяти за счёт более медленного получения значений. #6894 (Azat Khuzhin)
  • Реализована возможность задавать список пользователей для доступа к словарям. Используется только текущая подключённая база данных. #6907 (Guillaume Tassery)
  • Добавлена опция LIMIT в запрос SHOW. #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. Функциональность всё ещё находится в разработке (поддержка аутентификации пока отсутствует). #5596 (Vladimir Chebotarev)

Улучшение

  • Каждое сообщение, прочитанное из Kafka, вставляется атомарно. Это решает почти все известные проблемы с движком Kafka. #6950 (Ivan)
  • Улучшен механизм отказоустойчивости распределённых запросов (failover). Время восстановления сокращено, также теперь оно настраивается и отображается в system.clusters. #6399 (Vasily Nemkov)
  • Поддержка числовых значений для Enum напрямую в IN. #6766 #6941 (dimarub2000)
  • Поддержка (опционально, по умолчанию отключена) перенаправлений (redirect) для URL‑хранилища. #6914 (maqroll)
  • Добавлено информационное сообщение при подключении клиента со старой версией к серверу. #6893 (Philipp Malkovsky)
  • Удалено ограничение на максимальное время ожидания с экспоненциальной паузой (backoff) при отправке данных в распределённые таблицы. #6895 (Azat Khuzhin)
  • Добавлена возможность отправлять события профиля (счётчики) с накопительными значениями в 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)

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

  • Добавлен gdb‑индекс к исполняемому файлу clickhouse с отладочной информацией. Это ускорит запуск gdb. #6947 (alesapin)
  • Ускорено создание deb‑пакетов с пропатченным dpkg-deb, который использует pigz. #6960 (alesapin)
  • Установлено enable_fuzzing = 1 для включения инструментации libfuzzer для всего кода проекта. #7042 (kyprizel)
  • Добавлен smoke‑тест разделённой сборки в CI. #7061 (alesapin)
  • Добавлена сборка с MemorySanitizer в CI. #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 значениями по умолчанию, если тип данных этого поля не допускает NULL (если установлено 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 по соображениям производительности будет возвращать искажённое (mangled) имя, и вам нужно отдельно применять 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)
  • Поддержка каскадных материализованных представлений. #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(), возвращающая логин авторизованного пользователя. Добавлен псевдоним user() для совместимости с MySQL. #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. Позволяет задать пользовательскую строку формата для ввода и вывода данных. #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)
  • Исправлен TTL на уровне столбцов при нетривиальных значениях по умолчанию для столбцов. Ранее при принудительном слиянии по TTL с запросом OPTIMIZE ... FINAL просроченные значения заменялись значениями по умолчанию для типа данных вместо указанных пользователем значений по умолчанию для столбцов. #6796 (Anton Popov)
  • Исправлена проблема дублирования сообщений в Kafka при штатной перезагрузке сервера. #6597 (Ivan)
  • Исправлен бесконечный цикл при чтении сообщений из Kafka. Не приостанавливать и не возобновлять консьюмер при подписке вообще — иначе в некоторых сценариях он может оставаться приостановленным бесконечно долго. #6354 (Ivan)
  • Исправлена ошибка Key expression contains comparison between inconvertible types в функции bitmapContains. #6136 #6146 #6156 (dimarub2000)
  • Исправлена ошибка сегментации при включённой настройке optimize_skip_unused_shards и отсутствии ключа шардирования. #6384 (Anton Popov)
  • Исправлен неверный код в мутациях, который мог приводить к порче памяти. Исправлена ошибка сегментации при чтении адреса 0x14c0, которая могла возникать из‑за одновременного выполнения DROP TABLE и SELECT из system.parts или system.parts_columns. Исправлено состояние гонки при подготовке запросов мутаций. Исправлена взаимная блокировка, вызываемая OPTIMIZE реплицированных таблиц и одновременными операциями модификации, такими, как ALTER. #6514 (alexey-milovidov)
  • Удалено чрезмерно подробное логирование в интерфейсе MySQL #6389 (alexey-milovidov)
  • Вернули возможность разбирать логические настройки из 'true' и 'false' в файле конфигурации. #6278 (alesapin)
  • Исправлена ошибка, приводившая к падению функций quantile и median при работе с Nullable(Decimal128). #6378 (Artem Zuikov)
  • Исправлена возможная ситуация, при которой запрос SELECT с условием WHERE по первичному ключу, в котором использовалось преобразование к типу 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)
  • Исправлено некорректное поведение и возможные ошибки сегментации в агрегатных функциях 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)
  • Исправлена редкая ошибка неправильного выделения/освобождения памяти в словарях кэша с составными ключами и строковыми полями, которая приводила к неограниченному росту потребления памяти (выглядело как утечка памяти). Ошибка воспроизводилась, когда размер строки являлся степенью двойки, начиная с восьми (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 с константными аргументами может приводить к ошибке сегментации (segfault). #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. Обнаружено fuzz-тестированием. #6304 #6305 (alexey-milovidov)
  • Исправлена проблема, из-за которой запросы могли зависать при перегрузке сервера и почти полном заполнении глобального пула потоков. Вероятность возникновения этой проблемы выше на кластерах с большим количеством шардов (сотни), потому что распределённые запросы выделяют поток на каждое соединение с шардом. Например, эта проблема может воспроизводиться, если кластер из 330 шардов обрабатывает 30 параллельных распределённых запросов. Эта проблема затрагивает все версии, начиная с 19.2. #6301 (alexey-milovidov)
  • Исправлена логика работы функции arrayEnumerateUniqRanked. #6423 (alexey-milovidov)
  • Исправлен segfault при декодировании таблицы символов. #6603 (Amos Bird)
  • Исправлено некорректное исключение при приведении типа LowCardinality(Nullable) к не-Nullable столбцу, если он не содержит значений Null (например, в запросе SELECT CAST(CAST('Hello' AS LowCardinality(Nullable(String))) AS String)). #6094 #6119 (Nikolai Kochetov)
  • Удалено избыточное заключение поля description в кавычки в таблице system.settings. #6696 #6699 (alexey-milovidov)
  • Предотвращена возможная взаимоблокировка при выполнении TRUNCATE реплицируемой таблицы. #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)
  • Ограничено максимальное время «сна» при ограничении скорости, когда заданы 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, материализованных представлениях и условиях безопасности на уровне строк, которые включают подзапросы. #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 view (например, при запуске сервера) независимо от настройки allow_experimental_live_view. #6754 (alexey-milovidov)
  • Для трассировок стека, собираемых профилировщиком запросов, не следует включать кадры стека, сгенерированные самим профилировщиком запросов. #6250 (alexey-milovidov)
  • Теперь табличные функции values, file, url, hdfs поддерживают столбцы типа ALIAS. #6255 (alexey-milovidov)
  • Генерировать исключение, если файл config.d не содержит корневой элемент, соответствующий корневому элементу файла конфигурации. #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, которая показывает общее количество файлов в файловой системе, выбранных для отправки на удалённые серверы распределёнными таблицами. Число суммируется по всем шардам. #6600 (alexey-milovidov)
  • Перенесена большая часть логики подготовки JOIN'ов из ExpressionAction/ExpressionAnalyzer в AnalyzedJoin. #6785 (Artem Zuikov)
  • Исправлено предупреждение TSan warning «lock-order-inversion». #6740 (Vasily Nemkov)
  • Улучшены информационные сообщения об отсутствии возможностей Linux (capabilities). Фатальные ошибки теперь логируются с уровнем «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 используется в качестве плагина аутентификации по умолчанию (ошибки описаны в #6031). #6113 (Yuriy Baranov)
  • Удалён ненужный участок кода, связанный с изменением nullability столбцов. #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. Сам ExpressionAnalyzer сохранён для неселектных запросов. #6499 (Artem Zuikov)
  • Удалены дублирующиеся форматы ввода и вывода. #6239 (Nikolai Kochetov)
  • Разрешить пользователю переопределять настройки poll_interval и idle_connection_timeout при подключении. #6230 (alexey-milovidov)
  • У MergeTree теперь есть дополнительная опция ttl_only_drop_parts (по умолчанию отключена), которая позволяет избежать частичного удаления частей, так что они удаляются полностью, когда срок действия всех строк в части истекает. #6191 (Sergi Vladykin)
  • Проверка типов для функций индекса set. Выбрасывать исключение, если функция получает аргумент неверного типа. Это исправляет fuzz‑тест с 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)
  • Использование библиотеки FastOps для функций exp, log, sigmoid, tanh. 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 (runtime template instantiation), так как наша собственная реализация превзошла его по производительности. #6646 (alexey-milovidov)
  • Добавлен тест производительности для более изолированной демонстрации деградации производительности в gcc-9. #6302 (alexey-milovidov)
  • Добавлена табличная функция numbers_mt — многопоточная версия numbers. Обновлены тесты производительности с хеш-функциями. #6554 (Nikolai Kochetov)
  • Режим сравнения в clickhouse-benchmark #6220 #6343 (dimarub2000)
  • Реализован вывод стек-трейсов по принципу «best effort». Также добавлен SIGPROF как отладочный сигнал для вывода стек-трейса выполняющегося потока. #6529 (alexey-milovidov)
  • Каждая функция — в отдельном файле, часть 10. #6321 (alexey-milovidov)
  • Удалена продублированная константа TABLE_IS_READ_ONLY. #6566 (filimonov)
  • Изменения форматирования в PR по StringHashMap #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)
  • Добавлен тест на несколько материализованных представлений для таблицы 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)
  • Добавлен интеграционный тест на обработку ошибок словарём-кэшем. #6755 (Vitaly Baranov)
  • Отключён разбор ELF-объектных файлов на macOS, так как это не имеет смысла. #6578 (alexey-milovidov)
  • Попытка улучшить генератор журнала изменений. #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)
  • Исправлены тайм-ауты в фазз-тесте. В предыдущей версии он обнаруживал ложное зависание в запросе SELECT * FROM numbers_mt(gccMurmurHash('')). #6582 (alexey-milovidov)
  • Добавлены отладочные проверки при использовании static_cast для столбцов. #6581 (alexey-milovidov)
  • Поддержка Oracle Linux в официальных RPM-пакетах. #6356 #6585 (alexey-milovidov)
  • Тип JSON-тестов производительности изменён с 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 разделён на четыре отдельных теста. #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 добавлены дополнительные проверки. Это должно дать больше информации об ошибке сегментации в fuzz-тесте. #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)
  • Теперь материализованное представление можно создавать с любыми типами низкой кардинальности, независимо от настройки, касающейся подозрительных типов низкой кардинальности. #6428 (Olga Khvostikova)
  • Обновлены тесты для настройки send_logs_level. #6207 (Nikolai Kochetov)
  • Исправлена сборка с gcc-8.2. #6196 (Max Akhmedov)
  • Исправлена проблема со сборкой с внутренней libc++. #6724 (Ivan)
  • Исправлена сборка с динамической библиотекой rdkafka #6101 (Ivan)
  • Исправления для сборки под macOS (частичные). #6390 (alexey-milovidov) #6429 (alex-zaitsev)
  • Исправлена сборка с параметром "splitted". #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)
  • Исправлена регрессия при вставке в материализованное представление. #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)
  • Исправлено несоответствие заголовков потоков, возникавшее при чтении из пустой распределённой таблицы с 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 реплицируемых таблиц и параллельными операциями модификации, такими как ALTER. #6514 (alexey-milovidov)
  • Исправлена возможная потеря данных после запроса ALTER DELETE на таблице с пропускающим индексом. #6224 #6282 (Nikita Vasilev)

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

  • Если у злоумышленника есть права на запись в ZooKeeper и он может запустить пользовательский сервер, доступный из сети, в которой запущен ClickHouse, он может создать специально подготовленный вредоносный сервер, который будет выдавать себя за реплику ClickHouse и зарегистрировать его в ZooKeeper. Когда другая реплика будет забирать часть данных с вредоносной реплики, это может заставить clickhouse-server выполнить запись по произвольному пути в файловой системе. Обнаружено Эльдаром Зайтовым, командой информационной безопасности компании 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 включена по умолчанию. Для вставок в распределённые таблицы требуется, чтобы эта настройка была одинаковой на всём кластере (её нужно задать перед поэтапным обновлением кластера). Она включает вычисление сложных выражений значений по умолчанию для опущенных полей в форматах 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 при выполнении SELECT из пустого топика 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

  • Улучшена обработка ошибок в кэшируемых словарях. #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 (NullPointerException) при использовании условия IN с подзапросом, возвращающим кортеж. #6125 #6550 (tavplubix)
  • Исправлена проблема, при которой при переходе устаревшей реплики в активное состояние она могла по-прежнему содержать части данных, удалённые с помощью DROP PARTITION. #6522 #6523 (tavplubix)
  • Исправлена проблема при разборе CSV. #6426 #6559 (tavplubix)
  • Исправлена гонка данных в таблице system.parts и запросе ALTER. Это исправляет #6245. #6513 (alexey-milovidov)
  • Исправлен некорректный код в мутациях, который мог приводить к повреждению памяти. Исправлена ошибка сегментации при чтении адреса 0x14c0, которая могла возникать из-за одновременного выполнения DROP TABLE и SELECT из system.parts или system.parts_columns. Исправлена гонка при подготовке запросов мутаций. Исправлен дедлок, вызванный OPTIMIZE реплицируемых таблиц и одновременными операциями модификации, такими как 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)
  • Исправлена ошибка с выделением памяти для строковых полей в кэширующем словаре со сложным ключом. #6447 (alesapin)
  • Исправлена ошибка с включением адаптивной гранулярности при создании новой реплики для таблицы 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)
  • Исправлен сбой сегментации в ExternalLoader::reloadOutdated(). #6082 (Vitaly Baranov)
  • Исправлен случай, когда сервер мог закрыть прослушивающие сокеты, но не завершиться и продолжать обслуживать оставшиеся запросы. В результате вы могли получить два запущенных процесса clickhouse-server. Иногда сервер мог возвращать ошибку bad_function_call для оставшихся запросов. #6231 (alexey-milovidov)
  • Исправлено бесполезное и некорректное условие по полю обновления для начальной загрузки внешних словарей через 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)
  • Сбой сегментации при установке слишком большого значения CIDR в функции IPv6CIDRToRange. #6068 (Guillaume Tassery)
  • Исправлена небольшая утечка памяти, возникавшая, когда сервер выбрасывал множество исключений из множества разных контекстов. #6144 (alexey-milovidov)
  • Исправлена ситуация, когда потребитель Kafka был приостановлен до подписки и не был возобновлён после неё. #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 Release 19.11.3.11, 2019-07-18

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

  • Добавлена поддержка подготовленных выражений (prepared statements). #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_cache_update_period) обновляет DNS‑кэш. Это должно помочь в случаях, когда 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)
  • Исправлена ошибка выхода за границы буфера (buffer underflow) в 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 при соединении по ключам типа Nullable в правой таблице. #5859 (Artem Zuikov)
  • Возможное исправление проблемы бесконечного ожидания низкоприоритетных запросов. #5842 (alexey-milovidov)
  • Исправлено состояние гонки, из-за которого некоторые запросы могли не попадать в query_log после выполнения команды SYSTEM FLUSH LOGS. #5456 #5685 (Anton Popov)
  • Исправлено предупреждение ASan heap-use-after-free в ClusterCopier, вызванное механизмом watch, который пытался использовать уже удалённый объект копировщика. #5871 (Nikolai Kochetov)
  • Исправлен неверный указатель StringRef, возвращаемый некоторыми реализациями IColumn::deserializeAndInsertFromArena. Эта ошибка проявлялась только в модульных тестах. #5973 (Nikolai Kochetov)
  • Предотвратить маскирование одноимённых столбцов столбцами из исходного и промежуточного ARRAY JOIN. #5941 (Artem Zuikov)
  • Исправлены запросы INSERT и SELECT к движку MySQL с использованием кавычек для идентификаторов в стиле MySQL. #5704 (Winter Zhang)
  • Теперь запрос CHECK TABLE может работать с семейством движков MergeTree. Он возвращает статус проверки и сообщение (если есть) для каждой части (или файла в случае более простых движков). Также исправлена ошибка при загрузке повреждённой части. #5865 (alesapin)
  • Исправлена работа рантайма 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)
  • Информация о покрытии тестами в каждом коммите и каждом pull request. #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 заставляет компоновщик проверять наличие всех внешних имён во время компоновки. Это очень полезно для отслеживания реальных зависимостей между библиотеками в режиме раздельной сборки. #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)
  • Преобразовать макросы порядка байт BSD/Linux ('be64toh' и 'htobe64') в эквиваленты для Mac OS X #5785 (Fu Chen)
  • Обновлено руководство по интеграционным тестам. #5796 (Vladimir Chebotarev)
  • Исправление сборки под macosx + gcc9 #5822 (filimonov)
  • Исправлена трудно заметная опечатка: aggreAGte -> aggregate. #5753 (akuzm)
  • Исправлена сборка FreeBSD #5760 (proller)
  • Добавить на сайт ссылку на экспериментальный YouTube-канал #5845 (Ivan Blinkov)
  • CMake: добавить опцию включения флагов покрытия: WITH_COVERAGE #5776 (proller)
  • Исправлен начальный размер некоторых inline 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)
  • Запуск stateful-тестов в стресс-тесте 12693e568722f11e19859742f56428455501fd2a (alesapin)

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

  • Kafka не работает в этой версии.
  • Включено значение adaptive_index_granularity = 10 MB по умолчанию для новых таблиц MergeTree. Если вы создавали новые таблицы 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, если второй bitmap содержит один элемент. #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)
  • Использование "public_suffix_list" для функций firstSignificantSubdomain, cutToFirstSignificantSubdomain. Используется идеальная хеш-таблица, сгенерированная с помощью gperf, со списком, полученным из файла: https://publicsuffix.org/list/public_suffix_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> в конфигурационном файле 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)
  • Удалены <name> и <metrics> из тестов производительности #5672 (Olga Khvостikova)
  • Исправлен тест производительности select_format для форматов Pretty #5642 (alexey-milovidov)

Релиз ClickHouse 19.9

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

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

  • Исправлен сегфолт в кодеке Delta, затрагивавший столбцы со значениями размером менее 32 бит. Ошибка приводила к случайному повреждению памяти. #5786 (alesapin)
  • Исправлена редкая ошибка при проверке части со столбцом LowCardinality. #5832 (alesapin)
  • Исправлен сегфолт при слиянии по TTL с нефизическими столбцами в блоке. #5819 (Anton Popov)
  • Исправлено потенциальное бесконечное засыпание запросов с низким приоритетом. #5842 (alexey-milovidov)
  • Исправлена ошибка, из-за которой ClickHouse определял часовой пояс по умолчанию как UCT вместо UTC. #5828 (alexey-milovidov)
  • Исправлена ошибка, из-за которой распределённые запросы DROP/ALTER/TRUNCATE/OPTIMIZE ON CLUSTER выполнялись на реплике-подписчике (follower) раньше, чем на реплике-лидере (leader). Теперь они выполняются непосредственно на реплике-лидере. #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 Khvостикова)
  • Регрессионные функции возвращают веса модели, когда они не используются как состояние (State) в функции evalMLMethod. #5411 (Quid37)
  • Переименованы и улучшены регрессионные методы. #5492 (Quid37)
  • Сделаны более понятными интерфейсы строковых поисковых алгоритмов. #5586 (Danila Kutenin)

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

  • Устранена возможная потеря данных в Kafka #5445 (Ivan)
  • Исправлен потенциальный бесконечный цикл в формате PrettySpace при использовании с нулевым числом столбцов #5560 (Olga Khvостikова)
  • Исправлена ошибка переполнения UInt32 в линейных моделях. Разрешена оценка ML-модели при неконстантном аргументе модели. #5516 (Nikolai Kochetov)
  • ALTER TABLE ... DROP INDEX IF EXISTS ... не должен вызывать исключение, если указанный индекс отсутствует #5524 (Gleb Novikov)
  • Исправлена ошибка сегментации при использовании bitmapHasAny в скалярном подзапросе #5528 (Zhichang Yu)
  • Исправлена ошибка, из-за которой пул подключений репликации не пытался повторно разрешать имя хоста, даже после сброса DNS-кэша. #5534 (alesapin)
  • Исправлен ALTER ... MODIFY TTL в таблицах ReplicatedMergeTree. #5539 (Anton Popov)
  • Исправлена вставка (INSERT) в таблицу 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)
  • Исправлена ошибка, из-за которой части удалялись только из файловой системы, но не из 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)
  • Исправлены предупреждения gcc‑9 в hyperscan (#line‑директива — зло!) #5546 (Danila Kutenin)
  • Исправлены все предупреждения при компиляции с gcc‑9. Исправлены некоторые проблемы в contrib. Исправлена внутренняя ошибка компилятора (ICE) в gcc‑9 и отправлен отчёт в 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 в Python, basename в 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 в функциях: 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 для вычисления несимметричной разности между образцом и строкой. #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. Реализован переход на RapidJSON в случае, если инструкции AVX2 недоступны. Библиотека simdjson обновлена до новой версии. #5235 (Vitaly Baranov)
  • Теперь функции if и multiIf не зависят от Nullable условия, а определяются ветвями в целях совместимости с SQL. #5238 (Jian Wu)
  • Предикат In теперь, как и функция Equal, возвращает результат Null при входном значении Null. #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: более информативные сообщения об ошибках listen(). #5268 (proller)
  • Добавлена поддержка словарей в clickhouse-copier для функций в <sharding_key> #5270 (proller)
  • Добавлена новая настройка kafka_commit_every_batch для регулирования политики фиксации offset-ов в 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 Wire. Переименован формат в MySQLWire. Используется RAII для вызова RSA_free. Отключается SSL, если контекст не может быть создан. #5419 (Yuriy Baranov)
  • clickhouse-client: позволить запуск при недоступном файле истории (только для чтения, нет места на диске, файл — каталог и т. п.). #5431 (proller)
  • Учитывать настройки запроса в асинхронных запросах INSERT в таблицы типа Distributed. #4936 (TCeason)
  • Переименованы функции: leastSqrsimpleLinearRegression, LinearRegressionlinearRegression, LogisticRegressionlogisticRegression. #5391 (Nikolai Kochetov)

Улучшения производительности

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

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

  • Исправлено проталкивание требуемых столбцов при 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 (включая разные масштабы). #5350 (Artem Zuikov)
  • Исправлено повреждение состояния FPU в библиотеке simdjson, приводившее к неправильному вычислению агрегатных функций uniqHLL и uniqCombined, а также математических функций, таких как log. #5354 (alexey-milovidov)
  • Исправлена обработка смешанных случаев константных/неконстантных аргументов в функциях JSON. #5435 (Vitaly Baranov)
  • Исправлена функция retention. Теперь все условия, выполняющиеся для строки данных, добавляются в состояние данных. #5119 (小路)
  • Исправлен тип результата для quantileExact с типом Decimal. #5304 (Artem Zuikov)

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

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

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

  • Исправить некоторые отчёты sanitizer'а, указывающие на вероятное use-after-free. #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 со значением 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)
  • Исправлены функции работы с bitmap, приводившие к неверному результату. #5359 (Andy Yang)
  • Исправлен element_count для хэшированного словаря (не включая дубликаты). #5440 (Azat Khuzhin)
  • Теперь содержимое переменной окружения TZ используется как имя часового пояса. Это помогает корректно определить часовой пояс по умолчанию в некоторых случаях. #5443 (Ivan)
  • Не пытаться преобразовывать целые числа в функциях dictGetT, так как это работает некорректно. Вместо этого выбрасывать исключение. #5446 (Artem Zuikov)
  • Исправлены настройки в HTTP-запросе ExternalData. #5455 (Danila Kutenin)
  • Исправлена ошибка, когда части удалялись только из файловой системы без удаления их из Zookeeper. #5520 (alesapin)
  • Исправлена ошибка сегментации в функции 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)
  • Исправлен INSERT в таблицу 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

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

  • Исправлено проталкивание условия IN для запросов из табличных функций mysql и odbc и соответствующих движков таблиц. Исправляет #3540 и #2384. #5313 (alexey-milovidov)
  • Исправлена взаимоблокировка в ZooKeeper. #5297 (github1youlc)
  • Допускаются десятичные числа в кавычках в 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)
  • Исправлено зависание при старте сервера, когда словарь зависит от другого словаря через базу данных с engine=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 раздельно, чтобы надёжнее выявлять ошибки сегментации #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 изменён с логического на тип 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)
  • Добавлен новый тип индексов пропуска данных на основе фильтров Блума (может использоваться для функций 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)
  • Улучшено использование рабочей (scratch) области памяти и обработка ошибок в Hyperscan. #4866 (Danila Kutenin)
  • Реализовано заполнение system.graphite_detentions на основе конфигурации таблиц движка *GraphiteMergeTree. #4584 (Mikhail f. Shiryaev)
  • Функция trigramDistance переименована в ngramDistance и добавлены дополнительные функции с CaseInsensitive и UTF. #4602 (Danila Kutenin)
  • Улучшено вычисление индексов пропуска данных (data skipping indices). #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 могут привести к ошибке сегментации (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 при завершении работы, вызванный гонкой при использовании системных логов. Исправлено потенциальное 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)
  • Исправлено падение JOIN при сравнении столбца, не допускающего NULL, со столбцом, допускающим NULL. Исправлена обработка 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 при соединении по nullable и not 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 больше нуля, которая проявлялась, когда потоку приходилось выполнять перемещение назад (seek) в файле столбца. #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)

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

  • Усиление защиты отладочной сборки: более детальные отображения памяти и ASLR; добавлена защита памяти для кэша меток и индексов. Это позволяет находить больше ошибок перезаписи памяти в случаях, когда 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)
  • В скрипт упаковки добавлена сборка 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 в stateful-тестах. #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 могут привести к ошибке сегментации. #4698 (alexey-milovidov)
  • Взаимная блокировка (deadlock) может возникнуть при выполнении запроса 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)
  • Исправлена ошибка сегментации в 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 при соединении nullable- и not 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)
  • Добавлены bitmap-функции с использованием Roaring Bitmaps. #4207 (Andy Yang) #4568 (Vitaly Baranov)
  • Добавлена поддержка формата Parquet. #4448 (proller)
  • Добавлена метрика расстояния N-gram для нечеткого сравнения строк. Аналогична q-gram-метрикам в языке R. #4466 (Danila Kutenin)
  • Объединены правила для Graphite rollup из отдельных шаблонов агрегации и хранения (retention). #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 при выполнении запроса SELECT. #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, который мог произойти при одновременном выполнении запроса SELECT и удалении таблицы MergeTree. #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 для кэшируемых словарей. #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)
  • Улучшена логика проталкивания (push-down) для операторов JOIN. #4387 (Ivan)

Улучшения производительности

  • Улучшены эвристики оптимизации «move to PREWHERE». #4405 (alexey-milovidov)
  • Используются корректные таблицы поиска, работающие через 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)
  • Добавлены тесты словарей в интеграционные тесты. #4477 (alesapin)
  • Добавлены запросы из бенчмарка на сайте в автоматизированные тесты производительности. #4496 (alexey-milovidov)
  • xxhash.h отсутствует во внешнем lz4, поскольку это деталь реализации и его символы помещены в пространство имён с помощью макроса XXH_NAMESPACE. Когда lz4 используется как внешняя зависимость, xxHash также должен быть внешним, и зависящие от него компоненты должны линковаться с ним. #4495 (Orivej Desh)
  • Исправлен случай, когда агрегатная функция quantileTiming могла вызываться с отрицательным или вещественным аргументом (это исправляет fuzz-тест с санитайзером неопределённого поведения). #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, когда объединение выполнялось по столбцам типа 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) и ошибки сегментации. Эта ошибка впервые появилась в версии 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 с массивом или кортежем. #4552 (Artem Zuikov)
  • Исправлен сбой в clickhouse-copier с сообщением ThreadStatus not created. #4540 (Artem Zuikov)
  • Исправлено зависание при остановке сервера, если использовались распределённые DDL. #4472 (Alex Zatelepin)
  • В сообщении об ошибке разбора текстового формата для столбцов с номером больше 10 выводились некорректные номера столбцов. #4484 (alexey-milovidov)

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

  • Исправлена сборка с включенным AVX. #4527 (alexey-milovidov)
  • Включен расширенный учет и учет ввода-вывода на основе заранее известной корректной версии вместо ядра, под которое производится компиляция. #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-запросов INSERT. #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)
  • Исправлена подстановка псевдонимов в запросах с подзапросом, содержащим тот же псевдоним (issue #4110). #4351 (Artem Zuikov)

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

  • Добавлена возможность запускать clickhouse-server для stateless-тестов в образе 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, принимающая дополнительный аргумент с (беззнаковым целым) весом. #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‑интерфейса при импорте данных (INSERT). #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)
  • Исправлен бесконечный цикл при выполнении запроса SELECT к табличной функции numbers(0). #4280 (alexey-milovidov)
  • Временно отключена оптимизация предикатов при использовании ORDER BY. #3890 (Winter Zhang)
  • Исправлена ошибка Illegal instruction при использовании функций base64 на старых процессорах. Эта ошибка воспроизводилась только при компиляции ClickHouse с gcc-8. #4275 (alexey-milovidov)
  • Исправлена ошибка No message received при работе с PostgreSQL ODBC Driver через TLS-соединение. Также исправлена ошибка сегментации при использовании 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 sanitizer: добавлена проверка типа параметра для семейства функций 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)
  • Добавлена возможность выполнять запросы по индексу в тесте производительности. #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)
  • Скрипт инициализации будет ожидать запуска сервера. #4281 (proller)

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

  • Удалена настройка allow_experimental_low_cardinality_type. Типы данных LowCardinality готовы для промышленной эксплуатации. #4323 (alexey-milovidov)
  • Уменьшен размер кэша меток и размер кэша несжатых данных в соответствии с доступным объёмом памяти. #4240 (Lopatin Konstantin)
  • Добавлено ключевое слово INDEX в запрос CREATE TABLE. Столбец с именем 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. #4251 (Lopatin Konstantin)
  • Добавлена опция --help/-h для clickhouse-server. #4233 (Yuriy Baranov)
  • Добавлена поддержка скалярных подзапросов с результатом в виде состояния агрегатной функции. #4348 (Nikolai Kochetov)
  • Улучшено время завершения работы сервера и ожидания выполнения операций ALTER. #4372 (alexey-milovidov)
  • Добавлена информация о настройке replicated_can_become_leader в system.replicas и добавлено логирование, если реплика не пытается стать лидером. #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 может аварийно завершиться с ошибкой сегментации при завершении работы во время загрузки данных для подсказок командной строки, если он был запущен в интерактивном режиме. #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 через TLS-соединение. Также устранён сбой сегментации при использовании драйвера MySQL ODBC. #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-тест при использовании undefined behavior sanitizer: добавлена проверка типа параметра для семейства функций quantile*Weighted. #4145 (alexey-milovidov)
  • Команда START REPLICATED SENDS теперь запускает реплицируемые отправки. #4229 (nvartolomei)
  • Исправлена ошибка Not found column при наличии дублирующихся столбцов в секции JOIN ON. #4279 (Artem Zuikov)
  • Теперь /etc/ssl используется в качестве каталога по умолчанию для 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), использующая то же начальное значение хеша, что и 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-операции с реплицируемыми таблицами, и в потоке, обновляющем конфигурацию из 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)
  • Исправлено неопределённое поведение в StorageMerge. #3910 (Amos Bird)
  • Исправлена ошибка сегментации (segmentation fault) в функциях addDays, subtractDays. #3913 (alexey-milovidov)
  • Исправлена ошибка: функции round, floor, trunc, ceil могли возвращать некорректный результат при вызове с целочисленным аргументом и большим отрицательным значением масштаба. #3914 (alexey-milovidov)
  • Исправлена ошибка, вызванная выполнением команды 'kill query sync', которая приводила к дампу ядра. #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 и распределённые таблицы. #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 теперь поддерживает нерегулярные (jagged) структуры. #4063 (Odin Hultgren Van Der Horst)
  • Улучшение удобства использования: добавлена проверка, что серверный процесс запущен от имени владельца каталога с данными. Не разрешается запускать сервер от root, если данные принадлежат пользователю, отличному от root. #3785 (sergey-v-galtsev)
  • Улучшена логика проверки требуемых столбцов при анализе запросов с JOIN. #3930 (Artem Zuikov)
  • Уменьшено количество соединений в случае большого числа таблиц типа Distributed на одном сервере. #3726 (Winter Zhang)
  • Добавлена поддержка строки итогов (totals row) для запроса WITH TOTALS в ODBC-драйвере. #3836 (Maksim Koritckiy)
  • Разрешено использовать Enum как целые числа внутри функции if. #3875 (Ivan)
  • Добавлена настройка low_cardinality_allow_in_native_format. Если она отключена, тип LowCadrinality не используется в формате Native. #3879 (KochetovNicolai)
  • Удалены некоторые избыточные объекты из кэша скомпилированных выражений для снижения потребления памяти. #4042 (alesapin)
  • Добавлена проверка, что запрос SET send_logs_level = 'value' принимает допустимое значение. #3873 (Sabyanin Maxim)
  • Исправлена проверка типа данных в функциях преобразования типов. #3896 (Winter Zhang)

Улучшения производительности

  • Добавлена настройка MergeTree use_minimalistic_part_header_in_zookeeper. Если она включена, реплицируемые таблицы будут хранить компактные метаданные парта в одном znode парта. Это может значительно уменьшить размер снапшотов ZooKeeper (особенно если в таблицах много столбцов). Имейте в виду, что после включения этой настройки вы не сможете откатиться на версию, которая её не поддерживает. #3960 (Alex Zatelepin)
  • Добавлена реализация на основе ДКА для функций 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)
  • Исправлена ошибка, из-за которой сервер не мог запуститься с сообщением 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)
  • Включено большинство предупреждений флага -Weverything в clang. Включён -Wpedantic. #3986 (alexey-milovidov)
  • Добавлено ещё несколько предупреждений, доступных только в clang 8. #3993 (alexey-milovidov)
  • При динамической линковке использовать libLLVM вместо отдельных библиотек LLVM. #3989 (Orivej Desh)
  • Добавлены переменные санитайзера для тестовых образов. #4072 (alesapin)
  • Debian-пакет clickhouse-server будет рекомендовать установить пакет libcap2-bin для использования утилиты setcap при настройке capabilities. Это необязательная зависимость. #4093 (alexey-milovidov)
  • Ускорена компиляция, исправлены включаемые заголовочные файлы. #3898 (proller)
  • Добавлены тесты производительности для хеш-функций. #3918 (filimonov)
  • Исправлены циклические зависимости между библиотеками. #3958 (proller)
  • Улучшена компиляция при небольшом объёме доступной памяти. #4030 (proller)
  • Добавлен тестовый скрипт, воспроизводящий деградацию производительности в jemalloc. #4036 (alexey-milovidov)
  • Исправлены опечатки в комментариях и строковых литералах в модуле dbms. #4122 (maiha)
  • Исправлены опечатки в комментариях. #4089 (Evgenii Pravda)

Журнал изменений за 2018 год