Список изменений за 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)
Другое
- Добавлена грамматика ANTLR4 для SQL-диалекта ClickHouse #7595 #7596 (alexey-milovidov)
Релиз 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иRIGHTJOIN при соединении по ключам типа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)
- Переименованы функции:
leastSqr→simpleLinearRegression,LinearRegression→linearRegression,LogisticRegression→logisticRegression. #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)
Документация
- Переведена документация для некоторых движков таблиц на китайский язык. #5107, #5094, #5087 (张风啸), #5068 (never lee)
Улучшения сборки/тестирования/пакетирования
- Обеспечить корректный вывод символов 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)
Улучшения производительности
- Существенное ускорение ASOF JOIN. #4924 (Martijn Bakker)
Обратные несовместимые изменения
Исправления ошибок
- Исправлено потенциальное разыменование нулевого указателя в
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)