Релиз ClickHouse 19.17
Релиз ClickHouse 19.17.6.36, 2019-12-27
Исправление ошибки
- Исправлено потенциальное переполнение буфера при распаковке. Злоумышленник мог передать специально сформированные сжатые данные, что могло привести к чтению за пределами буфера. Эту проблему обнаружил Eldar Zaitov из команды информационной безопасности Yandex. #8404 (alexey-milovidov)
- Исправлено возможное аварийное завершение работы сервера (
std::terminate), если сервер не может отправить или записать данные в формате JSON или XML, содержащие значения типа String (требующие проверки UTF-8), а также при сжатии данных результата алгоритмом Brotli и в некоторых других редких случаях. #8384 (alexey-milovidov) - Исправлены словари, использующие в качестве источника ClickHouse
VIEW: теперь чтение таких словарей не вызывает ошибкуThere is no query. #8351 (Nikolai Kochetov) - Исправлена проверка, разрешён ли хост клиента по host_regexp, указанному в users.xml. #8241, #8342 (Vitaly Baranov)
RENAME TABLEдля distributed таблицы теперь переименовывает папку, содержащую вставленные данные, перед их отправкой в сегменты. Это устраняет проблему при последовательных переименованияхtableA->tableB,tableC->tableA. #8306 (tavplubix)range_hashedвнешние словари, созданные с помощью DDL-запросов, теперь поддерживают диапазоны для произвольных числовых типов. #8275 (alesapin)- Исправлена ошибка в табличной функции
INSERT INTO table SELECT ... FROM mysql(...). #8234 (tavplubix) - Исправлен segfault в
INSERT INTO TABLE FUNCTION file()при вставке в несуществующий файл. Теперь в этом случае файл будет создан, а затем будет выполнена вставка. #8177 (Olga Khvostikova) - Исправлена ошибка в bitmapAnd при пересечении агрегированного битмапа и скалярного битмапа. #8082 (Yue Huang)
- Исправлен segfault при использовании запроса
EXISTSбез квалификатораTABLEилиDICTIONARY, напримерEXISTS t. #8213 (alexey-milovidov) - Исправлен возвращаемый тип функций
randиrandConstantв случае аргумента типа Nullable. Теперь эти функции всегда возвращаютUInt32и никогда —Nullable(UInt32). #8204 (Nikolai Kochetov) - Исправлен
DROP DICTIONARY IF EXISTS db.dict: теперь исключение не генерируется, еслиdbне существует. #8185 (Vitaly Baranov) - Если таблица была удалена не полностью из-за сбоя сервера, сервер попытается восстановить её и загрузить #8176 (tavplubix)
- Исправлен тривиальный
count-запрос для distributed таблицы, если локальных таблиц сегментов больше двух. #8164 (小路) - Исправлена ошибка, которая приводила к гонке данных в
DB::BlockStreamProfileInfo::calculateRowsBeforeLimit()#8143 (Alexander Kazakov) - Исправлено выполнение
ALTER table MOVE partсразу после слияния указанной части, из-за чего могла перемещаться часть, в которую сливалась указанная. Теперь корректно перемещается именно указанная часть. #8104 (Vladimir Chebotarev) - Теперь выражения для словарей можно задавать в виде строк. Это полезно для вычисления атрибутов при извлечении данных из источников, отличных от ClickHouse, поскольку позволяет использовать в таких выражениях синтаксис, отличный от синтаксиса ClickHouse. #8098 (alesapin)
- Исправлено очень редкое состояние гонки в
clickhouse-copier, вызванное переполнением ZXid. #8088 (Ding Xiang Fei) - Исправлена ошибка, из-за которой после сбоя запроса (например, из-за “Too many simultaneous queries”) не считывалась информация о внешних таблицах, и
следующий запрос воспринимал эту информацию как начало нового запроса, что приводило к ошибке вида
Unknown packet from client. #8084 (Azat Khuzhin) - Предотвращено разыменование null после “Unknown packet X from server” #8071 (Azat Khuzhin)
- Восстановлена поддержка всех локалей ICU, добавлена возможность применять collation к константным выражениям, а в таблицу system.collations добавлено название языка. #8051 (alesapin)
- Количество потоков чтения из
StorageFileиStorageHDFSтеперь ограничено, чтобы не допускать превышения лимита памяти. #7981 (alesapin) - Исправлен запрос
CHECK TABLEдля таблиц семейства*MergeTreeбез ключа. #7979 (alesapin) - Удалён номер мутации из имени части, если мутаций не было. Это улучшило совместимость со старыми версиями. #8250 (alesapin)
- Исправлена ошибка, из-за которой для некоторых присоединённых частей пропускались мутации, поскольку их data_version превышает версию мутации таблицы. #7812 (Zhichang Yu)
- Разрешён запуск сервера при наличии избыточных копий частей после их перемещения на другое устройство. #7810 (Vladimir Chebotarev)
- Исправлена ошибка “Sizes of columns does not match”, которая могла возникать при использовании столбцов с агрегатными функциями. #7790 (Boris Granveaud)
- Теперь при использовании WITH TIES вместе с LIMIT BY будет сгенерировано исключение. Также теперь можно использовать TOP с LIMIT BY. #7637 (Nikita Mikhaylov)
- Исправлена перезагрузка словаря при наличии
invalidate_query, из-за которого прекращались обновления и возникало исключение при предыдущих попытках обновления. #8029 (alesapin)
Релиз ClickHouse 19.17.4.11, 2019-11-22
Обратно несовместимое изменение
- Для хранения результатов скалярных подзапросов вместо AST теперь используется столбец — для повышения производительности. Параметр
enable_scalar_subquery_optimizationбыл добавлен в версии 19.17 и включен по умолчанию. Это приводит к ошибкам, подобным этой, при обновлении с предыдущих версий до 19.17.2 или 19.17.3. В 19.17.4 этот параметр по умолчанию отключили, чтобы сделать возможным обновление с 19.16 и более ранних версий без ошибок. #7392 (Amos Bird)
Новая возможность
- Добавлена возможность создавать словари с помощью DDL-запросов. #7360 (alesapin)
- Тип индекса
bloom_filterтеперь поддерживаетLowCardinalityиNullable#7363 #7561 (Nikolai Kochetov) - Добавлена функция
isValidJSONдля проверки того, что переданная строка является корректным JSON. #5910 #7293 (Vdimir) - Реализована функция
arrayCompact#7328 (Memo) - Добавлена функция
hexдля чисел типа Decimal. Она работает какhex(reinterpretAsString()), но не удаляет последние нулевые байты. #7355 (Mikhail Korotov) - Добавлены функции
arrayFillиarrayReverseFill, которые заменяют элементы другими элементами перед ними или после них в массиве. #7380 (hcz) - Добавлена поддержка
CRC32IEEE()/CRC64()#7480 (Azat Khuzhin) - Реализована функция
char, аналогичная функции в mysql #7486 (sundyli) - Добавлена функция
bitmapTransform. Она преобразует массив значений в битмапе в другой массив значений; результатом является новый битмап #7598 (Zhichang Yu) - Реализована функция
javaHashUTF16LE()#7651 (achimbab) - Добавлен виртуальный столбец
_shard_numдля движка Distributed #7624 (Azat Khuzhin)
Экспериментальные возможности
- Поддержка processors (новый конвейер выполнения запроса) в
MergeTree. #7181 (Nikolai Kochetov)
Исправление ошибки
- Исправлен некорректный разбор чисел с плавающей точкой в
Values#7817 #7870 (tavplubix) - Исправлена редкая взаимная блокировка, которая может возникнуть при включенном trace_log. #7838 (filimonov)
- Предотвращено дублирование сообщений при записи в таблицу Kafka, если из неё выбирают данные MV #7265 (Ivan)
- Поддержка
Array(LowCardinality(Nullable(String)))вIN. Устранена проблема #7364 #7366 (achimbab) - Добавлена обработка
SQL_TINYINTиSQL_BIGINT, а также исправлена обработка типа данныхSQL_FLOATв источниках данных моста ODBC. #7491 (Denis Glazachev) - Исправлена агрегация (
avgи quantiles) для пустых столбцов типа Decimal #7431 (Andrey Konyaev) - Исправлена операция
INSERTв Distributed со столбцамиMATERIALIZED#7377 (Azat Khuzhin) - Исправлена работа
MOVE PARTITION, если некоторые части партиции уже находятся на целевом диске или томе #7434 (Vladimir Chebotarev) - Исправлена ошибка, из-за которой в многодисковых конфигурациях во время мутаций в
ReplicatedMergeTreeне создавались жёсткие ссылки. #7558 (Vladimir Chebotarev) - Исправлена ошибка мутации в MergeTree, возникавшая, когда вся часть оставалась неизменной и подбирался другой диск с наибольшим свободным местом #7602 (Vladimir Chebotarev)
- Исправлена ошибка, из-за которой
keep_free_space_ratioне считывался из раздела конфигурацииdisks#7645 (Vladimir Chebotarev) - Исправлена ошибка в таблицах, содержащих только столбцы
Tupleили столбцы со сложными путями. Исправлено в 7541. #7545 (alesapin) - Не учитывать использование памяти движком Buffer в ограничении max_memory_usage #7552 (Azat Khuzhin)
- Исправлено использование финальной метки в таблицах
MergeTree, упорядоченных поtuple(). В редких случаях это могло приводить к ошибкеCan't adjust last granuleпри выполненииSELECT. #7639 (Anton Popov) - Исправлена ошибка в мутациях, где в предикате используются действия, требующие Context (например, функции для JSON), которая могла приводить к сбоям или странным исключениям. #7664 (alesapin)
- Исправлено несоответствие в экранировании имён баз данных и таблиц в каталогах
data/иshadow/#7575 (Alexander Burmak) - Добавлена поддержка дублирующихся ключей в RIGHT|FULL JOIN, например
ON t.x = u.x AND t.x = u.y. Исправлено падение в этом случае. #7586 (Artem Zuikov) - Исправлена ошибка
Not found column <expression> in blockпри JOIN по выражению с RIGHT или FULL JOIN. #7641 (Artem Zuikov) - Ещё одна попытка исправить бесконечный цикл в формате
PrettySpace#7591 (Olga Khvostikova) - Исправлена ошибка в функции
concat, которая возникала, когда все аргументы имели типFixedStringи одинаковый размер. #7635 (alesapin) - Исправлено исключение, возникавшее при использовании 1 аргумента при задании хранилищ S3, URL и HDFS. #7618 (Vladimir Chebotarev)
- Исправлена область видимости InterpreterSelectQuery для представлений, содержащих запрос #7601 (Azat Khuzhin)
Улучшения
- Столбцы
Nullableраспознаются, а значения NULL корректно обрабатываются через мост ODBC #7402 (Vasily Nemkov) - Текущий батч для распределённой отправки теперь записывается атомарно #7600 (Azat Khuzhin)
- Если не удаётся определить таблицу по имени столбца в запросе, генерируется исключение. #7358 (Artem Zuikov)
- В
MergeTreeSettingsдобавлена настройкаmerge_max_block_size#7412 (Artem Zuikov) - Запросы с
HAVINGи безGROUP BYпредполагают группировку по константе. ПоэтомуSELECT 1 HAVING 1теперь возвращает результат. #7496 (Amos Bird) - Добавлена поддержка разбора
(X,)как кортежа, аналогично Python. #7501, #7562 (Amos Bird) - Поведение функции
rangeсделано почти таким же, как в Python. #7518 (sundyli) - В таблицу
system.settingsдобавлены столбцыconstraints#7553 (Vitaly Baranov) - Улучшен формат Null для обработчика TCP, поэтому теперь можно использовать
select ignore(<expression>) from table format Nullдля измерения производительности через clickhouse-client #7606 (Amos Bird) - Запросы вида
CREATE TABLE ... AS (SELECT (1, 2))теперь разбираются корректно #7542 (hcz)
Повышение производительности
- Повышена производительность агрегации по коротким строковым ключам. #6243 (Alexander Kuzmenkov, Amos Bird)
- Выполняется дополнительный проход анализа синтаксиса/выражений для получения возможных оптимизаций после свёртки константных предикатов. #7497 (Amos Bird)
- Для вычисления тривиального
SELECT count() FROM table;используется метаинформация хранилища. #7510 (Amos Bird, alexey-milovidov) - Обработка
arrayReduceвекторизована аналогичноaddBatchв Aggregator. #7608 (Amos Bird) - Небольшое повышение производительности при чтении из
Kafka#7475 (Ivan)
Улучшения сборки/тестирования/упаковки
- Добавлена поддержка кросс-компиляции для архитектуры процессора AARCH64. Переработан скрипт упаковщика. #7370 #7539 (Ivan)
- Toolchain darwin-x86_64 и linux-aarch64 теперь распаковываются в смонтированный Docker-том при сборке пакетов #7534 (Ivan)
- Обновлён Docker-образ для упаковщика бинарных файлов #7474 (Ivan)
- Исправлены ошибки компиляции на macOS Catalina #7585 (Ernest Poletaev)
- Небольшой рефакторинг логики анализа запросов: сложный класс разделён на несколько простых. #7454 (Artem Zuikov)
- Исправлена сборка без подмодулей #7295 (proller)
- Улучшен
add_globsв файлах CMake #7418 (Amos Bird) - Удалены жёстко заданные пути в цели
unwind#7460 (Konstantin Podshumok) - Разрешено использовать формат MySQL без SSL #7524 (proller)
Прочее
- Добавлена грамматика ANTLR4 для диалекта ClickHouse SQL #7595 #7596 (alexey-milovidov)
Релиз ClickHouse 19.16
Релиз ClickHouse 19.16.14.65, 2020-03-25
- Исправлена ошибка при пакетных вычислениях тернарных логических операций с несколькими аргументами (более 10). #8718 (Alexander Kazakov) Это исправление было бэкпортировано в версию 19.16 по специальному запросу Altinity.
Релиз ClickHouse 19.16.14.65, 2020-03-05
- Исправлена несовместимость распределённых подзапросов со старыми версиями ClickHouse. Исправляет #7851 (tabplubix)
- При выполнении запроса
CREATEсворачиваются константные выражения в аргументах движка хранения. Пустое имя базы данных заменяется на текущую базу данных. Также исправлена проверка локального адреса вClickHouseDictionarySource. Исправляет #6508, #3492. #9262 (tabplubix) - Теперь фоновые слияния в таблицах семейства
*MergeTreeточнее сохраняют порядок томов в политике хранения. #8549 (Vladimir Chebotarev) - Предотвращена потеря данных в
Kafkaв редких случаях, когда после чтения суффикса, но до коммита, возникает исключение. Исправляет #9378. Связано: #7175 #9507 (filimonov) - Исправлена ошибка, приводившая к завершению работы сервера при попытке использовать / удалить таблицу
Kafka, созданную с неверными параметрами. Исправляет #9494. Включает #9507. #9513 (filimonov) - Разрешено использовать
MaterializedViewс подзапросами над таблицамиKafka. #8197 (filimonov)
Новая возможность
- Добавлена опция
deduplicate_blocks_in_dependent_materialized_viewsдля управления поведением идемпотентных вставок в таблицы с materialized view. Эта возможность была добавлена в релиз с исправлениями ошибок по специальному запросу Altinity. #9070 (urykhy)
Релиз ClickHouse 19.16.2.2, 2019-10-30
Обратно несовместимое изменение
- Добавлена ранее отсутствовавшая проверка арности для count/counIf. #7095 #7298 (Vdimir)
- Удалён устаревший параметр
asterisk_left_columns_only(по умолчанию он был отключён). #7335 (Artem Zuikov) - Строки формата для формата данных Template теперь задаются в файлах. #7118 (tavplubix)
Новая возможность
- Представлена
uniqCombined64()для вычисления мощности, превышающей UINT_MAX. #7213, #7222 (Azat Khuzhin) - Добавлена поддержка индексов Bloom filter для столбцов типа Array. #6984 (achimbab)
- Добавлена функция
getMacro(name), которая возвращает String со значением соответствующего<macros>из конфигурации сервера. #7240 (alexey-milovidov) - Добавлены две опции конфигурации для словаря с HTTP-источником:
credentialsиhttp-headers. #7092 (Guillaume Tassery) - Добавлено новое ProfileEvent
Merge, которое подсчитывает количество запущенных фоновых слияний. #7093 (Mikhail Korotov) - Добавлена функция fullHostName, которая возвращает полностью определённое доменное имя. #7263 #7291 (sundyli)
- Добавлены функции
arraySplitиarrayReverseSplit, которые разбивают массив по условиям “отсечения”. Они полезны при обработке временных последовательностей. #7294 (hcz) - Добавлены новые функции, которые возвращают Array всех совпадающих индексов в семействе функций multiMatch. #7299 (Danila Kutenin)
- Добавлен новый движок базы данных
Lazy, оптимизированный для хранения большого числа небольших таблиц типа -Log. #7171 (Nikita Vasilev) - Добавлены агрегатные функции groupBitmapAnd, -Or, -Xor для столбцов битмапа. #7109 (Zhichang Yu)
- Добавлены комбинаторы агрегатных функций -OrNull и -OrDefault, которые возвращают null или значения по умолчанию, когда агрегировать нечего. #7331 (hcz)
- Представлен формат данных CustomSeparated, который поддерживает пользовательские правила экранирования и использования разделителей. #7118 (tavplubix)
- Добавлена поддержка Redis в качестве источника внешнего словаря. #4361 #6962 (comunodi, Anton Popov)
Исправление ошибки
- Исправлен неверный результат запроса, если в нём есть секция
WHERE IN (SELECT ...)и используетсяoptimize_read_in_order. #7371 (Anton Popov) - Отключён плагин аутентификации MariaDB, который зависит от файлов вне проекта. #7140 (Yuriy Baranov)
- Исправлено исключение
Cannot convert column ... because it is constant but values of constants are different in source and result, которое в редких случаях могло возникать при использовании функцийnow(),today(),yesterday(),randConstant(). #7156 (Nikolai Kochetov) - Исправлено использование тайм-аута HTTP keep-alive вместо тайм-аута TCP keep-alive. #7351 (Vasily Nemkov)
- Исправлена ошибка сегментации в
groupBitmapOr(проблема #7109). #7289 (Zhichang Yu) - Для materialized view операция commit для Kafka вызывается после записи всех данных. #7175 (Ivan)
- Исправлено неверное значение
duration_msв таблицеsystem.part_log. Оно отличалось в десять раз. #7172 (Vladimir Chebotarev) - Быстро исправлен сбой в таблице LIVE VIEW и вновь включены все тесты LIVE VIEW. #7201 (vzakaznikov)
- Исправлена корректная сериализация значений NULL в min/max-индексах частей MergeTree. #7234 (Alexander Kuzmenkov)
- Не добавлять виртуальные столбцы в метаданные
.sql, когда таблица создаётся какCREATE TABLE AS. #7183 (Ivan) - Исправлена ошибка сегментации в запросе
ATTACH PART. #7185 (alesapin) - Исправлен неверный результат для некоторых запросов, вызванный оптимизацией пустых подзапросов IN и пустых INNER/RIGHT JOIN. #7284 (Nikolai Kochetov)
- Исправлена ошибка AddressSanitizer в методе
getHeader()для LIVE VIEW. #7271 (vzakaznikov)
Улучшения
- Добавлено сообщение на случай ожидания по queue_wait_max_ms. #7390 (Azat Khuzhin)
- Настройка
s3_min_upload_part_sizeпереведена на уровень таблицы. #7059 (Vladimir Chebotarev) - Проверка TTL в StorageFactory. #7304 (sundyli)
- Объединение левых блоков в частичном соединении слиянием (оптимизация). #7122 (Artem Zuikov)
- Недетерминированные функции больше не разрешены в мутациях движков таблиц Replicated, поскольку это может приводить к несогласованности между репликами. #7247 (Alexander Kazakov)
- Отключён трекер памяти при преобразовании трассировки стека исключения в строку. Это позволяет
избежать потери сообщений об ошибке типа
Memory limit exceededна сервере, из-за которой на клиенте возникало исключениеAttempt to read after eof. #7264 (Nikolai Kochetov) - Различные улучшения форматов. Исправляет #6033, #2633, #6611, #6742 #7215 (tavplubix)
- ClickHouse игнорирует значения в правой части оператора IN, которые нельзя преобразовать к типу левой части. Исправлена работа для составных типов — Array и Tuple. #7283 (Alexander Kuzmenkov)
- Добавлена поддержка отсутствующих неравенств для ASOF JOIN. В синтаксисе ON для столбца ASOF можно использовать вариант less-or-equal, а также строгие варианты greater и less. #7282 (Artem Zuikov)
- Оптимизация частичного соединения слиянием. #7070 (Artem Zuikov)
- В функциях uniqCombined теперь используется не более 98K памяти. #7236, #7270 (Azat Khuzhin)
- Части правой соединяемой таблицы выгружаются на диск в PartialMergeJoin (если памяти недостаточно). При необходимости данные загружаются обратно. #7186 (Artem Zuikov)
Повышение производительности
- Ускорена работа
joinGetс константными аргументами за счёт устранения дублирования данных. #7359 (Amos Bird) - Добавлен ранний возврат, если подзапрос пуст. #7007 (小路)
- Оптимизирован разбор SQL-выражения в
Values. #6781 (tavplubix)
Улучшения сборки/тестирования/упаковки
- Отключены некоторые компоненты contrib для кросс-компиляции под Mac OS. #7101 (Ivan)
- Добавлена недостающая линковка с PocoXML для clickhouse_common_io. #7200 (Azat Khuzhin)
- В clickhouse-test добавлена поддержка нескольких аргументов фильтра тестов. #7226 (Alexander Kuzmenkov)
- Включены musl и jemalloc для ARM. #7300 (Amos Bird)
- В
clickhouse-testдобавлен параметр--client-option, позволяющий передавать клиенту дополнительные параметры. #7277 (Nikolai Kochetov) - При обновлении rpm-пакета теперь сохраняются существующие конфигурационные файлы. #7103 (filimonov)
- Исправлены ошибки, выявленные PVS. #7153 (Artem Zuikov)
- Исправлена сборка под Darwin. #7149 (Ivan)
- Обеспечена совместимость с glibc 2.29. #7142 (Amos Bird)
- Убедитесь, что dh_clean не изменяет потенциальные исходные файлы. #7205 (Amos Bird)
- Попытка избежать конфликта при обновлении из altinity rpm — в нём файл конфигурации упакован отдельно в clickhouse-server-common. #7073 (filimonov)
- Оптимизированы некоторые заголовочные файлы для ускорения пересборки. #7212, #7231 (Alexander Kuzmenkov)
- Добавлены тесты производительности для типов Date и DateTime. #7332 (Vasily Nemkov)
- Исправлены некоторые тесты с недетерминированными мутациями. #7132 (Alexander Kazakov)
- В CI добавлена сборка с MemorySanitizer. #7066 (Alexander Kuzmenkov)
- Предотвращено использование неинициализированных значений в MetricsTransmitter. #7158 (Azat Khuzhin)
- Исправлены некоторые проблемы с полями, выявленные MemorySanitizer. #7135, #7179 (Alexander Kuzmenkov), #7376 (Amos Bird)
- Исправлено неопределённое поведение функции murmurhash32. #7388 (Amos Bird)
- Устранено неопределённое поведение в StoragesInfoStream. #7384 (tavplubix)
- Исправлено сворачивание константных выражений для движков внешних баз данных (MySQL, ODBC, JDBC). В предыдущих версиях это не работало для нескольких константных выражений и вообще не работало для Date, DateTime и UUID. Это исправление устраняет проблему #7245 #7252 (alexey-milovidov)
- Исправлена ошибка гонки данных, обнаруженная ThreadSanitizer, в LIVE VIEW при обращении к переменной no_users_thread. #7353 (vzakaznikov)
- Удалены символы malloc из libcommon #7134, #7065 (Amos Bird)
- Добавлен глобальный флаг ENABLE_LIBRARIES, отключающий все библиотеки. #7063 (proller)
Приведение кода в порядок
- Обобщён репозиторий конфигурации в рамках подготовки к DDL для словарей. #7155 (alesapin)
- Парсер для DDL словарей без какой-либо семантики. #7209 (alesapin)
- ParserCreateQuery разделён на несколько более мелких парсеров. #7253 (alesapin)
- Небольшой рефакторинг и переименование, связанные с внешними словарями. #7111 (alesapin)
- Часть кода переработана в рамках подготовки к ролевому управлению доступом. #7235 (Vitaly Baranov)
- Несколько улучшений в коде DatabaseOrdinary. #7086 (Nikita Vasilev)
- В методах find() и emplace() хеш-таблиц больше не используются итераторы. #7026 (Alexander Kuzmenkov)
- Исправлен getMultipleValuesFromConfig для случая, когда корень параметра не пуст. #7374 (Mikhail Korotov)
- Удалено некоторое дублирование кода (TemporaryFile и TemporaryFileStream) #7166 (Artem Zuikov)
- Немного улучшена читаемость кода (
MergeTreeData::getActiveContainingPart). #7361 (Vladimir Chebotarev) - Добавлено ожидание завершения всех запланированных задач, использующих локальные объекты, если
ThreadPool::schedule(...)генерирует исключение.ThreadPool::schedule(...)переименован вThreadPool::scheduleOrThrowOnError(...), а комментарии исправлены так, чтобы было очевидно, что он может генерировать исключение. #7350 (tavplubix)
Релиз ClickHouse 19.15
Релиз ClickHouse 19.15.4.10, 2019-10-31
Исправление ошибки
- Добавлена обработка SQL_TINYINT и SQL_BIGINT, а также исправлена обработка типа данных SQL_FLOAT в мосте ODBC. #7491 (Denis Glazachev)
- В MOVE PARTITION разрешено размещать некоторые части на целевом диске или томе. #7434 (Vladimir Chebotarev)
- Исправлена обработка значений NULL в столбцах с типом Nullable через мост ODBC. #7402 (Vasily Nemkov)
- Исправлен INSERT в Distributed на удалённый узел с MATERIALIZED столбцами. #7377 (Azat Khuzhin)
- Исправлена функция getMultipleValuesFromConfig. #7374 (Mikhail Korotov)
- Исправлена проблема, из-за которой использовался тайм-аут HTTP keep alive вместо тайм-аута TCP keep alive. #7351 (Vasily Nemkov)
- Добавлено ожидание завершения всех задач при исключении (исправляет редкие segfault). #7350 (tavplubix)
- Отключён push в MV при вставке в таблицу Kafka. #7265 (Ivan)
- Отключен трекер памяти для стека исключений. #7264 (Nikolai Kochetov)
- Исправлен некорректный код преобразования запроса для внешней базы данных. #7252 (alexey-milovidov)
- Исключено использование неинициализированных значений в MetricsTransmitter. #7158 (Azat Khuzhin)
- Добавлен пример конфигурации с макросами для тестов (alexey-milovidov)
Релиз ClickHouse 19.15.3.6, 2019-10-09
Исправление ошибки
- Исправлен bad_variant в хешированном словаре. (alesapin)
- Исправлена ошибка, вызывавшая segmentation fault в запросе ATTACH PART. (alesapin)
- Исправлен расчёт времени в
MergeTreeData. (Vladimir Chebotarev) - После завершения записи commit в Kafka теперь выполняется явно. #7175 (Ivan)
- Значения NULL теперь корректно сериализуются в индексах min/max частей MergeTree. #7234 (Alexander Kuzmenkov)
Релиз ClickHouse 19.15.2.2, 2019-10-01
Новая возможность
- Многоуровневое хранение: добавлена поддержка использования нескольких томов хранилища для таблиц с движком MergeTree. Свежие данные можно хранить на SSD, а старые автоматически перемещать на HDD. (пример). #4918 (Igr) #6489 (alesapin)
- Добавлена табличная функция
inputдля чтения входящих данных в запросеINSERT SELECT. #5450 (palasonic1) #6832 (Anton Popov) - Добавлена структура словаря
sparse_hashed, функционально эквивалентная структуреhashed, но более эффективно использующая память. Она использует примерно вдвое меньше памяти ценой более медленного получения значений. #6894 (Azat Khuzhin) - Реализована возможность задавать список пользователей для доступа к словарям. Используется только для текущей подключённой базы данных. #6907 (Guillaume Tassery)
- В запрос
SHOWдобавлена опцияLIMIT. #6944 (Philipp Malkovsky) - Добавлена функция
bitmapSubsetLimit(bitmap, range_start, limit), которая возвращает подмножество из наименьшихlimitзначений в наборе, не меньшихrange_start. #6957 (Zhichang Yu) - Добавлены функции
bitmapMinиbitmapMax. #6970 (Zhichang Yu) - Добавлена функция
repeat, связанная с issue-6648 #6999 (flynn)
Экспериментальные возможности
- Реализован вариант Merge JOIN (в памяти), который не изменяет текущий конвейер. Результат частично отсортирован по ключу слияния. Чтобы использовать эту возможность, установите
partial_merge_join = 1. Merge JOIN всё ещё находится в разработке. #6940 (Artem Zuikov) - Добавлены движок
S3и табличная функция. Они всё ещё находятся в разработке (поддержка authentication пока отсутствует). #5596 (Vladimir Chebotarev)
Улучшения
- Каждое сообщение, прочитанное из Kafka, вставляется атомарно. Это решает почти все известные проблемы с движком Kafka. #6950 (Ivan)
- Улучшен failover для распределенных запросов. Сокращено время восстановления; кроме того, этот параметр теперь можно настраивать и видеть в
system.clusters. #6399 (Vasily Nemkov) - Добавлена поддержка числовых значений для Enum напрямую в операторе
IN. #6766 #6941 (dimarub2000) - Добавлена поддержка перенаправлений в URL-хранилище (необязательно, по умолчанию отключено). #6914 (maqroll)
- Добавлено информационное сообщение при подключении к серверу клиента более старой версии. #6893 (Philipp Malkovsky)
- Удалено ограничение на максимальное время ожидания задержки при отправке данных в Distributed-таблицах #6895 (Azat Khuzhin)
- Добавлена возможность отправлять profile events (счетчики) с накопительными значениями в Graphite. Это можно включить в
<events_cumulative>в серверномconfig.xml. #6969 (Azat Khuzhin) - Добавлено автоматическое приведение типа
TкLowCardinality(T)при вставке данных в столбец типаLowCardinality(T)в формате Native через HTTP. #6891 (Nikolai Kochetov) - Добавлена возможность использовать функцию
hexбезreinterpretAsStringдляFloat32,Float64. #7024 (Mikhail Korotov)
улучшение сборки/тестирования/упаковки
- В бинарный файл clickhouse с отладочной информацией добавлен gdb-index. Это ускорит запуск
gdb. #6947 (alesapin) - Ускорена сборка deb-пакетов с помощью пропатченного dpkg-deb, который использует
pigz. #6960 (alesapin) - Для включения инструментирования всего кода проекта через libfuzzer установлено
enable_fuzzing = 1. #7042 (kyprizel) - В CI добавлен smoke-тест раздельной сборки. #7061 (alesapin)
- В CI добавлена сборка с MemorySanitizer. #7066 (Alexander Kuzmenkov)
libsparsehashзаменён наsparsehash-c11#6965 (Azat Khuzhin)
Исправление ошибки
- Исправлена деградация производительности анализа индексов для сложных ключей в больших таблицах. Это исправляет #6924. #7075 (alexey-milovidov)
- Исправлена логическая ошибка, вызывавшая segfault при чтении из пустого топика Kafka. #6909 (Ivan)
- Исправлено слишком раннее закрытие соединения MySQL в
MySQLBlockInputStream.cpp. #6882 (Clément Rodriguez) - Возвращена поддержка очень старых ядер Linux (исправление #6841) #6853 (alexey-milovidov)
- Исправлена возможная потеря данных в запросе
insert selectв случае пустого блока во входном потоке. #6834 #6862 #6911 (Nikolai Kochetov) - Исправлена функция
АrrayEnumerateUniqRankedдля случая пустых массивов в параметрах. #6928 (proller) - Исправлены сложные запросы с ARRAY JOIN и глобальными подзапросами. #6934 (Ivan)
- Исправлена ошибка
Unknown identifierв ORDER BY и GROUP BY при использовании нескольких JOIN. #7022 (Artem Zuikov) - Исправлено предупреждение
MSanпри выполнении функции с аргументомLowCardinality. #7062 (Nikolai Kochetov)
Обратно несовместимое изменение
- Изменён формат сериализации состояний агрегатной функции bitmap* для повышения производительности. Сериализованные состояния bitmap* из предыдущих версий больше не читаются. #6908 (Zhichang Yu)
Релиз ClickHouse 19.14
Релиз ClickHouse 19.14.7.15, 2019-10-02
Исправление ошибки
- Этот релиз также включает все исправления ошибок из версии 19.11.12.69.
- Исправлена совместимость распределённых запросов между версией 19.14 и более ранними версиями. Это исправление устраняет проблему #7068. #7069 (alexey-milovidov)
Релиз ClickHouse 19.14.6.12, 2019-09-19
Исправление ошибки
- Исправлена работа функции
АrrayEnumerateUniqRankedв случае пустых массивов в параметрах. #6928 (proller) - Исправлено имя подзапроса в запросах с
ARRAY JOINиGLOBAL IN subqueryпри использовании псевдонима. Если псевдоним указан, он используется как имя внешней таблицы. #6934 (Ivan)
Улучшения сборки/тестирования/упаковки
- Исправлен нестабильный тест
00715_fetch_merged_or_mutated_part_zookeeper: его переписали на shell-скрипт, так как в нём нужно дождаться применения мутаций. #6977 (Alexander Kazakov) - Исправлен сбой UBSan и MemSan в функции
groupUniqArrayпри пустом массиве в качестве аргумента. Он был вызван помещением пустогоPaddedPODArrayв нулевую ячейку хеш-таблицы, поскольку не вызывался конструктор значения нулевой ячейки. #6937 (Amos Bird)
Релиз ClickHouse 19.14.3.3, 2019-09-10
Новая возможность
- Модификатор
WITH FILLдляORDER BY. (продолжение #5069) #6610 (Anton Popov) - Модификатор
WITH TIESдляLIMIT. (продолжение #5069) #6610 (Anton Popov) - Разбирать литерал
NULLбез кавычек как NULL (если включена настройкаformat_csv_unquoted_null_literal_as_null=1). Инициализировать поля null значениями по умолчанию, если тип данных этого поля не Nullable (если включена настройкаinput_format_null_as_default=1). #5990 #6055 (tavplubix) - Поддержка подстановочных шаблонов в путях табличных функций
fileиhdfs. Если путь содержит подстановочные шаблоны, таблица будет доступна в режиме только для чтения. Пример использования:select * from hdfs('hdfs://hdfs1:9000/some_dir/another_dir/*/file{0..9}{0..9}')иselect * from file('some_dir/{some_file,another_file,yet_another}.tsv', 'TSV', 'value UInt32'). #6092 (Olga Khvostikova) - Новая таблица
system.metric_log, которая хранит значенияsystem.eventsиsystem.metricsчерез заданный интервал времени. #6363 #6467 (Nikita Mikhaylov) #6530 (alexey-milovidov) - Добавлена возможность записывать текстовые журналы ClickHouse в таблицу
system.text_log. #6037 #6103 (Nikita Mikhaylov) #6164 (alexey-milovidov) - Показываются закрытые символы в трассировках стека (это делается путём разбора таблиц символов ELF-файлов). В трассировки стека добавлена информация о файле и номере строки, если доступна отладочная информация. Ускорен поиск имён символов за счёт индексации символов, присутствующих в программе. Добавлены новые SQL-функции для интроспекции:
demangleиaddressToLine. ФункцияsymbolizeAddressпереименована вaddressToSymbolдля единообразия. ФункцияaddressToSymbolв целях производительности будет возвращать манглированное имя, поэтому необходимо применятьdemangle. Добавлена настройкаallow_introspection_functions, которая по умолчанию отключена. #6201 (alexey-milovidov) - Табличная функция
values(имя — регистронезависимое). Позволяет читать данные из спискаVALUES, предложенного в #5984. Пример:SELECT * FROM VALUES('a UInt64, s String', (1, 'one'), (2, 'two'), (3, 'three')). #6217. #6209 (dimarub2000) - Добавлена возможность изменять параметры хранилища. Синтаксис:
ALTER TABLE <table> MODIFY SETTING <setting> = <value>. #6366 #6669 #6685 (alesapin) - Добавлена поддержка удаления отсоединённых частей. Синтаксис:
ALTER TABLE <table_name> DROP DETACHED PART '<part_id>'. #6158 (tavplubix) - Ограничения таблиц. Позволяет добавлять ограничения в определение таблицы, которые проверяются при вставке. #5273 (Gleb Novikov) #6652 (alexey-milovidov)
- Поддержка каскадных materialized views. #6324 (Amos Bird)
- Профилировщик запросов теперь включён по умолчанию и раз в секунду снимает сэмплы со всех потоков выполнения запроса. #6283 (alexey-milovidov)
- Входной формат
ORC. #6454 #6703 (akonyaev90) - Добавлены две новые функции:
sigmoidиtanh(полезные для задач машинного обучения). #6254 (alexey-milovidov) - Функции
hasToken(haystack, token),hasTokenCaseInsensitive(haystack, token)для проверки наличия заданного токена в haystack. Токен — это подстрока максимальной длины между двумя ASCII-символами, не являющимися буквенно-цифровыми (или границами haystack). Токен должен быть константной строкой. Поддерживается специализацией индекса tokenbf_v1. #6596, #6662 (Vasily Nemkov) - Новая функция
neighbor(value, offset[, default_value]). Позволяет получить предыдущее/следующее значение в столбце в пределах блока данных. #5925 (Alex Krash) 6685365ab8c5b74f9650492c88a012596eb1b0c6 341e2e4587a18065c2da1ca888c73389f48ce36c Alexey Milovidov - Создана функция
currentUser(), которая возвращает логин авторизованного пользователя. Для совместимости с MySQL добавлен псевдонимuser(). #6470 (Alex Krash) - Новые агрегатные функции
quantilesExactInclusiveиquantilesExactExclusive, добавленные по предложению из #5885. #6477 (dimarub2000) - Функция
bitmapRange(bitmap, range_begin, range_end), которая возвращает новое множество для указанного диапазона (безrange_end). #6314 (Zhichang Yu) - Функция
geohashesInBox(longitude_min, latitude_min, longitude_max, latitude_max, precision), которая создаёт массив строк длины precision с геохешами ячеек, покрывающих указанную область. #6127 (Vasily Nemkov) - Добавлена поддержка запросов INSERT для таблиц
Kafka. #6012 (Ivan) - Добавлена поддержка виртуальных столбцов
_partitionи_timestampдля движка Kafka. #6400 (Ivan) - Возможность удалять конфиденциальные данные из
query_log, серверных журналов и списка процессов по правилам на основе регулярных выражений. #5710 (filimonov)
Экспериментальные возможности
- Формат входных и выходных данных
Template. Позволяет задавать пользовательскую format string для ввода и вывода. #4354 #6727 (tavplubix) - Реализованы таблицы
LIVE VIEW, первоначально предложенные в #2898, подготовленные в #3925 и затем обновлённые в #5541. Подробное описание см. в #5541. #5541 (vzakaznikov) #6425 (Nikolai Kochetov) #6656 (vzakaznikov) Обратите внимание, что возможностьLIVE VIEWможет быть удалена в следующих версиях.
Исправление ошибки
- В этот выпуск также включены все исправления ошибок из версий 19.13 и 19.11.
- Исправлена ошибка сегментации, когда у таблицы есть skip-индексы и происходит Вертикальное слияние. #6723 (alesapin)
- Исправлен per-column TTL для столбцов с нетривиальными значениями по умолчанию. Ранее при принудительном TTL-слиянии запросом
OPTIMIZE ... FINALистёкшие значения заменялись значениями типа по умолчанию, а не заданными пользователем значениями по умолчанию для столбца. #6796 (Anton Popov) - Исправлена проблема дублирования сообщений Kafka при штатном перезапуске сервера. #6597 (Ivan)
- Исправлен бесконечный цикл при чтении сообщений из Kafka. Не следует вообще приостанавливать/возобновлять consumer для subscription — иначе в некоторых сценариях он может остаться приостановленным на неопределённое время. #6354 (Ivan)
- Исправлено исключение
Key expression contains comparison between inconvertible typesв функцииbitmapContains. #6136 #6146 #6156 (dimarub2000) - Исправлен segfault при включенной настройке
optimize_skip_unused_shardsи отсутствии ключа сегментирования. #6384 (Anton Popov) - Исправлен некорректный код в мутациях, который мог приводить к повреждению памяти. Исправлен segfault при чтении по адресу
0x14c0, который мог возникать при одновременномDROP TABLEиSELECTизsystem.partsилиsystem.parts_columns. Исправлено состояние гонки при подготовке запросов мутации. Исправлена взаимная блокировка, вызваннаяOPTIMIZEтаблиц Replicated и одновременными операциями модификации, такими как ALTER. #6514 (alexey-milovidov) - Удалено избыточно подробное логирование в интерфейсе MySQL #6389 (alexey-milovidov)
- Возвращена возможность разбирать логические настройки из значений ‘true’ и ‘false’ в файле конфигурации. #6278 (alesapin)
- Исправлено аварийное завершение в функциях
quantileиmedianпри работе сNullable(Decimal128). #6378 (Artem Zuikov) - Исправлена возможная ошибка, из-за которой запрос
SELECTс условиемWHEREпо primary key, содержащим преобразование к типу Float, мог возвращать неполный результат. Причиной была некорректная проверка монотонности в функцииtoFloat. #6248 #6374 (dimarub2000) - Проверка настройки
max_expanded_ast_elementsдля мутаций. Очистка мутаций послеTRUNCATE TABLE. #6205 (Winter Zhang) - Исправлен результат JOIN для столбцов ключа при использовании
join_use_nulls. Подставляются NULL вместо значений столбцов по умолчанию. #6249 (Artem Zuikov) - Исправлены индексы пропуска при Вертикальном слиянии и alter. Исправлено исключение
Bad size of marks file. #6594 #6713 (alesapin) - Исправлено редкое падение в
ALTER MODIFY COLUMNи при вертикальном слиянии, когда одна из слитых/изменённых частей пуста (0 строк) #6746 #6780 (alesapin) - Исправлена ошибка при преобразовании типов
LowCardinalityвAggregateFunctionFactory. Это исправление устраняет проблему #6257. #6281 (Nikolai Kochetov) - Исправлены некорректное поведение и возможные segfault в агрегатных функциях
topKиtopKWeighted. #6404 (Anton Popov) - Исправлен небезопасный код, связанный с функцией
getIdentifier. #6401 #6409 (alexey-milovidov) - Исправлена ошибка в протоколе MySQL, который используется при подключении к ClickHouse из клиента MySQL. Причиной было переполнение буфера кучи в
PacketPayloadWriteBuffer. #6212 (Yuriy Baranov) - Исправлена утечка памяти в функции
bitmapSubsetInRange. #6819 (Zhichang Yu) - Исправлена редкая ошибка при выполнении мутации после изменения гранулярности. #6816 (alesapin)
- По умолчанию разрешены сообщения Protobuf со всеми полями. #6132 (Vitaly Baranov)
- Исправлена ошибка в функции
nullIf, возникавшая при передачеNULLв качестве второго аргумента. #6446 (Guillaume Tassery) - Исправлена редкая ошибка, связанная с некорректным выделением/освобождением памяти в словарях типа cache со сложным ключом и строковыми полями, которая приводила к неограниченному потреблению памяти (похоже на утечку памяти). Ошибка воспроизводилась, когда размер строки был степенью двойки, начиная с восьми (8, 16, 32 и т. д.). #6447 (alesapin)
- Исправлено кодирование Gorilla для коротких последовательностей, из-за которого возникало исключение
Cannot write after end of buffer. #6398 #6444 (Vasily Nemkov) - Разрешено использовать типы, не допускающие NULL, в JOIN при включенной
join_use_nulls. #6705 (Artem Zuikov) - Отключены подстановки
Poco::AbstractConfigurationв запросах вclickhouse-client. #6706 (alexey-milovidov) - Предотвращена взаимная блокировка в
REPLACE PARTITION. #6677 (alexey-milovidov) - Использование
arrayReduceс константными аргументами может приводить к ошибке сегментации. #6242 #6326 (alexey-milovidov) - Исправлены неконсистентные части, которые могли появиться, если реплика была восстановлена после
DROP PARTITION. #6522 #6523 (tavplubix) - Устранено зависание в функции
JSONExtractRaw. #6195 #6198 (alexey-milovidov) - Исправлена ошибка, связанная с некорректной сериализацией индексов пропуска и агрегированием при использовании адаптивной гранулярности. #6594. #6748 (alesapin)
- Исправлены модификаторы
WITH ROLLUPиWITH CUBEвGROUP BYпри двухуровневой агрегации. #6225 (Anton Popov) - Исправлена ошибка при записи меток вторичных индексов с адаптивной гранулярностью. #6126 (alesapin)
- Исправлен порядок инициализации при запуске сервера. Поскольку
StorageMergeTree::background_task_handleинициализируется вstartup(),MergeTreeBlockOutputStream::write()может попытаться использовать его до инициализации. Теперь просто проверяется, был ли он инициализирован. #6080 (Ivan) - Очистка буфера данных после предыдущей операции чтения, завершившейся ошибкой. #6026 (Nikolay)
- Исправлена ошибка при включении адаптивной гранулярности при создании новой реплики для таблицы семейства Replicated*MergeTree. #6394 #6452 (alesapin)
- Исправлен возможный сбой при запуске сервера, если в
libunwindвозникало Исключение во время обработки другого исключения при обращении к неинициализированной структуреThreadStatus. #6456 (Nikita Mikhaylov) - Исправлен сбой в функции
yandexConsistentHash. Выявлено с помощью фазз-тестирования. #6304 #6305 (alexey-milovidov) - Исправлена проблема, из-за которой запросы могли зависать, когда сервер перегружен и глобальный пул потоков почти полностью занят. Это с большей вероятностью происходит в кластерах с большим числом сегментов (сотни), поскольку распределённые запросы выделяют по одному потоку на соединение с каждым сегментом. Например, эта проблема может воспроизводиться, если кластер из 330 сегментов обрабатывает 30 параллельных распределённых запросов. Эта проблема затрагивает все версии, начиная с 19.2. #6301 (alexey-milovidov)
- Исправлена логика работы функции
arrayEnumerateUniqRanked. #6423 (alexey-milovidov) - Исправлен segfault при декодировании таблицы символов. #6603 (Amos Bird)
- Исправлено лишнее исключение при приведении
LowCardinality(Nullable)к столбцу not-Nullable в случае, если он не содержит значений NULL (например, в запросе видаSELECT CAST(CAST('Hello' AS LowCardinality(Nullable(String))) AS String). #6094 #6119 (Nikolai Kochetov) - Убраны лишние кавычки в описании в таблице
system.settings. #6696 #6699 (alexey-milovidov) - Устранена возможная взаимная блокировка при
TRUNCATEтаблицы Replicated. #6695 (alexey-milovidov) - Исправлено чтение в порядке, заданном ключом сортировки. #6189 (Anton Popov)
- Исправлен запрос
ALTER TABLE ... UPDATEдля таблиц сenable_mixed_granularity_parts=1. #6543 (alesapin) - Исправлена ошибка из #4405 (начиная с 19.4.0). Воспроизводится в запросах к таблицам Distributed поверх таблиц MergeTree, когда не запрашивается ни один столбец (
SELECT 1). #6236 (alesapin) - Исправлено переполнение при целочисленном делении из знакового типа в беззнаковый. Поведение было в точности таким же, как в языке C или C++ (правила целочисленного продвижения), что могло оказаться неожиданным. Обратите внимание, что переполнение по-прежнему возможно при делении большого знакового числа на большое беззнаковое число или наоборот (хотя такой случай встречается реже). Эта проблема существовала во всех версиях сервера. #6214 #6233 (alexey-milovidov)
- Ограничено максимальное время паузы при throttling, когда задан
max_execution_speedилиmax_execution_speed_bytes. Исправлены ложные ошибки видаEstimated query execution time (inf seconds) is too long. #5547 #6232 (alexey-milovidov) - Исправлены проблемы при использовании столбцов
MATERIALIZEDи псевдонимов вMaterializedView. #448 #3484 #3450 #2878 #2285 #3796 (Amos Bird) #6316 (alexey-milovidov) - Исправлено поведение
FormatFactoryдля входных потоков, не реализованных в виде процессора. #6495 (Nikolai Kochetov) - Исправлена опечатка. #6631 (Alex Ryndin)
- Исправлена опечатка в сообщении об ошибке ( is -> are ). #6839 (Denis Zhuravlev)
- Исправлена ошибка при разборе из строки списка столбцов, если тип содержал запятую (эта проблема касалась хранилищ
File,URL,HDFS) #6217. #6209 (dimarub2000)
Исправления безопасности
- Этот релиз также содержит все исправления ошибок безопасности из версий 19.13 и 19.11.
- Устранена возможность того, что специально сформированный запрос мог вызвать сбой сервера из-за переполнения стека в SQL-парсере. Также устранена возможность переполнения стека в таблицах Merge и Distributed, materialized view и условиях безопасности на уровне строк, включающих подзапросы. #6433 (alexey-milovidov)
Улучшения
- Корректная реализация трёхзначной логики для
AND/OR. #6048 (Alexander Kazakov) - Теперь значения и строки с истёкшим TTL будут удаляться после запроса
OPTIMIZE ... FINALиз старых частей без информации о TTL или с устаревшей информацией о TTL, например после запросаALTER ... MODIFY TTL. Добавлены запросыSYSTEM STOP/START TTL MERGES, позволяющие запрещать/разрешать назначение слияний с TTL и отфильтровывать истёкшие значения во всех слияниях. #6274 (Anton Popov) - Возможность изменить расположение файла истории ClickHouse для клиента с помощью переменной среды
CLICKHOUSE_HISTORY_FILE. #6840 (filimonov) - Удалён флаг
dry_runизInterpreterSelectQuery. … #6375 (Nikolai Kochetov) - Добавлена поддержка
ASOF JOINв секцииON. #6211 (Artem Zuikov) - Улучшена поддержка индексов пропуска данных в мутациях и репликации. Добавлена поддержка запроса
MATERIALIZE/CLEAR INDEX ... IN PARTITION.UPDATE x = xпересчитывает все индексы, использующие столбецx. #5053 (Nikita Vasilev) - Разрешён
ATTACHlive views (например, при запуске сервера) независимо от настройкиallow_experimental_live_view. #6754 (alexey-milovidov) - В трассировки стека, собранные профилировщиком запросов, не включать кадры стека, созданные самим профилировщиком запросов. #6250 (alexey-milovidov)
- Теперь в табличных функциях
values,file,url,hdfsпоявилась поддержка ALIAS-столбцов. #6255 (alexey-milovidov) - Сгенерировать исключение, если файл
config.dне содержит того же корневого элемента, что и файл config. #6123 (dimarub2000) - Добавлен вывод дополнительной информации в сообщении об исключении при
no space left on device. #6182, #6252 #6352 (tavplubix) - При определении сегментов таблицы
Distributed, к которым должен обращаться запрос на чтение (дляoptimize_skip_unused_shards= 1), ClickHouse теперь проверяет условия как из секцииprewhere, так и из секцииwhereоператораselect. #6521 (Alexander Kazakov) - Добавлена поддержка
SIMDJSONдля машин без AVX2, но с набором инструкций SSE 4.2 и PCLMUL. #6285 #6320 (alexey-milovidov) - ClickHouse может работать в файловых системах без поддержки
O_DIRECT(например, ZFS и BtrFS) без дополнительной настройки. #4449 #6730 (alexey-milovidov) - Поддержка проталкивания предиката для FINAL-подзапроса. #6120 (TCeason) #6162 (alexey-milovidov)
- Улучшено извлечение ключей из
JOIN ON#6131 (Artem Zuikov) - Обновлён
SIMDJSON. #6285. #6306 (alexey-milovidov) - Оптимизирован выбор столбца наименьшего размера для запроса
SELECT count(). #6344 (Amos Bird) - Добавлен параметр
strictвwindowFunnel(). Если заданstrict,windowFunnel()применяет условия только к уникальным значениям. #6548 (achimbab) - Более безопасный интерфейс
mysqlxx::Pool. #6150 (avasiliev) - Ширина строк параметров при выводе справки с параметром
--helpтеперь соответствует размеру терминала. #6590 (dimarub2000) - Отключена оптимизация “чтение по порядку” при агрегации без ключей. #6599 (Anton Popov)
- HTTP-код состояния для кодов ошибок
INCORRECT_DATAиTYPE_MISMATCHбыл изменён со стандартного500 Internal Server Errorна400 Bad Request. #6271 (Alexander Rodin) - Объект JOIN перенесён из
ExpressionActionвAnalyzedJoin.ExpressionAnalyzerиExpressionActionбольше не зависят от классаJoin. Его логика скрыта за интерфейсомAnalyzedJoin. #6801 (Artem Zuikov) - Исправлена возможная взаимная блокировка распределённых запросов, когда один из сегментов находится на localhost, а запрос отправляется по сетевому соединению. #6759 (alexey-milovidov)
- Изменена семантика операции
RENAMEдля нескольких таблиц, чтобы избежать возможных взаимных блокировок. #6757. #6756 (alexey-milovidov) - Переписан сервер совместимости с MySQL, чтобы не загружать в память полезную нагрузку пакета целиком. Потребление памяти для каждого соединения снижено примерно до
2 * DBMS_DEFAULT_BUFFER_SIZE(буферы чтения/записи). #5811 (Yuriy Baranov) - Логика интерпретации алиасов AST вынесена из парсера, который не должен ничего знать о семантике запроса. #6108 (Artem Zuikov)
- Немного более безопасный парсинг
NamesAndTypesList. #6408. #6410 (alexey-milovidov) clickhouse-copier: Разрешено использоватьwhere_conditionиз конфигурации вместе с алиасомpartition_keyв запросе для проверки существования партиции (ранее это использовалось только в запросах на чтение данных). #6577 (proller)- В
throwIfдобавлен необязательный аргумент сообщения. (#5772) #6329 (Vdimir) - Исключение сервера, возникающее при отправке данных для вставки, теперь также обрабатывается клиентом. #5891 #6711 (dimarub2000)
- Добавлена метрика
DistributedFilesToInsert, которая показывает общее число файлов в файловой системе, выбранных таблицами Distributed для отправки на удалённые серверы. Значение суммируется по всем сегментам. #6600 (alexey-milovidov) - Большая часть логики подготовки JOIN перенесена из
ExpressionAction/ExpressionAnalyzerвAnalyzedJoin. #6785 (Artem Zuikov) - Исправлено предупреждение TSan о нарушении порядка блокировок ‘lock-order-inversion’. #6740 (Vasily Nemkov)
- Более информативные сообщения об отсутствии привилегий Linux. Фатальные ошибки теперь записываются с уровнем “fatal”, что упрощает их поиск в
system.text_log. #6441 (alexey-milovidov) - Когда для ограничения использования памяти при
GROUP BYиORDER BYбыла включена выгрузка временных данных на диск, свободное место на диске не проверялось. В исправлении добавлена новая настройкаmin_free_disk_space: если свободного места на диске меньше порогового значения, запрос будет остановлен и будет сгенерировано исключениеErrorCodes::NOT_ENOUGH_SPACE. #6678 (Weiqing Xu) #6691 (alexey-milovidov) - Убрали привязку рекурсивного rwlock к потоку. Это не имеет смысла, потому что потоки повторно используются между запросами. Запрос
SELECTможет захватить блокировку в одном потоке, удерживать её в другом и завершиться в первом. В то же время первый поток может быть повторно использован запросомDROP. Это будет приводить к ложным сообщениям “Attempt to acquire exclusive lock recursively”. #6771 (alexey-milovidov) - Метод
ExpressionAnalyzer.appendJoin()вынесен отдельно. ВExpressionAnalyzerподготовлено место дляMergeJoin. #6524 (Artem Zuikov) - В сервер совместимости с MySQL добавлен плагин аутентификации
mysql_native_password. #6194 (Yuriy Baranov) - Уменьшено число вызовов
clock_gettime; исправлена совместимость ABI между debug и release вAllocator(незначительная проблема). #6197 (alexey-milovidov) - Метод
collectUsedColumnsперенесён изExpressionAnalyzerвSyntaxAnalyzer. ТеперьSyntaxAnalyzerсам формируетrequired_source_columns. #6416 (Artem Zuikov) - Добавлена настройка
joined_subquery_requires_alias, которая требует псевдонимы для вложенных подзапросов и табличных функций вFROM, если там указано более одной таблицы (т. е. в запросах с JOIN). #6733 (Artem Zuikov) - Вынесен класс
GetAggregatesVisitorизExpressionAnalyzer. #6458 (Artem Zuikov) system.query_log: тип данных столбцаtypeизменён наEnum. #6265 (Nikita Mikhaylov)- Статическая линковка плагина аутентификации
sha256_password. #6512 (Yuriy Baranov) - Убрана лишняя зависимость, необходимая для работы настройки
compile. В предыдущих версиях пользователь мог получать ошибки видаcannot open crti.o,unable to find library -lcи т. д. #6309 (alexey-milovidov) - Улучшена проверка входных данных, которые могут поступать от вредоносной реплики. #6303 (alexey-milovidov)
- Теперь файл
clickhouse-obfuscatorдоступен в составе пакетаclickhouse-client. В предыдущих версиях он был доступен под именемclickhouse obfuscator(с пробелом). #5816 #6609 (dimarub2000) - Исправлена взаимная блокировка, возникавшая при наличии как минимум двух запросов, читающих как минимум две таблицы в разном порядке, и ещё одного запроса, выполняющего DDL-операцию над одной из этих таблиц. Исправлена ещё одна, очень редкая взаимная блокировка. #6764 (alexey-milovidov)
- Добавлен столбец
os_thread_idsвsystem.processesиsystem.query_logдля более удобной отладки. #6763 (alexey-milovidov) - Обходное решение для ошибок в расширении PHP mysqlnd, которые возникают, когда
sha256_passwordиспользуется в качестве плагина authentication по умолчанию (описано в #6031). #6113 (Yuriy Baranov) - Убрано лишнее место в столбцах с изменённой NULL-допустимостью. #6693 (Artem Zuikov)
- Значение
queue_max_wait_msпо умолчанию установлено в ноль, поскольку текущее значение (пять секунд) не имеет смысла. Эта настройка бывает полезна лишь в редких случаях. Для устранения неоднозначности добавлены настройкиreplace_running_query_max_wait_ms,kafka_max_wait_msиconnection_pool_max_wait_ms. #6692 (alexey-milovidov) - Класс
SelectQueryExpressionAnalyzerвыделен изExpressionAnalyzer. Последний оставлен для запросов, отличных от SELECT. #6499 (Artem Zuikov) - Убраны дублирующиеся входные и выходные форматы. #6239 (Nikolai Kochetov)
- Пользователь может переопределять настройки
poll_intervalиidle_connection_timeoutдля соединения. #6230 (alexey-milovidov) MergeTreeтеперь поддерживает дополнительную опциюttl_only_drop_parts(по умолчанию отключена), которая позволяет избежать частичного отсечения частей: если в части истёк срок TTL для всех строк, она удаляется целиком. #6191 (Sergi Vladykin)- Проверка типов для функций set-индекса. Генерируется исключение, если функция получила неверный тип. Это исправляет фазз-тест с UBSan. #6511 (Nikita Vasilev)
Повышение производительности
- Оптимизированы запросы с условием
ORDER BY expressions, где уexpressionsсовпадает префикс с ключом сортировки в таблицахMergeTree. Эта оптимизация управляется настройкойoptimize_read_in_order. #6054 #6629 (Anton Popov) - Разрешено использовать несколько потоков при загрузке и удалении частей. #6372 #6074 #6438 (alexey-milovidov)
- Реализован батч-вариант обновления состояний агрегатных функций. Это может дать прирост производительности. #6435 (alexey-milovidov)
- Для функций
exp,log,sigmoid,tanhиспользуется библиотекаFastOps. FastOps — быстрая библиотека векторной математики от Michael Parakhin (CTO Yandex). Производительность функцийexpиlogвыросла более чем в 6 раз. Функцииexpиlogс аргументомFloat32теперь возвращаютFloat32(в предыдущих версиях они всегда возвращалиFloat64). Теперьexp(nan)может возвращатьinf. Результат функцийexpиlogможет быть не ближайшим к истинному ответу машинно-представимым числом. #6254 (alexey-milovidov) Используется вариант Danila Kutenin, чтобыFastOpsработал #6317 (alexey-milovidov) - Отключена оптимизация последовательного ключа для
UInt8/16. #6298 #6701 (akuzm) - Улучшена производительность библиотеки
simdjsonза счёт отказа от динамического выделения памяти вParsedJson::Iterator. #6479 (Vitaly Baranov) - Добавлено предварительное отображение страниц в память при выделении памяти с помощью
mmap(). #6667 (akuzm) - Исправлена проблема с производительностью при сравнении
Decimal. #6380 (Artem Zuikov)
Улучшения сборки/тестирования/упаковки
- Удалён Compiler (инстанцирование шаблонов во время выполнения), так как нам удалось превзойти его по производительности. #6646 (alexey-milovidov)
- Добавлен тест производительности, чтобы в более изолированном виде показать деградацию производительности в gcc-9. #6302 (alexey-milovidov)
- Добавлена табличная функция
numbers_mt— многопоточная версияnumbers. Обновлены тесты производительности для хеш-функций. #6554 (Nikolai Kochetov) - Режим сравнения в
clickhouse-benchmark#6220 #6343 (dimarub2000) - По возможности улучшен вывод трассировок стека. Также добавлен
SIGPROFв качестве отладочного сигнала для вывода трассировки стека работающего потока. #6529 (alexey-milovidov) - Каждая функция в отдельном файле, часть 10. #6321 (alexey-milovidov)
- Удалена продублированная константа
TABLE_IS_READ_ONLY. #6566 (filimonov) - Изменения форматирования
StringHashMapв PR #5417. #6700 (akuzm) - Улучшен подзапрос, используемый для создания JOIN, в
ExpressionAnalyzer. #6824 (Artem Zuikov) - Удалено избыточное условие (обнаруженное с помощью PVS Studio). #6775 (akuzm)
- Для
ReverseIndexвыделен отдельный интерфейс хеш-таблицы. #6672 (akuzm) - Рефакторинг настроек. #6689 (alesapin)
- Добавлены комментарии к функциям индекса
set. #6319 (Nikita Vasilev) - Повышен OOM score в отладочной версии для Linux. #6152 (akuzm)
- Поддержка HDFS HA теперь работает в отладочной сборке. #6650 (Weiqing Xu)
- Добавлен тест в
transform_query_for_external_database. #6388 (alexey-milovidov) - Добавлен тест для нескольких materialized view таблицы Kafka. #6509 (Ivan)
- Улучшена схема сборки. #6500 (Ivan)
- Исправлен интеграционный тест
test_external_dictionariesдля случая, когда он выполнялся пользователем без прав root. #6507 (Nikolai Kochetov) - Ошибка возникает, когда суммарный размер записанных пакетов превышает
DBMS_DEFAULT_BUFFER_SIZE. #6204 (Yuriy Baranov) - Добавлен тест на состояние гонки при
RENAMEтаблицы #6752 (alexey-milovidov) - Устранено состояние гонки в Settings в
KILL QUERY. #6753 (alexey-milovidov) - Добавлен интеграционный тест для обработки ошибок в словаре типа cache. #6755 (Vitaly Baranov)
- Отключён разбор ELF-файлов объектов в Mac OS, поскольку в этом нет смысла. #6578 (alexey-milovidov)
- Попытка улучшить генератор changelog. #6327 (alexey-milovidov)
- Добавлен флаг
-Wshadowв GCC. #6325 (kreuzerkrieg) - Удалён устаревший код поддержки
mimalloc. #6715 (alexey-milovidov) zlib-ngопределяет возможности x86 и сохраняет эту информацию в глобальных переменных. Это происходит при вызовеdefalteInit, который может одновременно выполняться в разных потоках. Чтобы избежать записи из нескольких потоков, делайте это при запуске библиотеки. #6141 (akuzm)- Регрессионный тест для ошибки, связанной с JOIN, которая была исправлена в #5192. #6147 (Bakhtiyor Ruziev)
- Исправлен отчёт MSan. #6144 (alexey-milovidov)
- Исправлен флапающий тест TTL. #6782 (Anton Popov)
- Устранена ложная гонка данных в поле
MergeTreeDataPart::is_frozen. #6583 (alexey-milovidov) - Исправлены тайм-ауты в fuzz-тесте. В предыдущей версии тест выявлял ложное зависание в запросе
SELECT * FROM numbers_mt(gccMurmurHash('')). #6582 (alexey-milovidov) - Добавлены отладочные проверки при
static_castстолбцов. #6581 (alexey-milovidov) - Добавлена поддержка Oracle Linux в официальных RPM-пакетах. #6356 #6585 (alexey-milovidov)
- Для json perftests тип изменён с
onceнаloop. #6536 (Nikolai Kochetov) odbc-bridge.cppсодержит определениеmain(), поэтому его не следует включать вclickhouse-lib. #6538 (Orivej Desh)- Тест на падение при
FULL|RIGHT JOINс NULL в ключах правой таблицы. #6362 (Artem Zuikov) - Добавлен тест на ограничение при раскрытии псевдонимов на всякий случай. #6442 (alexey-milovidov)
- Где это уместно, перешли с
boost::filesystemнаstd::filesystem. #6253 #6385 (alexey-milovidov) - RPM-пакеты добавлены на сайт. #6251 (alexey-milovidov)
- Добавлен тест для исправленного исключения
Unknown identifierв секцииIN. #6708 (Artem Zuikov) - Упростили
shared_ptr_helper, так как многим было сложно понять, как он работает. #6675 (alexey-milovidov) - Добавлены тесты производительности для исправленных кодеков Gorilla и DoubleDelta. #6179 (Vasily Nemkov)
- Интеграционный тест
test_dictionariesразделён на 4 отдельных теста. #6776 (Vitaly Baranov) - Исправлено предупреждение PVS-Studio в
PipelineExecutor. #6777 (Nikolai Kochetov) - Разрешено использовать источник словаря
libraryс ASan. #6482 (alexey-milovidov) - Добавлена возможность генерировать список изменений по списку PR. #6350 (alexey-milovidov)
- Блокировка хранилища
TinyLogпри чтении. #6226 (akuzm) - Проверка на наличие битых символьных ссылок в CI. #6634 (alexey-milovidov)
- Увеличен тайм-аут для теста “stack overflow”, поскольку в отладочной сборке его выполнение может занимать много времени. #6637 (alexey-milovidov)
- Добавлена проверка двойных пробелов. #6643 (alexey-milovidov)
- Исправлено отслеживание памяти для
new/deleteпри сборке с санитайзерами. Это отслеживание не вполне прозрачно: оно лишь предотвращает исключения из-за лимита памяти в тестах. #6450 (Artem Zuikov) - Вновь включена проверка неопределённых символов при линковке. #6453 (Ivan)
- Убрана ежедневная пересборка
hyperscan. #6307 (alexey-milovidov) - Исправлена ошибка, выявленная UBSan, в
ProtobufWriter. #6163 (alexey-milovidov) - Запрещено использовать профилировщик запросов с санитайзерами, поскольку они несовместимы. #6769 (alexey-milovidov)
- Добавлен тест на повторную загрузку словаря после сбоя по таймеру. #6114 (Vitaly Baranov)
- Исправлено несоответствие типа аргумента в
PipelineExecutor::prepareProcessor. #6494 (Nikolai Kochetov) - Добавлен тест для некорректных URI. #6493 (alexey-milovidov)
- Добавлены дополнительные проверки в функцию
CAST. Это должно дать больше информации об ошибке сегментации в fuzzy-тесте. #6346 (Nikolai Kochetov) - Добавлена поддержка
gcc-9в контейнереdocker/builder, который локально собирает образ. #6333 (Gleb Novikov) - Тестирование первичного ключа с
LowCardinality(String). #5044 #6219 (dimarub2000) - Исправлены тесты, затронутые медленным выводом трассировок стека. #6315 (alexey-milovidov)
- Добавлен тест для сбоя в
groupUniqArray, исправленного в #6029. #4402 #6129 (akuzm) - Исправлены тесты мутаций индексов. #6645 (Nikita Vasilev)
- В тесте производительности не читать журнал запросов для тех запросов, которые мы не запускали. #6427 (akuzm)
- materialized view теперь можно создавать с любыми типами LowCardinality независимо от настройки, связанной с подозрительными типами LowCardinality. #6428 (Olga Khvostikova)
- Обновлены тесты для параметра
send_logs_level. #6207 (Nikolai Kochetov) - Исправлена сборка под gcc-8.2. #6196 (Max Akhmedov)
- Исправлена сборка при использовании внутреннего libc++. #6724 (Ivan)
- Исправлена сборка с общей библиотекой
rdkafka#6101 (Ivan) - Исправления для сборки под Mac OS (неполные). #6390 (alexey-milovidov) #6429 (alex-zaitsev)
- Исправлена сборка с разделением. #6618 (alexey-milovidov)
- Другие исправления сборки: #6186 (Amos Bird) #6486 #6348 (vxider) #6744 (Ivan) #6016 #6421 #6491 (proller)
Обратно несовместимое изменение
- Удалены редко используемая табличная функция
catBoostPoolи хранилищеCatBoostPool. Если вы использовали эту табличную функцию, напишите наfeedback@clickhouse.com. Обратите внимание, что интеграция с CatBoost сохраняется и будет поддерживаться. #6279 (alexey-milovidov) ANY RIGHT JOINиANY FULL JOINпо умолчанию отключены. Чтобы включить их, задайте настройкуany_join_distinct_right_table_keys. #5126 #6351 (Artem Zuikov)
Релиз ClickHouse 19.13
Релиз ClickHouse 19.13.6.51, 2019-10-02
Исправление ошибки
- В этот выпуск также вошли все исправления ошибок из версии 19.11.12.69.
Релиз ClickHouse 19.13.5.44, 2019-09-20
Исправление ошибки
- Этот выпуск также содержит все исправления ошибок из 19.14.6.12.
- Исправлено возможное несогласованное состояние таблицы при выполнении запроса
DROPдля реплицируемой таблицы, когда ZooKeeper недоступен. #6045 #6413 (Nikita Mikhaylov) - Исправлена возможная гонка данных в StorageMerge. #6717 (alexey-milovidov)
- Исправлена ошибка в профилировщике запросов, приводившая к бесконечному
recvиз сокета. #6386 (alesapin) - Исправлено чрезмерное использование CPU при выполнении функции
JSONExtractRawдля логического значения. #6208 (Vitaly Baranov) - Исправлена регрессия при отправке данных в materialized view. #6415 (Ivan)
- В табличной функции
urlбыла уязвимость, позволявшая злоумышленнику внедрять в запрос произвольные HTTP-заголовки. Эту проблему обнаружил Nikita Tikhomirov. #6466 (alexey-milovidov) - Исправлена бесполезная проверка
ASTв индексе Set. #6510 #6651 (Nikita Vasilev) - Исправлен разбор значений
AggregateFunction, встроенных в запрос. #6575 #6773 (Zhichang Yu) - Исправлено некорректное поведение семейства функций
trim. #6647 (alexey-milovidov)
Релиз ClickHouse 19.13.4.32, 2019-09-10
Исправление ошибки
- Этот релиз также содержит все исправления ошибок безопасности из версий 19.11.9.52 и 19.11.10.54.
- Исправлена гонка данных в таблице
system.partsи в запросеALTER. #6245 #6513 (alexey-milovidov) - Исправлено несоответствие заголовков в потоках, возникавшее при чтении из пустой distributed таблицы с
sampleиprewhere. #6167 (Lixiang Qian) #6823 (Nikolai Kochetov) - Исправлен сбой при использовании условия
INс подзапросом с кортежем. #6125 #6550 (tavplubix) - Исправлен случай с одинаковыми именами столбцов в секции
GLOBAL JOIN ON. #6181 (Artem Zuikov) - Исправлен сбой при приведении к
Decimalтипов, которые этого не поддерживают. Вместо этого теперь генерируется исключение. #6297 (Artem Zuikov) - Исправлен сбой в функции
extractAll(). #6644 (Artem Zuikov) - Преобразование запросов для табличных функций
MySQL,ODBC,JDBCтеперь корректно работает для запросовSELECT ... WHEREс несколькими выражениямиAND. #6381 #6676 (dimarub2000) - Добавлены проверки предыдущих объявлений для интеграции с MySQL 8. #6569 (Rafael David Tinoco)
Исправление уязвимости
- Исправлены две уязвимости в кодеках на этапе распаковки (злоумышленник может сформировать специально подготовленные сжатые данные, что приведёт к переполнению буфера при распаковке). #6670 (Artem Zuikov)
Релиз ClickHouse 19.13.3.26, 2019-08-22
Исправление ошибки
- Исправлен запрос
ALTER TABLE ... UPDATEдля таблиц сenable_mixed_granularity_parts=1. #6543 (alesapin) - Исправлен NPE при использовании оператора IN с подзапросом, возвращающим кортеж. #6125 #6550 (tavplubix)
- Исправлена проблема, из-за которой устаревшая реплика после восстановления могла по-прежнему содержать части данных, удалённые командой DROP PARTITION. #6522 #6523 (tavplubix)
- Исправлена проблема с разбором CSV. #6426 #6559 (tavplubix)
- Исправлено состояние гонки в таблице system.parts и запросе ALTER. Это исправление устраняет #6245. #6513 (alexey-milovidov)
- Исправлен некорректный код в мутациях, который мог приводить к повреждению памяти. Исправлен segfault при чтении по адресу
0x14c0, который мог происходить из-за одновременного выполненияDROP TABLEиSELECTизsystem.partsилиsystem.parts_columns. Исправлено состояние гонки при подготовке запросов мутации. Исправлена взаимная блокировка, вызваннаяOPTIMIZEтаблиц Replicated и одновременными операциями модификации, такими как ALTER. #6514 (alexey-milovidov) - Исправлена возможная потеря данных после запроса
ALTER DELETEдля таблицы с индексом пропуска данных. #6224 #6282 (Nikita Vasilev)
Исправление уязвимости
- Если у атакующего есть доступ на запись в ZooKeeper и возможность запустить собственный сервер, доступный из той же сети, где работает ClickHouse, он может создать специально подготовленный вредоносный сервер, который будет выдавать себя за реплику ClickHouse, и зарегистрировать его в ZooKeeper. Когда другая реплика будет получать часть данных с вредоносной реплики, это может заставить clickhouse-server записать данные по произвольному пути в файловой системе. Обнаружено Eldar Zaitov из команды информационной безопасности Yandex. #6247 (alexey-milovidov)
Релиз ClickHouse 19.13.2.19, 2019-08-14
Новая возможность
- Профилировщик со сэмплированием на уровне запроса. Пример. #4247 (laplab) #6124 (alexey-milovidov) #6250 #6283 #6386
- Разрешено указывать список столбцов с помощью выражения
COLUMNS('regexp'), которое работает как более продвинутый вариант символа*. #5951 (mfridental), (alexey-milovidov) - Теперь можно использовать
CREATE TABLE AS table_function()#6057 (dimarub2000) - Оптимизатор Adam для стохастического градиентного спуска теперь используется по умолчанию в агрегатных функциях
stochasticLinearRegression()иstochasticLogisticRegression(), поскольку он обеспечивает хорошее качество почти без дополнительной настройки. #6000 (Quid37) - Добавлены функции для работы с пользовательским номером недели #5212 (Andy Yang)
- Запросы
RENAMEтеперь работают со всеми хранилищами. #5953 (Ivan) - Теперь клиент может получать журналы сервера любого нужного уровня с помощью настройки
send_logs_level, независимо от уровня журналирования, указанного в настройках сервера. #5964 (Nikita Mikhaylov)
Обратно несовместимое изменение
- Параметр
input_format_defaults_for_omitted_fieldsвключен по умолчанию. Для вставки в таблицы Distributed требуется, чтобы значение этого параметра было одинаковым во всем кластере (его нужно установить перед rolling update). Он включает вычисление сложных выражений по умолчанию для пропущенных полей в форматахJSONEachRowиCSV*. Это ожидаемое поведение, но оно может привести к незначительному изменению производительности. #6043 (Artem Zuikov), #5625 (akuzm)
Экспериментальные возможности
- Новый конвейер обработки запросов. Чтобы включить его, используйте параметр
experimental_use_processors=1. Используйте на свой страх и риск. #4914 (Nikolai Kochetov)
Исправление ошибки
- В этой версии исправлена интеграция Kafka.
- Исправлено кодирование
DoubleDeltaдляInt64при больших значенияхDoubleDelta; также улучшено кодированиеDoubleDeltaдля случайных данных сInt32. #5998 (Vasily Nemkov) - Исправлена завышенная оценка
max_rows_to_read, если настройкаmerge_tree_uniform_read_distributionустановлена в 0. #6019 (alexey-milovidov)
Улучшения
- Генерирует исключение, если в файле
config.dотсутствует корневой элемент, соответствующий файлу конфигурации #6123 (dimarub2000)
Повышение производительности
- Оптимизирован
count(). Теперь он использует наименьший столбец (если это возможно). #6028 (Amos Bird)
Улучшения сборки/тестирования/упаковки
- Добавлен отчёт об использовании памяти в тестах производительности. #5899 (akuzm)
- Исправлена сборка с внешней библиотекой
libcxx#6010 (Ivan) - Исправлена динамическая сборка с библиотекой
rdkafka#6101 (Ivan)
Релиз ClickHouse 19.11
Релиз ClickHouse 19.11.13.74, 2019-11-01
Исправление ошибки
- Исправлено редкое аварийное завершение в
ALTER MODIFY COLUMNи при вертикальном слиянии, когда одна из сливаемых или изменяемых частей пуста (0 строк). #6780 (alesapin) - Ручное обновление
SIMDJSON. Это устраняет возможное засорение файлов stderr ложными диагностическими сообщениями JSON. #7548 (Alexander Kazakov) - Исправлена ошибка с расширением файла
mrkдля мутаций (alesapin)
Релиз ClickHouse 19.11.12.69, 2019-10-02
Исправление ошибки
- Устранена деградация производительности анализа индексов для сложных ключей в больших таблицах. Это исправляет #6924. #7075 (alexey-milovidov)
- Устранён редкий SIGSEGV при отправке данных в таблицах с движком Distributed (
Failed to send batch: file with index XXXXX is absent). #7032 (Azat Khuzhin) - Исправлена ошибка
Unknown identifierв запросах с несколькими JOIN. Это исправляет #5254. #7022 (Artem Zuikov)
Релиз ClickHouse 19.11.11.57, 2019-09-13
- Исправлена логическая ошибка, вызывавшая segfault при выборке из пустого топика Kafka. #6902 #6909 (Ivan)
- Исправлена функция
АrrayEnumerateUniqRankedдля случая с пустыми массивами в параметрах. #6928 (proller)
Релиз ClickHouse 19.11.10.54, 2019-09-10
Исправление ошибки
- Смещения сообщений Kafka теперь сохраняются вручную, чтобы можно было зафиксировать их все разом для всех партиций. Это устраняет возможное дублирование в сценарии «один консьюмер — много партиций». #6872 (Ivan)
Релиз ClickHouse 19.11.9.52, 2019-09-6
- Улучшена обработка ошибок в словарях cache. #6737 (Vitaly Baranov)
- Исправлена ошибка в функции
arrayEnumerateUniqRanked. #6779 (proller) - Исправлена работа функции
JSONExtractпри извлеченииTupleиз JSON. #6718 (Vitaly Baranov) - Исправлена возможная потеря данных после запроса
ALTER DELETEк таблице с индексом пропуска данных. #6224 #6282 (Nikita Vasilev) - Исправлен тест производительности. #6392 (alexey-milovidov)
- Parquet: исправлено чтение булевых столбцов. #6579 (alexey-milovidov)
- Исправлено некорректное поведение функции
nullIfдля константных аргументов. #6518 (Guillaume Tassery) #6580 (alexey-milovidov) - Исправлена проблема с дублированием сообщений Kafka при обычном перезапуске сервера. #6597 (Ivan)
- Исправлена проблема, из-за которой длительные
ALTER UPDATEилиALTER DELETEмогли мешать выполнению обычных слияний. Мутации теперь не выполняются, если недостаточно свободных потоков. #6502 #6617 (tavplubix) - Исправлена ошибка при обработке “timezone” в файле конфигурации сервера. #6709 (alexey-milovidov)
- Исправлены тесты Kafka. #6805 (Ivan)
Исправление уязвимости
- Если у злоумышленника есть доступ на запись в ZooKeeper и он может запустить произвольный сервер, доступный из сети, в которой работает ClickHouse, он может создать специально подготовленный вредоносный сервер, который будет выдавать себя за реплику ClickHouse, и зарегистрировать его в ZooKeeper. Когда другая реплика будет получать часть данных от вредоносной реплики, та сможет заставить clickhouse-server записывать данные по произвольному пути в файловой системе. Обнаружено Eldar Zaitov, командой информационной безопасности Yandex. #6247 (alexey-milovidov)
Релиз ClickHouse 19.11.8.46, 2019-08-22
Исправление ошибки
- Исправлен запрос
ALTER TABLE ... UPDATEдля таблиц сenable_mixed_granularity_parts=1. #6543 (alesapin) - Исправлен NPE при использовании оператора IN с подзапросом, содержащим кортеж. #6125 #6550 (tavplubix)
- Исправлена проблема, из-за которой устаревшая реплика после восстановления могла по-прежнему содержать части данных, удалённые командой DROP PARTITION. #6522 #6523 (tavplubix)
- Исправлена проблема с разбором CSV. #6426 #6559 (tavplubix)
- Исправлено состояние гонки в таблице system.parts и в запросе ALTER. Это исправление для #6245. #6513 (alexey-milovidov)
- Исправлен некорректный код в мутациях, который мог приводить к повреждению памяти. Исправлен segfault при чтении по адресу
0x14c0, который мог происходить из-за параллельныхDROP TABLEиSELECTизsystem.partsилиsystem.parts_columns. Исправлено состояние гонки при подготовке запросов мутации. Исправлена взаимная блокировка, вызваннаяOPTIMIZEтаблиц Replicated и параллельными операциями изменения, такими как ALTER. #6514 (alexey-milovidov)
Релиз ClickHouse 19.11.7.40, 2019-08-14
Исправление ошибки
- В этой версии исправлена интеграция с Kafka.
- Исправлен segfault при использовании
arrayReduceс константными аргументами. #6326 (alexey-milovidov) - Исправлена монотонность функции
toFloat(). #6374 (dimarub2000) - Исправлен segfault при включенном
optimize_skip_unused_shardsи отсутствующем ключе сегментирования. #6384 (CurtizJ) - Исправлена логика функции
arrayEnumerateUniqRanked. #6423 (alexey-milovidov) - Из обработчика MySQL удалено избыточно подробное логирование. #6389 (alexey-milovidov)
- Исправлены некорректное поведение и возможные segfault в агрегатных функциях
topKиtopKWeighted. #6404 (CurtizJ) - Виртуальные столбцы больше не отображаются в таблице
system.columns. Это требуется для обратной совместимости. #6406 (alexey-milovidov) - Исправлена ошибка выделения памяти для строковых полей в словаре cache с составным ключом. #6447 (alesapin)
- Исправлена ошибка при включении adaptive granularity при создании новой реплики для таблицы
Replicated*MergeTree. #6452 (alesapin) - Исправлен бесконечный цикл при чтении сообщений Kafka. #6354 (abyss7)
- Устранена возможность того, что специально сформированный запрос мог вызвать сбой сервера из-за переполнения стека в SQL-парсере, а также возможность переполнения стека в таблицах
MergeиDistributed#6433 (alexey-milovidov) - Исправлена ошибка кодирования Gorilla на коротких последовательностях. #6444 (Enmk)
Улучшения
- Пользователь может переопределять настройки
poll_intervalиidle_connection_timeoutдля подключения. #6230 (alexey-milovidov)
Релиз ClickHouse 19.11.5.28, 2019-08-05
Исправление ошибки
- Устранена возможность зависания запросов при перегрузке сервера. #6301 (alexey-milovidov)
- Исправлен FPE в функции yandexConsistentHash. Исправлена проблема #6304. #6126 (alexey-milovidov)
- Исправлена ошибка при преобразовании типов
LowCardinalityвAggregateFunctionFactory. Исправлена проблема #6257. #6281 (Nikolai Kochetov) - Исправлен разбор настроек
boolиз строкtrueиfalseв файлах конфигурации. #6278 (alesapin) - Исправлена редкая ошибка с несовместимыми заголовками потока в запросах к таблице
Distributed, построенной поверх таблицыMergeTree, когда частьWHEREпереносится вPREWHERE. #6236 (alesapin) - Исправлено переполнение при целочисленном делении значения знакового типа на беззнаковый тип. Исправлена проблема #6214. #6233 (alexey-milovidov)
Обратно несовместимое изменение
Kafkaвсё ещё не работает.
Релиз ClickHouse 19.11.4.24, 2019-08-01
Исправление ошибки
- Исправлена ошибка при записи меток вторичных индексов с адаптивной гранулярностью. #6126 (alesapin)
- Исправлены модификаторы
WITH ROLLUPиWITH CUBEвGROUP BYпри двухуровневой агрегации. #6225 (Anton Popov) - Исправлено зависание в функции
JSONExtractRaw. Исправлено #6195 #6198 (alexey-milovidov) - Исправлен segfault в ExternalLoader::reloadOutdated(). #6082 (Vitaly Baranov)
- Исправлен случай, когда сервер мог закрыть прослушивающие сокеты, но не завершиться и продолжить обрабатывать оставшиеся запросы. В результате могли одновременно работать два процесса clickhouse-server. Иногда сервер мог возвращать ошибку
bad_function_callдля оставшихся запросов. #6231 (alexey-milovidov) - Исправлено бесполезное и некорректное условие для поля update при первоначальной загрузке внешних словарей через ODBC, MySQL, ClickHouse и HTTP. Это исправляет #6069 #6083 (alexey-milovidov)
- Исправлено лишнее исключение при приведении
LowCardinality(Nullable)к столбцу не-Nullable, если он не содержит значений NULL (например, в запросе видаSELECT CAST(CAST('Hello' AS LowCardinality(Nullable(String))) AS String). #6094 #6119 (Nikolai Kochetov) - Исправлен недетерминированный результат агрегатной функции “uniq” в крайне редких случаях. Ошибка присутствовала во всех версиях ClickHouse. #6058 (alexey-milovidov)
- Segfault при установке слишком большого значения CIDR для функции
IPv6CIDRToRange. #6068 (Guillaume Tassery) - Исправлена небольшая утечка памяти, возникавшая, когда сервер генерировал много исключений из множества разных контекстов. #6144 (alexey-milovidov)
- Исправлена ситуация, когда consumer был приостановлен до subscription и после этого не возобновлялся. #6075 (Ivan) Обратите внимание, что Kafka в этой версии не работает.
- Очищается буфер данных Kafka от предыдущей операции чтения, завершившейся ошибкой #6026 (Nikolay) Обратите внимание, что Kafka в этой версии не работает.
- Поскольку
StorageMergeTree::background_task_handleинициализируется вstartup(),MergeTreeBlockOutputStream::write()может попытаться использовать его до инициализации. Нужно просто проверить, инициализирован ли он. #6080 (Ivan)
Улучшения сборки/тестирования/пакетирования
- Добавлены официальные пакеты
rpm. #5740 (proller) (alesapin) - Добавлена возможность собирать пакеты
.rpmи.tgzс помощью скриптаpackager. #5769 (alesapin) - Исправления в системе сборки Arcadia. #6223 (proller)
Обратно несовместимое изменение
Kafkaне работает в этой версии.
Релиз ClickHouse 19.11.3.11, 2019-07-18
Новая возможность
- Добавлена поддержка подготовленных операторов. #5331 (Alexander) #5630 (alexey-milovidov)
- Добавлены кодеки столбцов
DoubleDeltaиGorilla#5600 (Vasily Nemkov) - Добавлена настройка
os_thread_priority, которая позволяет управлять значением “nice” у потоков обработки запросов, используемым ОС для настройки приоритета динамического планирования. Для ее работы требуются привилегииCAP_SYS_NICE. Реализовано в рамках #5858 #5909 (alexey-milovidov) - Реализованы столбцы
_topic,_offset,_keyдля движка Kafka #5382 (Ivan) Обратите внимание, что Kafka не работает в этой версии. - Добавлен комбинатор агрегатной функции
-Resample#5590 (hcz) - Добавлены агрегатные функции
groupArrayMovingSum(win_size)(x)иgroupArrayMovingAvg(win_size)(x), которые вычисляют скользящую сумму/среднее с ограничением размера окна и без него. #5595 (inv2004) - Добавлен синоним
arrayFlatten<->flatten#5764 (hcz) - Интегрирована H3-функция
geoToH3от Uber. #4724 (Remen Ivan) #5805 (alexey-milovidov)
Исправление ошибки
- Реализован DNS-кэш с асинхронным обновлением. Отдельный поток разрешает имена всех хостов и с заданной периодичностью обновляет DNS-кэш (настройка
dns_cache_update_period). Это должно помочь, если IP-адреса хостов часто меняются. #5857 (Anton Popov) - Исправлен segfault в кодеке
Delta, который затрагивал столбцы со значениями размером менее 32 бит. Ошибка приводила к случайному повреждению памяти. #5786 (alesapin) - Исправлен segfault при TTL-слиянии с нефизическими столбцами в блоке. #5819 (Anton Popov)
- Исправлена редкая ошибка при проверке части со столбцом
LowCardinality. Ранее проверкаcheckDataPartвсегда завершалась ошибкой для части со столбцомLowCardinality. #5832 (alesapin) - Предотвращено зависание соединений, когда пул потоков сервера переполнен. Это важно для соединений из табличной функции
remoteили соединений с сегментом без реплик при длительном тайм-ауте соединения. Исправлено в #5878 #5881 (alexey-milovidov) - Поддержка константных аргументов в функции
evalMLModel. Исправлено в #5817 #5820 (alexey-milovidov) - Исправлена проблема, из-за которой ClickHouse определял часовой пояс по умолчанию как
UCTвместоUTC. Это исправление для #5804. #5828 (alexey-milovidov) - Исправлен выход за нижнюю границу буфера в
visitParamExtractRaw. Это исправляет #5901 #5902 (alexey-milovidov) - Теперь распределённые запросы
DROP/ALTER/TRUNCATE/OPTIMIZE ON CLUSTERбудут выполняться напрямую на реплике-лидере. #5757 (alesapin) - Исправлена работа
coalesceдляColumnConstсColumnNullable+ связанные изменения. #5755 (Artem Zuikov) - Исправлен
ReadBufferFromKafkaConsumer: теперь послеcommit()он продолжает читать новые сообщения, даже если до этого зависал #5852 (Ivan) - Исправлены результаты
FULLиRIGHTJOIN при выполнении JOIN по ключамNullableв правой таблице. #5859 (Artem Zuikov) - Возможно, исправлено бесконечное ожидание низкоприоритетных запросов. #5842 (alexey-milovidov)
- Исправлено состояние гонки, из-за которого некоторые запросы могли не попадать в query_log после выполнения запроса
SYSTEM FLUSH LOGS. #5456 #5685 (Anton Popov) - Исправлено предупреждение ASan
heap-use-after-freeв ClusterCopier из-за наблюдения, которое пыталось использовать уже удалённый объект copier. #5871 (Nikolai Kochetov) - Исправлен неверный указатель
StringRef, возвращаемый некоторыми реализациямиIColumn::deserializeAndInsertFromArena. Эта ошибка влияла только на модульные тесты. #5973 (Nikolai Kochetov) - Предотвращено маскирование одноимённых столбцов исходными и промежуточными столбцами ARRAY JOIN. #5941 (Artem Zuikov)
- Исправлены операции вставки и запросы select к движку MySQL при экранировании идентификаторов в стиле MySQL. #5704 (Winter Zhang)
- Теперь запрос
CHECK TABLEможет работать с семейством движков MergeTree. Он возвращает статус проверки и, если есть, сообщение для каждой части (или файла в случае более простых движков). Также исправлена ошибка при получении повреждённой части. #5865 (alesapin) - Исправлен runtime для SPLIT_SHARED_LIBRARIES #5793 (Danila Kutenin)
- Исправлена инициализация часового пояса в случае, когда
/etc/localtimeявляется относительной символической ссылкой, например../usr/share/zoneinfo/Asia/Istanbul#5922 (alexey-milovidov) - clickhouse-copier: Исправлена ошибка use-after-free при завершении работы #5752 (proller)
- Обновлён
simdjson. Исправлена проблема, из-за которой некоторые некорректные JSON-документы, содержащие нулевые байты, успешно разбирались. #5938 (alexey-milovidov) - Исправлено завершение работы SystemLogs #5802 (Anton Popov)
- Исправлено зависание, если условие в invalidate_query зависит от словаря. #6011 (Vitaly Baranov)
Улучшения
- Разрешить использование неразрешимых адресов в конфигурации кластера. Они будут считаться недоступными, и попытка разрешить их будет предприниматься при каждом подключении. Это особенно полезно для Kubernetes. Это исправляет #5714 #5924 (alexey-milovidov)
- Закрытие бездействующих TCP-соединений (по умолчанию с тайм-аутом в один час). Это особенно важно для крупных кластеров с несколькими распределёнными таблицами на каждом сервере, поскольку каждый сервер потенциально может держать пул соединений с каждым другим сервером, и после пикового параллелизма запросов эти соединения будут простаивать. Это исправляет #5879 #5880 (alexey-milovidov)
- Улучшено качество работы функции
topK. Изменено поведение набора SavingSpace: теперь последний элемент удаляется, если новый элемент имеет больший вес. #5833 #5850 (Guillaume Tassery) - URL-функции для работы с доменами теперь поддерживают неполные URL без схемы #5725 (alesapin)
- В таблицу
system.parts_columnsдобавлены хеш-суммы. #5874 (Nikita Mikhaylov) - Добавлен тип данных
Enumкак синонимEnum8илиEnum16. #5886 (dimarub2000) - Полная побитовая транспозиция для кодека
T64. Может дать более эффективное сжатие сzstd. #5742 (Artem Zuikov) - Условие с функцией
startsWithтеперь может использовать первичный ключ. Это исправляет #5310 и #5882 #5919 (dimarub2000) - Разрешено использовать
clickhouse-copierс топологией кластера с перекрёстной репликацией, допуская пустое имя базы данных. #5745 (nvartolomei) - Использовать
UTCв качестве часового пояса по умолчанию в системе безtzdata(например, в обычном Docker-контейнере). До этого исправления выводилось сообщение об ошибкеCould not determine local time zone, и сервер или клиент отказывались запускаться. #5827 (alexey-milovidov) - Вернули поддержку аргумента типа с плавающей точкой в функции
quantileTimingдля обратной совместимости. #5911 (alexey-milovidov) - Показывать в сообщениях об ошибках, в какой таблице отсутствует столбец. #5768 (Ivan)
- Запрещено выполнять запрос с одинаковым query_id разными пользователями #5430 (proller)
- Более надёжный код для отправки метрик в Graphite. Он будет работать даже во время длительной серии операций
RENAME TABLE. #5875 (alexey-milovidov) - При невозможности ThreadPool запланировать задачу на выполнение будут отображаться более информативные сообщения об ошибках. Это исправляет #5305 #5801 (alexey-milovidov)
- Инвертирована логика ngramSearch, чтобы сделать её более интуитивной #5807 (Danila Kutenin)
- Добавлен разбор пользователя в конструкторе движка HDFS #5946 (akonyaev90)
- Обновлено значение по умолчанию для
параметра max_ast_elements#5933 (Artem Konovalov) - Введено понятие устаревших настроек. Устаревшая настройка
allow_experimental_low_cardinality_typeможет использоваться, но не оказывает никакого эффекта. 0f15c01c6802f7ce1a1494c12c846be8c98944cd Alexey Milovidov
Повышение производительности
- Увеличено число потоков чтения для
SELECTиз таблицы Merge, чтобы добиться более равномерного распределения потоков выполнения. Добавлена настройкаmax_streams_multiplier_for_merge_tables. Это исправляет #5797 #5915 (alexey-milovidov)
улучшение сборки/тестирования/пакетирования
- Добавлен тест на обратную совместимость взаимодействия клиента с сервером при разных версиях ClickHouse. #5868 (alesapin)
- Информация о покрытии тестами в каждом коммите и пул-реквесте. #5896 (alesapin)
- Добавлено взаимодействие с AddressSanitizer для поддержки наших пользовательских аллокаторов (
ArenaиArenaWithFreeLists), что улучшает отладку ошибок “use-after-free”. #5728 (akuzm) - Переход на реализацию LLVM libunwind для обработки исключений C++ и вывода трассировки стека #4828 (Nikita Lapkov)
- Добавлены ещё два предупреждения компилятора из -Weverything #5923 (alexey-milovidov)
- Добавлена возможность собирать ClickHouse с Memory Sanitizer. #3949 (alexey-milovidov)
- Исправлен отчёт ubsan о функции
bitTestв фазз-тесте. #5943 (alexey-milovidov) - Docker: добавлена возможность инициализации экземпляра ClickHouse, требующего аутентификации. #5727 (Korviakov Andrey)
- Обновлён librdkafka до версии 1.1.0 #5872 (Ivan)
- Добавлен глобальный тайм-аут для интеграционных тестов, а часть из них отключена в тестовом коде. #5741 (alesapin)
- Исправлены некоторые ошибки, выявленные ThreadSanitizer. #5854 (akuzm)
- Опция
--no-undefinedзаставляет компоновщик при компоновке проверять наличие всех внешних имён. Это очень полезно для отслеживания реальных зависимостей между библиотеками в режиме split build. #5855 (Ivan) - Добавлен тест на производительность для #5797 #5914 (alexey-milovidov)
- Исправлена проблема совместимости с gcc-7. #5840 (alexey-milovidov)
- Добавлена поддержка gcc-9. Исправлены проблемы #5717 #5774 (alexey-milovidov)
- Исправлена ошибка, из-за которой libunwind мог быть некорректно слинкован. #5948 (alexey-milovidov)
- Исправлено несколько предупреждений, выявленных PVS-Studio. #5921 (alexey-milovidov)
- Добавлена первоначальная поддержка статического анализатора
clang-tidy. #5806 (alexey-milovidov) - Замена endian-макросов BSD/Linux( ‘be64toh’ and ‘htobe64’) на эквиваленты для Mac OS X #5785 (Fu Chen)
- Улучшено руководство по интеграционному тестированию. #5796 (Vladimir Chebotarev)
- Исправлена сборка на macOS + gcc9 #5822 (filimonov)
- Исправлена труднозаметная опечатка: aggreAGte -> aggregate. #5753 (akuzm)
- Исправлена сборка под FreeBSD #5760 (proller)
- На сайт добавлена ссылка на экспериментальный YouTube-канал #5845 (Ivan Blinkov)
- CMake: добавлена опция для флагов покрытия: WITH_COVERAGE #5776 (proller)
- У некоторых встроенных PODArray’ов исправлен начальный размер. #5787 (akuzm)
- clickhouse-server.postinst: исправлено определение ОС для CentOS 6 #5788 (proller)
- Добавлена сборка пакетов для Arch Linux. #5719 (Vladimir Chebotarev)
- Разделили Common/config.h по библиотекам (dbms) #5715 (proller)
- Исправления для сборочной платформы “Arcadia” #5795 (proller)
- Исправления для нестандартной сборки (gcc9, без субмодулей) #5792 (proller)
- Требовать явного указания типа в
unalignedStore, поскольку выяснилось, что без этого часто возникают ошибки #5791 (akuzm) - Исправлена сборка для macOS #5830 (filimonov)
- Тест производительности новой возможности JIT на более крупном наборе данных, как запрошено здесь #5263 #5887 (Guillaume Tassery)
- Запуск тестов с сохранением состояния при стресс-тестировании 12693e568722f11e19859742f56428455501fd2a (alesapin)
Обратно несовместимое изменение
- В этой версии
Kafkaне работает. - Для новых таблиц
MergeTreeпо умолчанию включёнadaptive_index_granularity= 10MB. Если вы создали новые таблицы MergeTree начиная с версии 19.11+, откатиться до версий ниже 19.6 будет невозможно. #5628 (alesapin) - Удалены устаревшие недокументированные встроенные словари, которые использовались в Yandex.Metrica. Функции
OSIn,SEIn,OSToRoot,SEToRoot,OSHierarchy,SEHierarchyбольше недоступны. Если вы используете эти функции, напишите по адресу clickhouse-feedback@yandex-team.com. Примечание: в последний момент мы решили оставить эти функции ещё на некоторое время. #5780 (alexey-milovidov)
Релиз ClickHouse 19.10
Релиз ClickHouse 19.10.1.5, 2019-07-12
Новая возможность
- Добавлен новый кодек для столбцов:
T64. Предназначен для столбцов (U)IntX/EnumX/Data(Time)/DecimalX. Хорошо подходит для столбцов с константными значениями или значениями из небольшого диапазона. Сам кодек позволяет увеличивать или уменьшать тип данных без повторного сжатия. #5557 (Artem Zuikov) - Добавлен движок базы данных
MySQL, который позволяет просматривать все таблицы на удалённом сервере MySQL #5599 (Winter Zhang) - Реализована функция
bitmapContains. Она в 2 раза быстрее, чемbitmapHasAny, если второй битмап содержит один элемент. #5535 (Zhichang Yu) - Добавлена поддержка функции
crc32(с поведением, точно таким же, как в MySQL или PHP). Не используйте её, если вам нужна хеш-функция. #5661 (Remen Ivan) - Реализованы запросы
SYSTEM START/STOP DISTRIBUTED SENDSдля управления асинхронными вставками в таблицыDistributed. #4935 (Winter Zhang)
Исправление ошибки
- При выполнении мутаций для ограничений слияния теперь игнорируются лимиты на выполнение запросов и максимальный размер частей. #5659 (Anton Popov)
- Исправлена ошибка, которая могла приводить к дедупликации обычных блоков (крайне редко) и вставке дублирующихся блоков (чаще). #5549 (alesapin)
- Исправлена функция
arrayEnumerateUniqRankedдля аргументов с пустыми массивами #5559 (proller) - Не выполняется подписка на топики Kafka, если не предполагается опрос сообщений. #5698 (Ivan)
- Настройка
join_use_nullsбольше не влияет на типы, которые не могут быть внутри Nullable #5700 (Olga Khvostikova) - Исправлены ошибки
Incorrect size of index granularity#5720 (coraxster) - Исправлено переполнение при преобразовании Float в Decimal #5607 (coraxster)
- Буфер сбрасывается при вызове деструктора
WriteBufferFromHDFS. Это исправляет запись вHDFS. #5684 (Xindong Peng)
Улучшения
- Пустые ячейки в
CSVрассматриваются как значения по умолчанию, если включена настройкаinput_format_defaults_for_omitted_fields. #5625 (akuzm) - Неблокирующая загрузка внешних словарей. #5567 (Vitaly Baranov)
- Сетевые тайм-ауты для уже установленных соединений теперь можно динамически изменять в соответствии с настройками. #4558 (Konstantin Podshumok)
- Для функций
firstSignificantSubdomain,cutToFirstSignificantSubdomainиспользуется “public_suffix_list”. Используется идеальная хеш-таблица, сгенерированная с помощьюgperf, со списком, созданным из файла: https://publicsuffix.org/list/public_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>в файле configclickhouse-local. #5540 (proller) - Разрешен запуск запроса с табличной функцией
remoteвclickhouse-local#5627 (proller)
Повышение производительности
- Добавлена возможность записывать финальную метку в конец столбцов MergeTree. Это позволяет избежать лишних чтений для ключей, выходящих за пределы диапазона данных таблицы. Функция работает только при использовании адаптивной гранулярности индекса. #5624 (alesapin)
- Улучшена производительность таблиц MergeTree на очень медленных файловых системах за счет сокращения количества системных вызовов
stat. #5648 (alexey-milovidov) - Исправлено падение производительности при чтении из таблиц MergeTree, появившееся в версии 19.6. Исправляет #5631. #5633 (alexey-milovidov)
Улучшения сборки/тестирования/упаковки
- Реализован
TestKeeper— реализация интерфейса ZooKeeper, используемая для тестирования #5643 (alexey-milovidov) (levushkin aleksej) - Теперь
.sql-тесты можно запускать изолированно на отдельных серверах, параллельно и со случайной базой данных. Это позволяет выполнять их быстрее, добавлять новые тесты с пользовательскими конфигурациями сервера и быть уверенными, что разные тесты не влияют друг на друга. #5554 (Ivan) - Из performance tests удалены
<name>и<metrics>#5672 (Olga Khvostikova) - Исправлен performance test
select_formatдля форматовPretty#5642 (alexey-milovidov)
Релиз ClickHouse 19.9
Релиз ClickHouse 19.9.3.31, 2019-07-05
Исправление ошибки
- Исправлен segfault в кодеке Delta, затрагивавший столбцы со значениями размером менее 32 бит. Ошибка приводила к случайному повреждению памяти. #5786 (alesapin)
- Исправлена редкая ошибка при проверке части со столбцом LowCardinality. #5832 (alesapin)
- Исправлен segfault при TTL merge с нефизическими столбцами в блоке. #5819 (Anton Popov)
- Исправлена потенциальная бесконечная задержка низкоприоритетных запросов. #5842 (alexey-milovidov)
- Исправлено определение часового пояса по умолчанию в ClickHouse как UCT вместо UTC. #5828 (alexey-milovidov)
- Исправлена ошибка, из-за которой распределённые запросы DROP/ALTER/TRUNCATE/OPTIMIZE с предложением ON CLUSTER выполнялись на реплике-последователе раньше, чем на реплике-лидере. Теперь они будут выполняться напрямую на реплике-лидере. #5757 (alesapin)
- Исправлено состояние гонки, из-за которого некоторые запросы могли не появляться в query_log сразу после запроса SYSTEM FLUSH LOGS. #5685 (Anton Popov)
- Добавлена отсутствовавшая поддержка константных аргументов для функции
evalMLModel. #5820 (alexey-milovidov)
Релиз ClickHouse 19.9.2.4, 2019-06-24
Новая возможность
- Вывод информации о замороженных частях в таблице
system.parts. #5471 (proller) - При запуске clickhouse-client в tty запрашивается пароль клиента, если он не задан в аргументах #5092 (proller)
- Реализованы функции
dictGetиdictGetOrDefaultдля типов Decimal. #5394 (Artem Zuikov)
Улучшения
- Debian init: добавлен тайм-аут при остановке сервиса #5522 (proller)
- Добавлена настройка, которая по умолчанию запрещает создание таблицы с подозрительными типами для LowCardinality #5448 (Olga Khvostikova)
- Функции регрессии возвращают веса модели, если не используются как State в функции
evalMLMethod. #5411 (Quid37) - Переименованы и улучшены методы регрессии. #5492 (Quid37)
- Интерфейсы средств поиска по строкам стали понятнее. #5586 (Danila Kutenin)
Исправление ошибки
- Исправлена возможная потеря данных в Kafka #5445 (Ivan)
- Исправлен потенциальный бесконечный цикл в формате
PrettySpaceпри вызове с нулевым количеством столбцов #5560 (Olga Khvostikova) - Исправлена ошибка переполнения UInt32 в линейных моделях. Разрешён eval ML model для неконстантного аргумента модели. #5516 (Nikolai Kochetov)
ALTER TABLE ... DROP INDEX IF EXISTS ...не должен генерировать исключение, если указанный индекс не существует #5524 (Gleb Novikov)- Исправлен segfault при использовании
bitmapHasAnyв скалярном подзапросе #5528 (Zhichang Yu) - Исправлена ошибка, из-за которой пул соединений репликации не пытался повторно разрешить имя хоста даже после сброса DNS-кэша. #5534 (alesapin)
- Исправлена работа
ALTER ... MODIFY TTLв ReplicatedMergeTree. #5539 (Anton Popov) - Исправлена вставка в distributed таблицу с MATERIALIZED столбцом #5429 (Azat Khuzhin)
- Исправлена ошибка bad alloc при TRUNCATE хранилища Join #5437 (TCeason)
- В последних версиях пакета tzdata некоторые файлы теперь являются символическими ссылками. Из-за этого текущий механизм определения часового пояса по умолчанию работает некорректно и выдаёт неправильные названия для некоторых часовых поясов. Теперь мы как минимум принудительно задаём имя часового пояса по содержимому TZ, если оно указано. #5443 (Ivan)
- Исправлены некоторые крайне редкие случаи в поисковике MultiVolnitsky, когда суммарная длина константных искомых подстрок составляет не менее 16 КБ. Алгоритм пропускал предыдущие результаты или перезаписывал их, что могло приводить к некорректному результату
multiSearchAny. #5588 (Danila Kutenin) - Исправлена проблема, из-за которой в запросах ExternalData нельзя было использовать настройки ClickHouse. Также на данный момент нельзя использовать настройки
date_time_input_formatиlow_cardinality_allow_in_native_formatиз-за неоднозначности имен (во внешних данных это может интерпретироваться как формат таблицы, а в запросе — как настройка). #5455 (Danila Kutenin) - Исправлена ошибка, из-за которой части удалялись только из FS и не удалялись из Zookeeper. #5520 (alesapin)
- Убрано отладочное логирование из протокола MySQL #5478 (alexey-milovidov)
- Пропускать ZNONODE при обработке DDL-запросов #5489 (Azat Khuzhin)
- Исправлен тип результирующего столбца для смешанного
UNION ALL. Встречались случаи с несогласованными типами данных и столбцов в результирующих столбцах. #5503 (Artem Zuikov) - В функциях
dictGetTпри некорректных целых числах теперь генерируется исключение вместо сбоя. #5446 (Artem Zuikov) - Исправлены некорректные значения element_count и load_factor для хешированного словаря в таблице
system.dictionaries. #5440 (Azat Khuzhin)
Улучшения сборки/тестирования/упаковки
- Исправлена сборка без поддержки HTTP-сжатия
Brotli(переменная CMakeENABLE_BROTLI=OFF). #5521 (Anton Yuzhaninov) - Подключение roaring.h как roaring/roaring.h #5523 (Orivej Desh)
- Исправлены предупреждения gcc9 в hyperscan (#line directive is evil!) #5546 (Danila Kutenin)
- Исправлены все предупреждения при компиляции с gcc-9. Исправлены некоторые проблемы в contrib. Исправлен внутренний сбой компилятора (ICE) в gcc9 и отправлен отчёт в bugzilla. #5498 (Danila Kutenin)
- Исправлена линковка с lld #5477 (alexey-milovidov)
- Удалены неиспользуемые специализации в словарях #5452 (Artem Zuikov)
- Улучшены тесты производительности форматирования и парсинга таблиц для разных типов файлов #5497 (Olga Khvostikova)
- Исправления для параллельного запуска тестов #5506 (proller)
- Docker: используются конфигурации из clickhouse-test #5531 (proller)
- Исправлена компиляция для FreeBSD #5447 (proller)
- Boost обновлён до 1.70 #5570 (proller)
- Исправлена сборка ClickHouse как подмодуля #5574 (proller)
- Улучшены тесты производительности JSONExtract #5444 (Vitaly Baranov)
Релиз ClickHouse 19.8
Релиз ClickHouse 19.8.3.8, 2019-06-11
Новые возможности
- Добавлены функции для работы с JSON #4686 (hcz) #5124. (Vitaly Baranov)
- Добавлена функция basename с поведением, аналогичным одноимённой функции, существующей во многих языках (
os.path.basenamein python,basenamein PHP и т. д.). Работает как с UNIX-подобными путями, так и с путями Windows. #5136 (Guillaume Tassery) - Добавлен синтаксис
LIMIT n, m BYилиLIMIT m OFFSET n BYдля указания смещения n в предложении LIMIT BY. #5138 (Anton Popov) - Добавлен новый тип данных
SimpleAggregateFunction, который позволяет использовать столбцы с простой агрегацией вAggregatingMergeTree. Его можно использовать только с простыми функциями, такими какany,anyLast,sum,min,max. #4629 (Boris Granveaud) - Добавлена поддержка неконстантных аргументов функции
ngramDistance#5198 (Danila Kutenin) - Добавлены функции
skewPop,skewSamp,kurtPopиkurtSampдля вычисления асимметрии последовательности значений, выборочной асимметрии, эксцесса и выборочного эксцесса соответственно. #5200 (hcz) - Добавлена поддержка операции переименования для хранилища
MaterializeView. #5209 (Guillaume Tassery) - Добавлен сервер, позволяющий подключаться к ClickHouse с помощью клиента MySQL. #4715 (Yuriy Baranov)
- Добавлены функции
toDecimal*OrZeroиtoDecimal*OrNull. #5291 (Artem Zuikov) - Добавлена поддержка Decimal types в функциях:
quantile,quantiles,median,quantileExactWeighted,quantilesExactWeighted, medianExactWeighted. #5304 (Artem Zuikov) - Добавлена функция
toValidUTF8, которая заменяет все некорректные символы UTF-8 символом замены � (U+FFFD). #5322 (Danila Kutenin) - Добавлена функция
format. Выполняет форматирование константного шаблона (упрощённого шаблона формата Python) с использованием строк, перечисленных в аргументах. #5330 (Danila Kutenin) - Добавлена таблица
system.detached_parts, содержащая информацию об отсоединённых частях таблицMergeTree. #5353 (akuzm) - Добавлена функция
ngramSearchдля вычисления несимметрической разности междуneedleиhaystack. #5418#5422 (Danila Kutenin) - Реализованы базовые методы машинного обучения (стохастическая линейная регрессия и логистическая регрессия) с использованием интерфейса агрегатных функций. Поддерживаются различные стратегии обновления весов модели (простой градиентный спуск, метод импульса, метод Нестерова). Также поддерживаются мини-батчи произвольного размера. #4943 (Quid37)
- Реализованы функции
geohashEncodeиgeohashDecode. #5003 (Vasily Nemkov) - Добавлена агрегатная функция
timeSeriesGroupSum, которая может агрегировать разные временные ряды, у которых временные метки выборок не выровнены. Она использует линейную интерполяцию между двумя временными метками выборок, а затем суммирует временные ряды. Добавлена агрегатная функцияtimeSeriesGroupRateSum, которая вычисляет скорость изменения временных рядов, а затем суммирует эти скорости. #4542 (Yangkuan Liu) - Добавлены функции
IPv4CIDRtoIPv4RangeиIPv6CIDRtoIPv6Rangeдля вычисления нижней и верхней границ диапазона IP-адресов подсети по CIDR. #5095 (Guillaume Tassery) - Добавлен заголовок X-ClickHouse-Summary, который передаётся при отправке запроса по HTTP с включенной настройкой
send_progress_in_http_headers. Он возвращает стандартную информацию из X-ClickHouse-Progress, а также дополнительные сведения, например сколько строк и байт было вставлено в ходе запроса. #5116 (Guillaume Tassery)
Улучшения
- Добавлена настройка
max_parts_in_totalдля таблиц семейства MergeTree (по умолчанию: 100 000), предотвращающая небезопасное задание ключа партиционирования #5166. #5171 (alexey-milovidov) clickhouse-obfuscator: вычислять seed для отдельных столбцов, комбинируя исходный seed с именем столбца, а не с его позицией. Это предназначено для преобразования наборов данных с несколькими связанными таблицами, чтобы после преобразования таблицы по-прежнему можно было связывать через JOIN. #5178 (alexey-milovidov)- Добавлены функции
JSONExtractRaw,JSONExtractKeyAndValues. ФункцииjsonExtract<type>переименованы вJSONExtract<type>. В случае ошибки эти функции возвращают значения соответствующего типа, а неNULL. Изменена функцияJSONExtract: теперь она получает тип результата из последнего параметра и не оборачивает типы в Nullable. Реализован fallback на RapidJSON в случае, если инструкции AVX2 недоступны. Библиотека Simdjson обновлена до новой версии. #5235 (Vitaly Baranov) - Теперь функции
ifиmultiIfдля совместимости с SQL зависят не отNullableусловия, а от ветвей. #5238 (Jian Wu) - Предикат
Inтеперь возвращает результатNullпри входном значенииNull, как и функцияEqual. #5152 (Jian Wu) - Проверять ограничение по времени после каждых (flush_interval / poll_timeout) строк из Kafka. Это позволяет чаще прерывать чтение из потребителя Kafka и проверять временные ограничения для потоков верхнего уровня #5249 (Ivan)
- Собрать rdkafka со встроенной поддержкой SASL. Это должно позволить использовать аутентификацию SASL SCRAM #5253 (Ivan)
- Батч-версия RowRefList для ALL JOIN. #5267 (Artem Zuikov)
- clickhouse-server: более информативные сообщения об ошибках при прослушивании. #5268 (proller)
- Поддержка словарей в clickhouse-copier для функций внутри
<sharding_key>#5270 (proller) - Добавлена новая настройка
kafka_commit_every_batchдля управления политикой коммита в Kafka. Она позволяет выбрать режим коммита: после обработки каждого батча сообщений или после записи в хранилище всего блока. Это компромисс между потерей части сообщений и их повторным чтением в некоторых редких ситуациях. #5308 (Ivan) - Добавлена поддержка других беззнаковых целочисленных типов в
windowFunnel. #5320 (sundyli) - Разрешено затенение виртуального столбца
_tableв движке Merge. #5325 (Ivan) - Добавлена поддержка других целочисленных типов без знака для агрегатных функций
sequenceMatch#5339 (sundyli) - Более понятные сообщения об ошибках, если несовпадение контрольной суммы, скорее всего, вызвано аппаратными сбоями. #5355 (alexey-milovidov)
- Проверка того, что базовые таблицы поддерживают сэмплирование для
StorageMerge#5366 (Ivan) - Закрытие MySQL-соединений после использования во внешних словарях. Связано с проблемой #893. #5395 (Clément Rodriguez)
- Улучшения протокола MySQL. Имя формата изменено на MySQLWire. Для вызова RSA_free теперь используется RAII. SSL отключается, если не удается создать контекст. #5419 (Yuriy Baranov)
- clickhouse-client: теперь может запускаться с недоступным файлом истории (только для чтения, нет места на диске, файл является каталогом, …). #5431 (proller)
- Настройки запроса теперь учитываются при асинхронных INSERT в таблицы Distributed. #4936 (TCeason)
- Функции
leastSqr,LinearRegressionиLogisticRegressionбыли переименованы вsimpleLinearRegression,linearRegressionиlogisticRegressionсоответственно. #5391 (Nikolai Kochetov)
Повышение производительности
- Распараллелена обработка частей нереплицируемых таблиц MergeTree в запросе ALTER MODIFY. #4639 (Ivan Kush)
- Оптимизировано извлечение данных с помощью регулярных выражений. #5193 #5191 (Danila Kutenin)
- Правый столбец ключа JOIN не добавляется в результат JOIN, если он используется только в секции ON. #5260 (Artem Zuikov)
- Буфер Kafka замораживается после первого пустого ответа. Это позволяет избежать многократных вызовов
ReadBuffer::next()для пустого результата в некоторых потоках разбора строк. #5283 (Ivan) - Оптимизирована функция
concatдля нескольких аргументов. #5357 (Danila Kutenin) - Оптимизация запросов: разрешено проталкивать оператор IN при переписывании comma/cross JOIN во inner JOIN. #5396 (Artem Zuikov)
- Наша реализация LZ4 заменена на эталонную для ускорения декомпрессии. #5070 (Danila Kutenin)
- Реализованы MSD radix sort (на основе kxsort) и частичная сортировка. #5129 (Evgenii Pravda)
Исправления ошибок
- Исправлено требование наличия столбцов для push при JOIN #5192 (Winter Zhang)
- Исправлена ошибка: когда ClickHouse был запущен через systemd, команда
sudo service clickhouse-server forcerestartработала не так, как ожидалось. #5204 (proller) - Исправлены HTTP-коды ошибок в DataPartsExchange (межсерверный HTTP-сервер на порту 9009 всегда возвращал код 200, даже при ошибках). #5216 (proller)
- Исправлен SimpleAggregateFunction для
Stringдлиннее MAX_SMALL_STRING_SIZE #5311 (Azat Khuzhin) - Исправлена ошибка при преобразовании
DecimalвNullable(Decimal)в IN. Добавлена поддержка и других преобразованийDecimalвDecimal(в том числе с разным scale). #5350 (Artem Zuikov) - Исправлено повреждение FPU в библиотеке simdjson, которое приводило к неправильным вычислениям агрегатных функций
uniqHLLиuniqCombined, а также математических функций, таких какlog. #5354 (alexey-milovidov) - Исправлена обработка смешанных const/nonconst случаев в JSON-функциях. #5435 (Vitaly Baranov)
- Исправлена функция
retention. Теперь все условия, выполняющиеся в строке данных, добавляются в состояние данных. #5119 (小路) - Исправлен тип результата для
quantileExactсDecimal. #5304 (Artem Zuikov)
Документация
- Документация по
CollapsingMergeTreeпереведена на китайский. #5168 (张风啸) - Часть документации о движках таблиц переведена на китайский. #5134 #5328 (never lee)
Улучшения сборки/тестирования/упаковки
- Исправлены некоторые отчёты санитайзера, указывающие на вероятное использование памяти после освобождения.#5139 #5143 #5393 (Ivan)
- Для удобства тесты производительности вынесены из отдельных каталогов. #5158 (alexey-milovidov)
- Исправлены некорректные тесты производительности. #5255 (alesapin)
- Добавлен инструмент для вычисления контрольных сумм при перевороте битов для отладки аппаратных проблем. #5334 (alexey-milovidov)
- Скрипт runner сделан более удобным в использовании. #5340#5360 (filimonov)
- Добавлена небольшая инструкция о том, как писать тесты производительности. #5408 (alesapin)
- Добавлена возможность делать подстановки в запросах CREATE, FILL и DROP в тестах производительности #5367 (Olga Khvostikova)
Релиз ClickHouse 19.7
Релиз ClickHouse 19.7.5.29, 2019-07-05
Исправление ошибки
- Исправлена проблема с регрессией производительности в некоторых запросах с JOIN. #5192 (Winter Zhang)
Релиз ClickHouse 19.7.5.27, 2019-06-09
Новые возможности
- Добавлены функции для битмапов
bitmapHasAnyиbitmapHasAll, аналогичные функциямhasAnyиhasAllдля массивов. #5279 (Sergi Vladykin)
Исправления ошибок
- Исправлен segfault при использовании
minmaxINDEX со значением NULL. #5246 (Nikita Vasilev) - Все входные столбцы в LIMIT BY теперь помечаются как обязательные в выходных данных. Это исправляет ошибку ‘Not found column’ в некоторых распределённых запросах. #5407 (Constantin S. Pan)
- Исправлена ошибка “Column ‘0’ already exists” в
SELECT .. PREWHEREдля столбца с DEFAULT #5397 (proller) - Исправлен запрос
ALTER MODIFY TTLдляReplicatedMergeTree. #5539 (Anton Popov) - Сервер больше не падает, если не удалось запустить консьюмеры Kafka. #5285 (Ivan)
- Исправлено некорректное поведение функций битмап, из-за которого они возвращали неверный результат. #5359 (Andy Yang)
- Исправлен
element_countдля хешированного словаря (без учёта дубликатов) #5440 (Azat Khuzhin) - В качестве имени часового пояса теперь используется содержимое переменной окружения TZ. Это помогает в некоторых случаях корректно определять часовой пояс по умолчанию.#5443 (Ivan)
- Убрана попытка преобразования целых чисел в функциях
dictGetT, так как это работает некорректно. Вместо этого генерируется исключение. #5446 (Artem Zuikov) - Исправлены settings в HTTP request ExternalData. #5455 (Danila Kutenin)
- Исправлена ошибка, из-за которой части удалялись только из FS без удаления их из Zookeeper. #5520 (alesapin)
- Исправлен segfault в функции
bitmapHasAny. #5528 (Zhichang Yu) - Исправлена ошибка, из-за которой пул соединений репликации не выполнял повторную попытку разрешения хоста, даже если кэш DNS был сброшен. #5534 (alesapin)
- Исправлен запрос
DROP INDEX IF EXISTS. Теперь запросALTER TABLE ... DROP INDEX IF EXISTS ...не генерирует исключение, если указанный индекс не существует. #5524 (Gleb Novikov) - Исправлено определение супертипа столбца для union all. В некоторых случаях это приводило к несогласованности данных и типов результирующих столбцов. #5503 (Artem Zuikov)
- ZNONODE теперь пропускается при обработке DDL-запроса. Раньше, если другой узел удалял znode в очереди задач, тот, который не обработал его, но уже получил список дочерних элементов, завершал поток DDLWorker. #5489 (Azat Khuzhin)
- Исправлена вставка в таблицу Distributed() с MATERIALIZED-столбцом. #5429 (Azat Khuzhin)
Релиз ClickHouse 19.7.3.9, 2019-05-30
Новые возможности
- Добавлена возможность ограничивать диапазон значений настройки, которые может задавать пользователь. Эти ограничения можно задать в профиле настроек пользователя. #4931 (Vitaly Baranov)
- Добавлена вторая версия функции
groupUniqArrayс необязательным параметромmax_size, который ограничивает размер результирующего массива. Такое поведение аналогично функцииgroupArray(max_size)(x). #5026 (Guillaume Tassery) - Для входных форматов файлов TSVWithNames/CSVWithNames порядок столбцов теперь
можно определять по заголовку файла. Это задаётся
параметром
input_format_with_names_use_header. #5081 (Alexander)
Исправления ошибок
- Падение с uncompressed_cache + JOIN во время слияния (#5197) #5133 (Danila Kutenin)
- Сегментационная ошибка при запросе к системным таблицам из clickhouse-client. #5066 #5127 (Ivan)
- Потеря данных при высокой нагрузке через KafkaEngine (#4736) #5080 (Ivan)
- Исправлено очень редкое состояние гонки данных, которое могло возникнуть при выполнении запроса с UNION ALL, включающего как минимум два SELECT из system.columns, system.tables, system.parts, system.parts_tables или таблиц семейства Merge, и одновременном выполнении ALTER для столбцов соответствующих таблиц. #5189 (alexey-milovidov)
Повышение производительности
- Для сортировки по одному числовому столбцу в
ORDER BYбезLIMITтеперь используется поразрядная сортировка. #5106, #4439 (Evgenii Pravda, alexey-milovidov)
Документация
- Документация по некоторым движкам таблиц переведена на китайский язык. #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
Исправления ошибок
- Исправлен pushdown для условия IN в запросах из табличных функций
mysqlиodbcи соответствующих движков таблиц. Тем самым исправлены #3540 и #2384. #5313 (alexey-milovidov) - Исправлена взаимная блокировка в Zookeeper. #5297 (github1youlc)
- Разрешены значения Decimal в кавычках в CSV. #5284 (Artem Zuikov
- Запрещено преобразование float Inf/NaN в Decimals (с выдачей исключения). #5282 (Artem Zuikov)
- Исправлена гонка данных в запросе rename. #5247 (Winter Zhang)
- Временно отключён LFAlloc. Использование LFAlloc может приводить к большому числу MAP_FAILED при выделении UncompressedCache и, как следствие, к сбоям запросов на серверах с высокой нагрузкой. cfdba93(Danila Kutenin)
Релиз ClickHouse 19.6.2.11, 2019-05-13
Новые возможности
- TTL-выражения для столбцов и таблиц. #4212 (Anton Popov)
- Добавлена поддержка сжатия
brotliдля HTTP-ответов (Accept-Encoding: br) #4388 (Mikhail) - Добавлена новая функция
isValidUTF8для проверки того, является ли набор байтов корректно закодированным в UTF-8. #4934 (Danila Kutenin) - Добавлена новая политика балансировки нагрузки
first_or_random, которая отправляет запросы на первый указанный хост, а если он недоступен — на случайные хосты сегмента. Полезна для топологий с перекрёстной репликацией. #5012 (nvartolomei)
Экспериментальные возможности
- Добавлена настройка
index_granularity_bytes(адаптивная гранулярность индекса) для таблиц семейства MergeTree*. #4826 (alesapin)
Улучшения
- Добавлена поддержка неконстантных и отрицательных аргументов размера и длины для функции
substringUTF8. #4989 (alexey-milovidov) - Отключён push-down в правую таблицу при left JOIN, в левую таблицу при right JOIN и в обе таблицы при full JOIN. Это исправляет неверный результат JOIN в некоторых случаях. #4846 (Ivan)
clickhouse-copier: автоматическая загрузка конфигурации задачи из параметра--task-file#4876 (proller)- Добавлен обработчик опечаток для фабрики хранилищ и фабрики табличных функций. #4891 (Danila Kutenin)
- Поддержка звёздочек и квалифицированных звёздочек для множественных JOIN без подзапросов #4898 (Artem Zuikov)
- Сообщение об ошибке отсутствующего столбца сделано более понятным для пользователя. #4915 (Artem Zuikov)
Повышение производительности
- Существенное ускорение ASOF JOIN #4924 (Martijn Bakker)
Обратно несовместимые изменения
- HTTP-заголовок
Query-Idбыл переименован вX-ClickHouse-Query-Idдля согласованности. #4972 (Mikhail)
Исправления ошибок
- Исправлено потенциальное разыменование нулевого указателя в
clickhouse-copier. #4900 (proller) - Исправлена ошибка в запросе с JOIN + ARRAY JOIN #4938 (Artem Zuikov)
- Исправлено зависание при запуске сервера, когда словарь зависит от другого словаря через базу данных с движком Dictionary. #4962 (Vitaly Baranov)
- Частично исправлен режим distributed_product_mode = local. Теперь можно использовать столбцы локальных таблиц в WHERE/HAVING/ORDER BY/… через псевдонимы таблиц. Если у таблицы нет псевдонима, генерируется исключение. Доступ к столбцам без псевдонимов таблиц пока невозможен. #4986 (Artem Zuikov)
- Исправлен потенциально неверный результат для
SELECT DISTINCTсJOIN#5001 (Artem Zuikov) - Исправлено очень редкое состояние гонки данных, которое могло возникать при выполнении запроса с UNION ALL, включающего как минимум два SELECT из system.columns, system.tables, system.parts, system.parts_tables или таблиц семейства Merge, при одновременном выполнении ALTER столбцов соответствующих таблиц. #5189 (alexey-milovidov)
Улучшения сборки/тестирования/упаковки
- Исправлены падения тестов при запуске clickhouse-server на другом хосте #4713 (Vasily Nemkov)
- clickhouse-test: отключены управляющие последовательности цветов в среде без TTY. #4937 (alesapin)
- clickhouse-test: разрешено использовать любую тестовую базу данных (удалена квалификация
test.там, где это возможно) #5008 (proller) - Исправлены ошибки UBSan #5037 (Vitaly Baranov)
- В ClickHouse добавлен Yandex LFAlloc, чтобы по-разному выделять память для данных MarkCache и UncompressedCache и надежнее выявлять segfault #4995 (Danila Kutenin)
- Утилита на Python для упрощения работы с бэкпортами и журналами изменений. #4949 (Ivan)
Релиз ClickHouse 19.5
Релиз ClickHouse 19.5.4.22, 2019-05-13
Исправления ошибок
- Исправлен возможный сбой в функциях bitmap* #5220 #5228 (Andy Yang)
- Исправлено крайне редкое состояние гонки данных, которое могло возникнуть при выполнении запроса с UNION ALL, включающего как минимум два SELECT из system.columns, system.tables, system.parts, system.parts_tables или таблиц семейства Merge, при одновременном выполнении ALTER для столбцов связанных таблиц. #5189 (alexey-milovidov)
- Исправлена ошибка
Set for IN is not created yet in case of using single LowCardinality column in the left part of IN. Она возникала, если столбец LowCardinality был частью первичного ключа. #5031 #5154 (Nikolai Kochetov) - Изменено поведение функции retention: если строка удовлетворяла и первому, и N-му условию, в состояние данных добавлялось только первое выполненное условие. Теперь в состояние данных добавляются все условия, которым удовлетворяет строка. #5119 (小路)
Релиз ClickHouse 19.5.3.8, 2019-04-18
Исправления ошибок
- Тип настройки
max_partitions_per_insert_blockисправлен: вместо boolean теперь используется UInt64. #5028 (Mohammad Hossein Sekhavat)
Релиз ClickHouse 19.5.2.6, 2019-04-15
Новые возможности
- Добавлена поддержка множественного сопоставления с Hyperscan для регулярных выражений (функции
multiMatchAny,multiMatchAnyIndex,multiFuzzyMatchAny,multiFuzzyMatchAnyIndex). #4780, #4841 (Danila Kutenin) - Добавлена функция
multiSearchFirstPosition. #4780 (Danila Kutenin) - Реализован предопределённый фильтр выражения для каждой строки в таблицах. #4792 (Ivan)
- Добавлен новый тип индекса пропуска данных на основе bloom-фильтров (может использоваться для функций
equal,inиlike). #4499 (Nikita Vasilev) - Добавлен
ASOF JOIN, который позволяет выполнять запросы с объединением по последнему известному значению. #4774 #4867 #4863 #4875 (Martijn Bakker, Artem Zuikov) - Переписывание нескольких
COMMA JOINвCROSS JOIN. Затем, если возможно, они переписываются вINNER JOIN. #4661 (Artem Zuikov)
Улучшения
topKиtopKWeightedтеперь поддерживают пользовательскийloadFactor(исправляет проблему #4252). #4634 (Kirill Danshin)- Разрешено использовать
parallel_replicas_count > 1даже для таблиц без сэмплирования (для них эта настройка просто игнорируется). В предыдущих версиях это приводило к исключению. #4637 (Alexey Elymanov) - Поддержка
CREATE OR REPLACE VIEW. Позволяет создать представление или задать новое определение одним оператором. #4654 (Boris Granveaud) - Движок таблицы
Bufferтеперь поддерживаетPREWHERE. #4671 (Yangkuan Liu) - Добавлена возможность запускать реплицированную таблицу без метаданных в ZooKeeper в режиме
readonly. #4691 (alesapin) - Исправлено мерцание индикатора выполнения в clickhouse-client. Проблема была особенно заметна при использовании
FORMAT Nullс потоковыми запросами. #4811 (alexey-milovidov) - Добавлена возможность отключать функции с библиотекой
hyperscanдля отдельных пользователей, чтобы ограничить потенциально чрезмерное и неконтролируемое потребление ресурсов. #4816 (alexey-milovidov) - Во все сообщения об ошибках добавлен номер версии. #4824 (proller)
- Добавлено ограничение для функций
multiMatch, требующее, чтобы размер строки помещался вunsigned int. Также добавлено ограничение на число аргументов для функцийmultiSearch. #4834 (Danila Kutenin) - Улучшено использование рабочего буфера и обработка ошибок в Hyperscan. #4866 (Danila Kutenin)
system.graphite_detentionsтеперь заполняется из конфигурации таблиц с движком*GraphiteMergeTree. #4584 (Mikhail f. Shiryaev)- Функция
trigramDistanceпереименована вngramDistance, а также добавлены новые функции сCaseInsensitiveиUTF. #4602 (Danila Kutenin) - Улучшен расчет индексов пропуска данных. #4640 (Nikita Vasilev)
- Обычные столбцы, а также столбцы
DEFAULT,MATERIALIZEDиALIASтеперь хранятся в одном списке (исправляет проблему #2867). #4707 (Alex Zatelepin)
Исправление ошибки
- Устранён вызов
std::terminateв случае сбоя выделения памяти. Теперь, как и ожидалось, генерируется исключениеstd::bad_alloc. #4665 (alexey-milovidov) - Исправлено чтение
capnprotoиз буфера. Иногда не удавалось успешно загрузить файлы по HTTP. #4674 (Vladislav) - Исправлена ошибка
Unknown log entry type: 0, возникавшая после выполнения запросаOPTIMIZE TABLE FINAL. #4683 (Amos Bird) - Некорректные аргументы в функциях
hasAnyиhasAllмогут приводить к ошибке сегментации. #4698 (alexey-milovidov) - При выполнении запроса
DROP DATABASE dictionaryвозможна взаимная блокировка. #4701 (alexey-milovidov) - Исправлено неопределённое поведение функций
medianиquantile. #4702 (hcz) - Исправлено определение уровня сжатия, если
network_compression_methodуказан в нижнем регистре. Ошибка в v19.1. #4706 (proller) - Устранено игнорирование настройки
<timezone>UTC</timezone>(исправлена проблема #4658). #4718 (proller) - Исправлено поведение функции
histogramпри работе с таблицамиDistributed. #4741 (olegkv) - Исправлена ошибка tsan
destroy of a locked mutex. #4742 (alexey-milovidov) - Исправлен отчет TSan при завершении работы, вызванный состоянием гонки при использовании системных журналов. Исправлено потенциальное обращение к уже освобожденной памяти при завершении работы с включенным part_log. #4758 (alexey-milovidov)
- Исправлена перепроверка частей в
ReplicatedMergeTreeAlterThreadв случае ошибки. #4772 (Nikolai Kochetov) - Арифметические операции над промежуточными состояниями агрегатных функций не работали с константными аргументами (например, с результатами подзапроса). #4776 (alexey-milovidov)
- Всегда заключайте имена столбцов в метаданных в обратные кавычки. Иначе невозможно создать таблицу, в которой есть столбец с именем
index(сервер не перезапустится из-за некорректного запросаATTACHв метаданных). #4782 (alexey-milovidov) - Исправлен сбой при
ALTER ... MODIFY ORDER BYдля таблицыDistributed. #4790 (TCeason) - Исправлен segfault в
JOIN ONпри включенномenable_optimize_predicate_expression. #4794 (Winter Zhang) - Исправлена ошибка, из-за которой после обработки сообщения Protobuf из Kafka добавлялась лишняя строка. #4808 (Vitaly Baranov)
- Исправлено падение
JOINдля не-NullableиNullableстолбцов. Исправлены значенияNULLв правых ключах вANY JOIN+join_use_nulls. #4815 (Artem Zuikov) - Исправлена ошибка сегментации в
clickhouse-copier. #4835 (proller) - Исправлено состояние гонки при выполнении
SELECTизsystem.tables, если таблица одновременно переименовывается или изменяется. #4836 (alexey-milovidov) - Исправлено состояние гонки при получении устаревшей части данных. #4839 (alexey-milovidov)
- Исправлено редкое состояние гонки, которое могло возникать при
RENAMEтаблицы семейства MergeTree. #4844 (alexey-milovidov) - Исправлена ошибка сегментации в функции
arrayIntersect. Ошибка сегментации могла возникнуть, если функция вызывалась со смешанными константными и обычными аргументами. #4847 (Lixiang Qian) - Исправлено чтение из столбца
Array(LowCardinality)в редком случае, когда он содержал длинную последовательность пустых массивов. #4850 (Nikolai Kochetov) - Исправлено падение при
FULL/RIGHT JOINпри выполнении JOIN по Nullable и не-Nullable полям. #4855 (Artem Zuikov) - Исправлено исключение
No message receivedпри получении частей от других реплик. #4856 (alesapin) - Исправлен неверный результат работы функции
arrayIntersectпри наличии нескольких повторяющихся значений в одном массиве. #4871 (Nikolai Kochetov) - Исправлено состояние гонки при одновременном выполнении запросов
ALTER COLUMN, которое могло приводить к сбою сервера (исправлена проблема #3421). #4592 (Alex Zatelepin) - Исправлен некорректный результат в
FULL/RIGHT JOINпри константном столбце. #4723 (Artem Zuikov) - Исправлены дубликаты в
GLOBAL JOINс символом*. #4705 (Artem Zuikov) - Исправлено определение параметра в
ALTER MODIFYдля столбцаCODEC, если тип столбца не указан. #4883 (alesapin) - Функции
cutQueryStringAndFragment()иqueryStringAndFragment()теперь корректно работают, еслиURLсодержит фрагмент, но не содержит строки запроса. #4894 (Vitaly Baranov) - Исправлена редкая ошибка, возникающая, когда значение настройки
min_bytes_to_use_direct_ioбольше нуля и потоку требуется сместить позицию чтения назад в файле столбца. #4897 (alesapin) - Исправлены некорректные типы аргументов для агрегатных функций с аргументами
LowCardinality(исправлена проблема #4919). #4922 (Nikolai Kochetov) - Исправлена неверная квалификация имён в
GLOBAL JOIN. #4969 (Artem Zuikov) - Исправлен результат функции
toISOWeekдля 1970 года. #4988 (alexey-milovidov) - Исправлено дублирование запросов
DROP,TRUNCATEиOPTIMIZEпри выполнении с предложениемON CLUSTERдля семейства таблицReplicatedMergeTree*. #4991 (alesapin)
Обратно несовместимое изменение
- Параметр
insert_sample_with_metadataпереименован вinput_format_defaults_for_omitted_fields. #4771 (Artem Zuikov) - Добавлен параметр
max_partitions_per_insert_block(по умолчанию имеет значение 100). Если вставляемый блок содержит большее число партиций, генерируется исключение. Установите значение 0, если хотите снять это ограничение (не рекомендуется). #4845 (alexey-milovidov) - Функции множественного поиска были переименованы (
multiPositionвmultiSearchAllPositions,multiSearchвmultiSearchAny,firstMatchвmultiSearchFirstIndex). #4780 (Danila Kutenin)
Повышение производительности
- Оптимизирован поисковый алгоритм Volnitsky за счёт инлайнинга, что даёт примерно 5–10% прироста производительности поиска для запросов с большим количеством искомых подстрок или множеством похожих биграмм. #4862 (Danila Kutenin)
- Исправлена проблема с производительностью, возникавшая, когда значение настройки
use_uncompressed_cacheбыло больше нуля и все читаемые данные находились в кэше. #4913 (alesapin)
Улучшения сборки/тестирования/упаковки
- Усилена debug-сборка: более детальные отображения памяти и ASLR; добавлена защита памяти для mark cache и индекса. Это позволяет находить больше ошибок повреждения памяти в случаях, когда ASan и MSan не справляются. #4632 (alexey-milovidov)
- Добавлена поддержка переменных cmake
ENABLE_PROTOBUF,ENABLE_PARQUETиENABLE_BROTLI, позволяющих включать и отключать указанные выше возможности (так же, как для librdkafka, mysql и т. д.). #4669 (Silviu Caragea) - Добавлена возможность выводить список процессов и трассировки стека всех потоков, если некоторые запросы зависают после выполнения тестов. #4675 (alesapin)
- Добавлены повторные попытки при ошибке
Connection lossвclickhouse-test. #4682 (alesapin) - В скрипт packager добавлены сборка FreeBSD с Vagrant и сборка с Thread sanitizer. #4712 #4748 (alesapin)
- Теперь во время установки у пользователя запрашивается пароль для пользователя
'default'. #4725 (proller) - Подавлено предупреждение в библиотеке
rdkafka. #4740 (alexey-milovidov) - Добавлена возможность сборки без SSL. #4750 (proller)
- Добавлен способ запускать образ
clickhouse-serverот имени произвольного пользователя. #4753 (Mikhail f. Shiryaev) - Обновлён contrib boost до 1.69. #4793 (proller)
- Отключено использование
mremapпри компиляции с Thread Sanitizer. Как ни странно, TSan не перехватываетmremap(хотя перехватываетmmap,munmap), что приводит к ложноположительным срабатываниям. Исправлен отчёт TSan в тестах с сохранением состояния. #4859 (alexey-milovidov) - Добавлен тест, проверяющий использование схемы формата через HTTP-интерфейс. #4864 (Vitaly Baranov)
Релиз ClickHouse 19.4
Релиз ClickHouse 19.4.4.33, 2019-04-17
Исправления ошибок
- Предотвращён вызов
std::terminateв случае ошибки выделения памяти. Теперь, как и ожидается, генерируется исключениеstd::bad_alloc. #4665 (alexey-milovidov) - Исправлено чтение
capnprotoиз буфера. Иногда файлы не удавалось успешно загрузить по HTTP. #4674 (Vladislav) - Исправлена ошибка
Unknown log entry type: 0, возникавшая при выполнении запросаOPTIMIZE TABLE FINAL. #4683 (Amos Bird) - Некорректные аргументы функций
hasAnyиhasAllмогут приводить к segfault. #4698 (alexey-milovidov) - При выполнении запроса
DROP DATABASE dictionaryмогла возникать взаимная блокировка. #4701 (alexey-milovidov) - Исправлено неопределённое поведение функций
medianиquantile. #4702 (hcz) - Исправлено определение уровня сжатия, если
network_compression_methodуказан в нижнем регистре. Ошибка появилась в v19.1. #4706 (proller) - Устранено игнорирование настройки
<timezone>UTC</timezone>(исправлена проблема #4658). #4718 (proller) - Исправлено поведение функции
histogramпри работе с таблицамиDistributed. #4741 (olegkv) - Исправлен отчёт tsan
destroy of a locked mutex. #4742 (alexey-milovidov) - Исправлено сообщение TSan при завершении работы из-за race condition при использовании системных журналов. Исправлено потенциальное use-after-free при завершении работы, когда включен part_log. #4758 (alexey-milovidov)
- Исправлена повторная проверка частей в
ReplicatedMergeTreeAlterThreadпри возникновении ошибки. #4772 (Nikolai Kochetov) - Арифметические операции с промежуточными состояниями агрегатных функций не работали для константных аргументов (например, результатов подзапросов). #4776 (alexey-milovidov)
- Всегда заключайте имена столбцов в метаданных в обратные кавычки. В противном случае будет невозможно создать таблицу со столбцом с именем
index(сервер не перезапустится из-за некорректного запросаATTACHв метаданных). #4782 (alexey-milovidov) - Исправлено падение в
ALTER ... MODIFY ORDER BYдля таблицыDistributed. #4790 (TCeason) - Исправлен segfault при
JOIN ONс включеннымenable_optimize_predicate_expression. #4794 (Winter Zhang) - Исправлена ошибка, из-за которой после обработки сообщения Protobuf из Kafka добавлялась лишняя строка. #4808 (Vitaly Baranov)
- Исправлена ошибка сегментации в
clickhouse-copier. #4835 (proller) - Исправлена гонка в
SELECTизsystem.tables, если таблица одновременно переименовывается или изменяется. #4836 (alexey-milovidov) - Исправлено состояние гонки при получении уже устаревшей части данных. #4839 (alexey-milovidov)
- Исправлена редкая состояние гонки, которое могло возникать при
RENAMEтаблицы семейства MergeTree. #4844 (alexey-milovidov) - Исправлена ошибка сегментации в функции
arrayIntersect. Она могла возникнуть, если функция вызывалась со смешанными константными и обычными аргументами. #4847 (Lixiang Qian) - Исправлено чтение из столбца
Array(LowCardinality)в редком случае, когда он содержал длинную последовательность пустых массивов. #4850 (Nikolai Kochetov) - Исправлено исключение
No message receivedпри получении частей от других реплик. #4856 (alesapin) - Исправлен некорректный результат функции
arrayIntersectв случае наличия нескольких повторяющихся значений в одном массиве. #4871 (Nikolai Kochetov) - Исправлено состояние гонки при одновременном выполнении запросов
ALTER COLUMN, которое могло привести к аварийному завершению сервера (исправлена проблема #3421). #4592 (Alex Zatelepin) - Исправлено определение параметров в
ALTER MODIFYдля столбцаCODEC, если тип столбца не указан. #4883 (alesapin) - Функции
cutQueryStringAndFragment()иqueryStringAndFragment()теперь корректно работают, еслиURLсодержит фрагмент, но не содержит строки запроса. #4894 (Vitaly Baranov) - Исправлена редкая ошибка, возникавшая при ненулевом значении настройки
min_bytes_to_use_direct_io, когда потоку требовалось переместиться назад в файле столбца. #4897 (alesapin) - Исправлены неверные типы аргументов у агрегатных функций с аргументами
LowCardinality(исправление проблемы #4919). #4922 (Nikolai Kochetov) - Исправлен результат работы функции
toISOWeekдля 1970 года. #4988 (alexey-milovidov) - Исправлено дублирование запросов
DROP,TRUNCATEиOPTIMIZEпри выполнении с использованием предложенияON CLUSTERдля семейства таблицReplicatedMergeTree*. #4991 (alesapin)
Улучшения
- Обычные столбцы, а также столбцы
DEFAULT,MATERIALIZEDиALIASтеперь хранятся в одном списке (исправлена проблема #2867). #4707 (Alex Zatelepin)
Релиз ClickHouse 19.4.3.11, 2019-04-02
Исправления ошибок
- Исправлен сбой в
FULL/RIGHT JOINпри JOIN по Nullable- и не-Nullable-полям. #4855 (Artem Zuikov) - Устранена ошибка сегментации в
clickhouse-copier. #4835 (proller)
Улучшения сборки/тестирования/упаковки
- Добавлена возможность запускать образ clickhouse-server от имени произвольного пользователя. #4753 (Mikhail f. Shiryaev)
Релиз ClickHouse 19.4.2.7, 2019-03-30
Исправления ошибок
- Исправлено чтение из столбца
Array(LowCardinality)в редком случае, когда он содержал длинную последовательность пустых массивов. #4850 (Nikolai Kochetov)
Релиз ClickHouse 19.4.1.3, 2019-03-19
Исправления ошибок
- Исправлена обработка удалённых запросов, содержащих одновременно
LIMIT BYиLIMIT. Ранее, если в удалённом запросе использовалисьLIMIT BYиLIMIT,LIMITмог применяться раньшеLIMIT BY, что приводило к чрезмерно отфильтрованному результату. #4708 (Constantin S. Pan)
Релиз ClickHouse 19.4.0.49, 2019-03-09
Новые возможности
- Добавлена полная поддержка формата
Protobuf(ввод и вывод, вложенные структуры данных). #4174 #4493 (Vitaly Baranov) - Добавлены функции для работы с битмапами на базе Roaring Bitmaps. #4207 (Andy Yang) #4568 (Vitaly Baranov)
- Добавлена поддержка формата Parquet. #4448 (proller)
- Добавлена n-gram distance для неточного сравнения строк. Она аналогична q-gram-метрикам в языке R. #4466 (Danila Kutenin)
- Объединены правила graphite rollup из отдельных шаблонов агрегации и хранения данных. #4426 (Mikhail f. Shiryaev)
- Добавлены
max_execution_speedиmax_execution_speed_bytesдля ограничения использования ресурсов. Также добавлена настройкаmin_execution_speed_bytesв дополнение кmin_execution_speed. #4430 (Winter Zhang) - Реализована функция
flatten. #4555 #4409 (alexey-milovidov, kzon) - Добавлены функции
arrayEnumerateDenseRankedиarrayEnumerateUniqRanked(аналогичноarrayEnumerateUniq, но позволяют более точно настраивать глубину массива для работы с многомерными массивами). #4475 (proller) #4601 (alexey-milovidov) - Несколько JOIN с некоторыми ограничениями: без звёздочек, без сложных псевдонимов в ON/WHERE/GROUP BY/… #4462 (Artem Zuikov)
Исправления ошибок
- В этот релиз также вошли все исправления ошибок из версий 19.3 и 19.1.
- Исправлена ошибка в индексах для пропуска данных: порядок гранул после INSERT был неправильным. #4407 (Nikita Vasilev)
- Исправлен индекс
setдля столбцовNullableиLowCardinality. Ранее использование индексаsetсо столбцомNullableилиLowCardinalityприводило к ошибкеData type must be deserialized with multiple streamsпри выполнении выборки. #4594 (Nikolai Kochetov) - Корректно устанавливается update_time при полном обновлении словаря
executable. #4551 (Tema Novikov) - Исправлен неработающий индикатор выполнения в 19.3. #4627 (filimonov)
- Исправлены некорректные значения MemoryTracker, которые в некоторых случаях возникали при уменьшении области памяти. #4619 (alexey-milovidov)
- Исправлено неопределённое поведение в ThreadPool. #4612 (alexey-milovidov)
- Исправлен очень редкий сбой с сообщением
mutex lock failed: Invalid argument, который мог произойти при одновременном удалении таблицы MergeTree и выполнении SELECT. #4608 (Alex Zatelepin) - Поддержка драйвером ODBC типа данных
LowCardinality. #4381 (proller) - FreeBSD: исправление для ошибки
AIOcontextPool: Found io_event with unknown id 0. #4438 (urgordeadbeef) - Таблица
system.part_logсоздавалась вне зависимости от конфигурации. #4483 (alexey-milovidov) - Исправлено неопределённое поведение функции
dictIsInдля словарей типа cache. #4515 (alesapin) - Исправлена взаимная блокировка, возникавшая, когда запрос SELECT несколько раз блокировал одну и ту же таблицу (например, из разных потоков или при выполнении нескольких подзапросов), а одновременно выполнялся DDL-запрос. #4535 (Alex Zatelepin)
- Отключили compile_expressions по умолчанию, пока у нас не появится собственный
llvmcontrib и не будет возможности протестировать его сclangиasan. #4579 (alesapin) - Предотвращён
std::terminate, еслиinvalidate_queryдля внешнего источника словаряclickhouseвозвращал некорректный результат (пустой, более одной строки или более одного столбца). Также исправлена проблема, из-за которойinvalidate_queryвыполнялся каждые пять секунд независимо от значенияlifetime. #4583 (alexey-milovidov) - Предотвращена взаимная блокировка, когда
invalidate_queryдля словаря с источникомclickhouseзатрагивал таблицуsystem.dictionariesили базу данныхDictionaries(редкий случай). #4599 (alexey-milovidov) - Исправлено поведение CROSS JOIN при пустом WHERE. #4598 (Artem Zuikov)
- Устранён segfault в функции “replicate” при передаче константного аргумента. #4603 (alexey-milovidov)
- Исправлена работа лямбда-функции с оптимизатором предикатов. #4408 (Winter Zhang)
- Несколько исправлений, связанных с множественными JOIN. #4595 (Artem Zuikov)
Улучшения
- Поддержка псевдонимов в условии JOIN ON для столбцов правой таблицы. #4412 (Artem Zuikov)
- Результат нескольких JOIN теперь получает корректные имена, чтобы их можно было использовать в подзапросах. В результирующем наборе плоские псевдонимы заменены исходными именами. #4474 (Artem Zuikov)
- Улучшена логика pushdown для операторов JOIN. #4387 (Ivan)
Повышение производительности
- Улучшены эвристики оптимизации «move to PREWHERE». #4405 (alexey-milovidov)
- Используются корректные таблицы lookup, работающие через API HashTable для 8-битных и 16-битных ключей. #4536 (Amos Bird)
- Повышена производительность сравнения строк. #4564 (alexey-milovidov)
- Очередь распределённых DDL-запросов теперь очищается в отдельном потоке, чтобы не замедлять основной цикл обработки задач распределённых DDL-запросов. #4502 (Alex Zatelepin)
- Когда
min_bytes_to_use_direct_ioустановлено в 1, не каждый файл открывался в режиме O_DIRECT, потому что размер данных для чтения иногда занижался на размер одного сжатого блока. #4526 (alexey-milovidov)
Улучшения сборки/тестирования/упаковки
- Добавлена поддержка clang-9 #4604 (alexey-milovidov)
- Исправлены неверные инструкции
__asm__(снова) #4621 (Konstantin Podshumok) - Добавлена возможность задавать настройки для
clickhouse-performance-testиз командной строки. #4437 (alesapin) - Тесты Dictionaries добавлены в интеграционные тесты. #4477 (alesapin)
- В автоматизированные тесты производительности добавлены запросы из бенчмарка на сайте. #4496 (alexey-milovidov)
xxhash.hотсутствует во внешнем lz4, поскольку это внутренняя деталь реализации, а его символы находятся в пространстве имен с макросомXXH_NAMESPACE. Когда lz4 используется как внешняя библиотека, xxHash тоже должен быть внешним, а зависимые компоненты должны с ним линковаться. #4495 (Orivej Desh)- Исправлен случай, когда агрегатную функцию
quantileTimingможно было вызывать с отрицательным аргументом или аргументом с плавающей точкой (это исправляет fuzz-тест с sanitizer неопределенного поведения). #4506 (alexey-milovidov) - Исправлена орфографическая ошибка. #4531 (sdk2)
- Исправлена компиляция на Mac. #4371 (Vitaly Baranov)
- Исправления сборки для FreeBSD и различных нестандартных конфигураций сборки. #4444 (proller)
Релиз ClickHouse 19.3
Релиз ClickHouse 19.3.9.1, 2019-04-02
Исправления ошибок
- Исправлен сбой в
FULL/RIGHT JOINпри JOIN по Nullable- и не-Nullable-столбцам. #4855 (Artem Zuikov) - Исправлена ошибка сегментации в
clickhouse-copier. #4835 (proller) - Исправлено чтение из столбца
Array(LowCardinality)в редком случае, когда столбец содержал длинную последовательность пустых массивов. #4850 (Nikolai Kochetov)
Улучшения сборки/тестирования/упаковки
- Добавлена возможность запускать образ clickhouse-server от имени произвольного пользователя #4753 (Mikhail f. Shiryaev)
Релиз ClickHouse 19.3.7, 2019-03-12
Исправления ошибок
- Исправлена ошибка в #3920. Эта ошибка проявляется как случайное повреждение кэша (сообщения
Unknown codec family code,Cannot seek through file) и segfault. Эта ошибка впервые появилась в версии 19.1 и присутствует в версиях вплоть до 19.1.10 и 19.3.6. #4623 (alexey-milovidov)
Релиз ClickHouse 19.3.6, 2019-03-02
Исправления ошибок
- Если в пуле потоков более 1000 потоков, при завершении потока может вызываться
std::terminate. Azat Khuzhin #4485 #4505 (alexey-milovidov) - Теперь можно создавать таблицы
ReplicatedMergeTree*, где у столбцов есть комментарии, но нет значений по умолчанию, а также таблицы, где у столбцов есть кодеки, но нет комментариев и значений по умолчанию. Также исправлено сравнение кодеков. #4523 (alesapin) - Исправлен сбой при JOIN с Array или Tuple. #4552 (Artem Zuikov)
- Исправлен сбой в clickhouse-copier с сообщением
ThreadStatus not created. #4540 (Artem Zuikov) - Исправлено зависание при завершении работы сервера, если использовались распределённые DDL-запросы. #4472 (Alex Zatelepin)
- В сообщении об ошибке при разборе текстового формата для столбцов с номером больше 10 выводились неверные номера столбцов. #4484 (alexey-milovidov)
Улучшения сборки/тестирования/упаковки
- Исправлена сборка при включенном AVX. #4527 (alexey-milovidov)
- Включен расширенный учет и учет IO на основе заведомо корректной версии, а не ядра, на котором выполняется сборка. #4541 (nvartolomei)
- Теперь можно пропускать установку
core_dump.size_limit; если задать ограничение не удается, выдается предупреждение вместо того, чтобы сгенерировать исключение. #4473 (proller) - Удалены спецификаторы
inlineуvoid readBinary(...)вField.cpp. Также объединены избыточные блокиnamespace DB. #4530 (hcz)
Релиз ClickHouse 19.3.5, 2019-02-21
Исправления ошибок
- Исправлена ошибка, связанная с обработкой крупных HTTP-запросов на вставку. #4454 (alesapin)
- Исправлено нарушение обратной совместимости со старыми версиями из-за неверной реализации настройки
send_logs_level. #4445 (alexey-milovidov) - Исправлено нарушение обратной совместимости табличной функции
remote, возникшее из-за комментариев к столбцам. #4446 (alexey-milovidov)
Релиз ClickHouse 19.3.4, 2019-02-16
Улучшения
- Размер индекса таблицы не учитывался в лимитах памяти при выполнении запроса
ATTACH TABLE. Устранена ситуация, при которой таблицу нельзя было присоединить обратно после отсоединения. #4396 (alexey-milovidov) - Немного увеличен лимит максимального размера строки и массива, получаемых из ZooKeeper. Это позволяет продолжить работу при увеличенном значении
CLIENT_JVMFLAGS=-Djute.maxbuffer=...в ZooKeeper. #4398 (alexey-milovidov) - Теперь можно восстанавливать заброшенную реплику, даже если в её очереди уже очень много узлов. #4399 (alexey-milovidov)
- Добавлен обязательный аргумент для индекса
SET(максимальное число хранимых строк). #4386 (Nikita Vasilev)
Исправления ошибок
- Исправлен результат
WITH ROLLUPпри группировке по одному ключуLowCardinality. #4384 (Nikolai Kochetov) - Исправлена ошибка в индексе set (гранула отбрасывалась, если содержала более
max_rowsстрок). #4386 (Nikita Vasilev) - Много исправлений, связанных со сборкой под FreeBSD. #4397 (proller)
- Исправлена подстановка псевдонимов в запросах с подзапросом, содержащим тот же псевдоним (проблема #4110). #4351 (Artem Zuikov)
Улучшения сборки/тестирования/упаковки
- Добавлена возможность запускать
clickhouse-serverв Docker-образе для тестов без сохранения состояния. #4347 (Vasily Nemkov)
Релиз ClickHouse 19.3.3, 2019-02-13
Новые возможности
- Добавлен оператор
KILL MUTATION, позволяющий удалять мутации, которые по каким-либо причинам зависли. Для упрощения устранения неполадок в таблицуsystem.mutationsдобавлены поляlatest_failed_part,latest_fail_time,latest_fail_reason. #4287 (Alex Zatelepin) - Добавлена агрегатная функция
entropy, вычисляющая энтропию Шеннона. #4238 (Quid37) - Добавлена возможность отправлять на сервер запросы
INSERT INTO tbl VALUES (....без разделения на частиqueryиdata. #4301 (alesapin) - Добавлена универсальная реализация функции
arrayWithConstant. #4322 (alexey-milovidov) - Реализован оператор сравнения
NOT BETWEEN. #4228 (Dmitry Naumov) - Реализована функция
sumMapFiltered, позволяющая ограничить число ключей, для которыхsumMapсуммирует значения. #4129 (Léo Ercolanelli) - Добавлена поддержка типов
Nullableв табличной функцииmysql. #4198 (Emmanuel Donin de Rosière) - Добавлена поддержка произвольных константных выражений в
LIMIT. #4246 (k3box) - Добавлена агрегатная функция
topKWeighted, принимающая дополнительный аргумент веса (unsigned integer). #4245 (Andrew Golman) StorageJoinтеперь поддерживает настройкуjoin_any_take_last_row, которая позволяет перезаписывать существующие значения для одного и того же ключа. #3973 (Amos Bird- Добавлена функция
toStartOfInterval. #4304 (Vitaly Baranov) - Добавлен формат
RowBinaryWithNamesAndTypes. #4200 (Oleg V. Kozlyuk) - Добавлены типы данных
IPv4иIPv6. Реализованы более эффективные версии функцийIPv*. #3669 (Vasily Nemkov) - Добавлена функция
toStartOfTenMinutes(). #4298 (Vitaly Baranov) - Добавлен формат вывода
Protobuf. #4005 #4158 (Vitaly Baranov) - Добавлена поддержка brotli в HTTP-интерфейсе для импорта данных (INSERTs). #4235 (Mikhail)
- Добавлены подсказки на случай, если пользователь допускает опечатку в имени функции или типа в клиенте командной строки. #4239 (Danila Kutenin)
- В заголовок HTTP-ответа сервера добавлен
Query-Id. #4231 (Mikhail)
Экспериментальные возможности
- Добавлены индексы для пропуска данных
minmaxиsetдля семейства движков таблиц MergeTree. #4143 (Nikita Vasilev) - Добавлено преобразование
CROSS JOINвINNER JOIN, если это возможно. #4221 #4266 (Artem Zuikov)
Исправления ошибок
- Исправлена ошибка
Not found columnдля дублирующихся столбцов в разделеJOIN ON. #4279 (Artem Zuikov) - Команда
START REPLICATED SENDSтеперь запускает реплицированные отправки. #4229 (nvartolomei) - Исправлено выполнение агрегатных функций, принимающих аргументы
Array(LowCardinality). #4055 (KochetovNicolai) - Исправлено некорректное поведение при выполнении запроса
INSERT ... SELECT ... FROM file(...), если файл имеет форматCSVWithNamesилиTSVWIthNames, а первая строка данных отсутствует. #4297 (alexey-milovidov) - Исправлен сбой при перезагрузке словаря, если словарь недоступен. Эта ошибка появилась в версии 19.1.6. #4188 (proller)
- Исправлена ошибка в
ALL JOINпри наличии дубликатов в правой таблице. #4184 (Artem Zuikov) - Исправлены ошибка сегментации при
use_uncompressed_cache=1и исключение из-за неверного несжатого размера. Эта ошибка появилась в 19.1.6. #4186 (alesapin) - Исправлена ошибка
compile_expressionsпри сравнении дат большого диапазона (большеint16). #4341 (alesapin) - Исправлен бесконечный цикл при чтении из табличной функции
numbers(0). #4280 (alexey-milovidov) - Временно отключена оптимизация предикатов для
ORDER BY. #3890 (Winter Zhang) - Исправлена ошибка
Illegal instruction, возникавшая при использовании функций base64 на старых CPU. Эта ошибка воспроизводилась только в случае, если ClickHouse был скомпилирован с gcc-8. #4275 (alexey-milovidov) - Исправлена ошибка
No message received, возникавшая при работе с PostgreSQL ODBC Driver через TLS‑соединение. Также исправлен segfault при использовании MySQL ODBC Driver. #4170 (alexey-milovidov) - Исправлен некорректный результат при использовании аргументов
DateиDateTimeв ветвях условного оператора (функцииif). Добавлен общий случай для функцииif. #4243 (alexey-milovidov) - Словари ClickHouse теперь загружаются внутри процесса
clickhouse. #4166 (alexey-milovidov) - Исправлен дедлок при повторном выполнении
SELECTиз таблицы с движкомFileпосле ошибкиNo such file or directory. #4161 (alexey-milovidov) - Исправлено состояние гонки, из-за которого при выборке из
system.tablesмогла возникать ошибкаtable does not exist. #4313 (alexey-milovidov) clickhouse-clientможет аварийно завершаться при выходе во время загрузки данных для подсказок в командной строке, если был запущен в интерактивном режиме. #4317 (alexey-milovidov)- Исправлена ошибка, из-за которой выполнение мутаций, содержащих операторы
IN, приводило к некорректным результатам. #4099 (Alex Zatelepin) - Исправлена ошибка: если существовала база данных с движком
Dictionary, все словари принудительно загружались при запуске сервера, и если среди них был словарь с источником ClickHouse на localhost, такой словарь не мог загрузиться. #4255 (alexey-milovidov) - Исправлена ошибка при повторной попытке создать системные журналы при остановке сервера. #4254 (alexey-milovidov)
- Исправлен возврат правильного типа и корректная обработка блокировок в функции
joinGet. #4153 (Amos Bird) - Добавлена функция
sumMapWithOverflow. #4151 (Léo Ercolanelli) - Исправлен segfault при использовании
allow_experimental_multiple_joins_emulation. 52de2c (Artem Zuikov) - Исправлена ошибка, связанная с некорректным сравнением
DateиDateTime. #4237 (valexey) - Исправлен fuzz-тест при использовании санитайзера undefined behavior: добавлена проверка типа параметра для семейства функций
quantile*Weighted. #4145 (alexey-milovidov) - Исправлено редкое состояние гонки, из-за которого при удалении старых частей данных могла возникать ошибка
File not found. #4378 (alexey-milovidov) - Исправлен пакет установки, в котором отсутствовал /etc/clickhouse-server/config.xml. #4343 (proller)
Улучшение сборки, тестирования и упаковки
- Пакет Debian: ссылка /etc/clickhouse-server/preprocessed исправлена в соответствии с конфигурацией. #4205 (proller)
- Различные исправления сборки для FreeBSD. #4225 (proller)
- Добавлена возможность создавать, заполнять и удалять таблицы в perftest. #4220 (alesapin)
- Добавлен скрипт для проверки дублирующихся include. #4326 (alexey-milovidov)
- Добавлена возможность запускать запросы по индексу в performance test. #4264 (alesapin)
- Рекомендуется устанавливать пакет с отладочными символами. #4274 (alexey-milovidov)
- Рефакторинг performance-test. Улучшены логирование и обработка сигналов. #4171 (alesapin)
- Добавлена документация к анонимизированным датасетам Yandex.Metrica. #4164 (alesapin)
- Добавлен инструмент для преобразования старой части с месячной партицией в формат с пользовательскими партициями. #4195 (Alex Zatelepin)
- Добавлена документация о двух датасетах в S3. #4144 (alesapin)
- Добавлен скрипт, который создаёт changelog из описаний pull request. #4169 #4173 (KochetovNicolai) (KochetovNicolai)
- Добавлен модуль Puppet для ClickHouse. #4182 (Maxim Fedotov)
- Добавлена документация для группы недокументированных функций. #4168 (Winter Zhang)
- Исправления сборки для ARM. #4210#4306 #4291 (proller) (proller)
- Тесты словарей теперь можно запускать из
ctest. #4189 (proller) - Теперь
/etc/sslиспользуется как каталог с SSL-сертификатами по умолчанию. #4167 (alexey-milovidov) - Добавлена проверка наличия инструкций SSE и AVX при запуске. #4234 (Igr)
- Init-скрипт будет ждать запуска сервера. #4281 (proller)
Обратно несовместимые изменения
- Удалена настройка
allow_experimental_low_cardinality_type. Типы данныхLowCardinalityготовы для использования в продакшне. #4323 (alexey-milovidov) - Уменьшен размер кэша меток и кэша несжатых данных в соответствии с объёмом доступной памяти. #4240 (Lopatin Konstantin
- В запрос
CREATE TABLEдобавлено ключевое словоINDEX. Столбец с именемindexдолжен быть заключён в обратные кавычки или двойные кавычки:`index`. #4143 (Nikita Vasilev) sumMapтеперь повышает тип результата вместо переполнения. Прежнее поведениеsumMapможно получить с помощью функцииsumMapWithOverflow. #4151 (Léo Ercolanelli)
Повышение производительности
std::sortзаменён наpdqsortдля запросов безLIMIT. #4236 (Evgenii Pravda)- Теперь сервер повторно использует потоки из глобального пула потоков. Это повышает производительность в некоторых редких случаях. #4150 (alexey-milovidov)
Улучшения
- Реализована поддержка AIO для FreeBSD. #4305 (urgordeadbeef)
SELECT * FROM a JOIN b USING a, bтеперь возвращает столбцыaиbтолько из левой таблицы. #4141 (Artem Zuikov)- Разрешено использовать опцию
-Cклиента так же, как опцию-c. #4232 (syominsergey) - Теперь опция
--password, используемая без значения, запрашивает пароль из stdin. #4230 (BSD_Conqueror) - Добавлена подсветка неэкранированных метасимволов в строковых литералах, содержащих выражения
LIKEили регулярные выражения. #4327 (alexey-milovidov) - Добавлена отмена HTTP-запросов только на чтение, если клиентский сокет закрывается. #4213 (nvartolomei)
- Теперь сервер сообщает о прогрессе, чтобы поддерживать клиентские соединения активными. #4215 (Ivan)
- Немного улучшено сообщение с причиной для запроса OPTIMIZE при включенной настройке
optimize_throw_if_noop. #4294 (alexey-milovidov) - Добавлена поддержка опции
--versionдля ClickHouse server. #4251 (Lopatin Konstantin) - Добавлена опция
--help/-hдляclickhouse-server. #4233 (Yuriy Baranov) - Добавлена поддержка скалярных подзапросов с результатом в виде состояния aggregate function. #4348 (Nikolai Kochetov)
- Улучшено время остановки сервера и ожидания ALTER. #4372 (alexey-milovidov)
- В system.replicas добавлена информация о настройке replicated_can_become_leader, а также добавлен logging, если реплика не будет пытаться стать leader. #4379 (Alex Zatelepin)
Релиз ClickHouse 19.1
Релиз ClickHouse 19.1.14, 2019-03-14
- Исправлена ошибка
Column ... queried more than once, которая в редких случаях могла возникать, если параметрasterisk_left_columns_onlyбыл установлен в 1 при использованииGLOBAL JOINсSELECT *. В версии 19.3 и новее этой проблемы нет. 6bac7d8d (Artem Zuikov)
Релиз ClickHouse 19.1.13, 2019-03-12
Релиз ClickHouse 19.1.10, 2019-03-03
Релиз ClickHouse 19.1
Релиз ClickHouse 19.1.9, 2019-02-21
Исправления ошибок
- Исправлена потеря обратной совместимости со старыми версиями из-за некорректной реализации настройки
send_logs_level. #4445 (alexey-milovidov) - Исправлена потеря обратной совместимости табличной функции
remote, возникшая после добавления комментариев к столбцам. #4446 (alexey-milovidov)
Релиз ClickHouse 19.1.8, 2019-02-16
Исправления ошибок
- Исправлена установка пакета в случае отсутствия файла /etc/clickhouse-server/config.xml. #4343 (proller)
Релиз ClickHouse 19.1
Релиз ClickHouse 19.1.7, 2019-02-15
Исправления ошибок
- В функции
joinGetисправлены возврат правильного типа и обработка блокировок. #4153 (Amos Bird) - Исправлена ошибка при повторной попытке создать системные журналы во время остановки сервера. #4254 (alexey-milovidov)
- Исправлена ошибка: если существует база данных с движком
Dictionary, все словари принудительно загружаются при запуске сервера, и если среди них есть словарь с источником ClickHouse на localhost, такой словарь не может загрузиться. #4255 (alexey-milovidov) - Исправлена ошибка, из-за которой выполнение мутаций, содержащих операторы
IN, давало некорректные результаты. #4099 (Alex Zatelepin) clickhouse-clientможет аварийно завершаться с segfault при завершении работы во время загрузки данных для подсказок командной строки, если он был запущен в интерактивном режиме. #4317 (alexey-milovidov)- Исправлено состояние гонки, из-за которого при выборке из
system.tablesмогла возникать ошибкаtable does not exist. #4313 (alexey-milovidov) - Исправлена взаимоблокировка при повторном выполнении
SELECTиз таблицы с движкомFileпосле ошибкиNo such file or directory. #4161 (alexey-milovidov) - Исправлена проблема: локальные словари ClickHouse загружаются через TCP, хотя должны загружаться внутри процесса. #4166 (alexey-milovidov)
- Исправлена ошибка
No message received, возникавшая при работе с PostgreSQL ODBC Driver через TLS‑соединение. Также исправлен segfault при использовании MySQL ODBC Driver. #4170 (alexey-milovidov) - Временно отключена оптимизация предикатов для
ORDER BY. #3890 (Winter Zhang) - Исправлен бесконечный цикл при выборке из табличной функции
numbers(0). #4280 (alexey-milovidov) - Исправлена ошибка в
compile_expressions, связанная со сравнением больших дат (большеint16). #4341 (alesapin) - Исправлены сбой сегментации при
uncompressed_cache=1и исключение из-за неверного несжатого размера. #4186 (alesapin) - Исправлена ошибка в
ALL JOINпри наличии дубликатов в правой таблице. #4184 (Artem Zuikov) - Исправлено некорректное поведение при выполнении запроса
INSERT ... SELECT ... FROM file(...), если у файла форматCSVWithNamesилиTSVWIthNamesи отсутствует первая строка данных. #4297 (alexey-milovidov) - Исправлено выполнение агрегатных функций для аргументов
Array(LowCardinality). #4055 (KochetovNicolai) - Пакет Debian: ссылка /etc/clickhouse-server/preprocessed исправлена в соответствии с конфигурацией. #4205 (proller)
- Исправлен fuzz-тест при использовании санитайзера неопределенного поведения: добавлена проверка типа параметра для семейства функций
quantile*Weighted. #4145 (alexey-milovidov) - Сделать так, чтобы команда
START REPLICATED SENDSзапускала реплицированные передачи. #4229 (nvartolomei) - Исправлена ошибка
Not found columnдля дублирующихся столбцов в разделе JOIN ON. #4279 (Artem Zuikov) - Теперь каталогом SSL-сертификатов по умолчанию используется
/etc/ssl. #4167 (alexey-milovidov) - Исправлен сбой при перезагрузке словаря, когда он недоступен. #4188 (proller)
- Исправлена ошибка, из-за которой
DateиDateTimeсравнивались некорректно. #4237 (valexey) - Исправлен некорректный результат при использовании аргументов
DateиDateTimeв ветвях условного оператора (функцииif). Добавлен общий случай для функцииif. #4243 (alexey-milovidov)
Релиз ClickHouse 19.1.6, 2019-01-24
Новые возможности
- Пользовательские кодеки сжатия для отдельных столбцов таблиц. #3899 #4111 (alesapin, Winter Zhang, Anatoly)
- Добавлен кодек сжатия
Delta. #4052 (alesapin) - Теперь можно изменять кодеки сжатия с помощью
ALTER. #4054 (alesapin) - Добавлены функции
left,right,trim,ltrim,rtrim,timestampadd,timestampsubдля совместимости со стандартом SQL. #3826 (Ivan Blinkov) - Добавлена поддержка записи в таблицы
HDFSи табличную функциюhdfs. #4084 (alesapin) - Добавлены функции для поиска нескольких константных строк в большой строке:
multiPosition,multiSearch,firstMatch, а также варианты с-UTF8,-CaseInsensitiveи-CaseInsensitiveUTF8. #4053 (Danila Kutenin) - Отсечение неиспользуемых сегментов, если запрос
SELECTфильтрует по ключу сегментирования (настройкаoptimize_skip_unused_shards). #3851 (Gleb Kanterov, Ivan) - Движок
Kafkaтеперь может игнорировать некоторое количество ошибок разбора на блок. #4094 (Ivan) - Добавлена поддержка оценки многоклассовых моделей
CatBoost. ФункцияmodelEvaluateвозвращает кортеж с сырыми предсказаниями по каждому классу для многоклассовых моделей.libcatboostmodel.soдолжен быть собран с #607. #3959 (KochetovNicolai) - Добавлены функции
filesystemAvailable,filesystemFree,filesystemCapacity. #4097 (Boris Granveaud) - Добавлены хеш-функции
xxHash64иxxHash32. #3905 (filimonov) - Добавлена хеш-функция
gccMurmurHash(вариант Murmur hash для GCC), которая использует тот же seed хеша, что и gcc #4000 (sundyli) - Добавлены хеш-функции
javaHash,hiveHash. #3811 (shangshujie365) - Добавлена табличная функция
remoteSecure. Функция работает какremote, но использует защищённое соединение. #4088 (proller)
Экспериментальные возможности
- Добавлена эмуляция нескольких операций JOIN (настройка
allow_experimental_multiple_joins_emulation). #3946 (Artem Zuikov)
Исправления ошибок
- Параметр
compiled_expression_cache_sizeтеперь по умолчанию ограничен, чтобы снизить потребление памяти. #4041 (alesapin) - Исправлена ошибка, приводившая к зависанию потоков, выполняющих ALTER для таблиц Replicated, а также потока, обновляющего конфигурацию из ZooKeeper. #2947 #3891 #3934 (Alex Zatelepin)
- Исправлено состояние гонки при выполнении распределённой задачи ALTER. Из-за этого состояния гонки несколько реплик пытались выполнить задачу, и все реплики, кроме одной, завершались с ошибкой ZooKeeper. #3904 (Alex Zatelepin)
- Исправлена ошибка, из-за которой элементы конфигурации
from_zkне обновлялись после тайм-аута запроса к ZooKeeper. #2947 #3947 (Alex Zatelepin) - Исправлена ошибка с неправильным префиксом для масок подсети IPv4. #3945 (alesapin)
- Устранён сбой (
std::terminate) в редких случаях, когда не удаётся создать новый поток из-за нехватки ресурсов. #3956 (alexey-milovidov) - Исправлена ошибка при выполнении табличной функции
remote, связанная с использованием неверных ограничений вgetStructureOfRemoteTable. #4009 (alesapin) - Исправлена утечка netlink-сокетов. Они помещались в пул, где никогда не удалялись, а новые сокеты создавались при запуске нового потока, когда все имеющиеся сокеты были заняты. #4017 (Alex Zatelepin)
- Исправлена ошибка, из-за которой каталог
/proc/self/fdзакрывался до того, как из/procуспевали прочитать все файловые дескрипторы, после форка подпроцессаodbc-bridge. #4120 (alesapin) - Исправлено монотонное преобразование из String в UInt при использовании String в первичном ключе. #3870 (Winter Zhang)
- Исправлена ошибка в вычислении монотонности функции преобразования в целые числа. #3921 (alexey-milovidov)
- Исправлен segfault в функциях
arrayEnumerateUniq,arrayEnumerateDenseпри передаче некоторых некорректных аргументов. #3909 (alexey-milovidov) - Исправлено UB в StorageMerge. #3910 (Amos Bird)
- Исправлен segfault в функциях
addDays,subtractDays. #3913 (alexey-milovidov) - Исправлена ошибка: функции
round,floor,trunc,ceilмогли возвращать некорректный результат при работе с целочисленным аргументом и большим отрицательным значением scale. #3914 (alexey-milovidov) - Исправлена ошибка, вызванная ‘kill query sync’, которая приводила к созданию core dump. #3916 (muVulDeePecker)
- Исправлена ошибка, из-за которой возникала длительная задержка после опустошения очереди репликации. #3928 #3932 (alesapin)
- Исправлено чрезмерное использование памяти при вставке в таблицу с первичным ключом
LowCardinality. #3955 (KochetovNicolai) - Исправлена сериализация
LowCardinalityдля форматаNativeв случае пустых массивов. #3907 #4011 (KochetovNicolai) - Исправлен некорректный результат при использовании distinct по одному числовому столбцу LowCardinality. #3895 #4012 (KochetovNicolai)
- Исправлена специализированная агрегация с ключом LowCardinality, когда включена настройка
compile. #3886 (KochetovNicolai) - Исправлена передача имени пользователя и пароля при запросах к реплицируемым таблицам. #3957 (alesapin) (小路)
- Исправлено крайне редкое состояние гонки, которое могло возникать при получении списка таблиц в базе данных Dictionary во время перезагрузки словарей. #3970 (alexey-milovidov)
- Исправлен некорректный результат при использовании HAVING с ROLLUP или CUBE. #3756 #3837 (Sam Chou)
- Исправлены псевдонимы столбцов для запросов с синтаксисом
JOIN ONи distributed таблиц. #3980 (Winter Zhang) - Исправлена ошибка во внутренней реализации
quantileTDigest(обнаружена Артёмом Вахрушевым). Эта ошибка никогда не возникает в ClickHouse и была актуальна только для тех, кто использует кодовую базу ClickHouse напрямую как библиотеку. #3935 (alexey-milovidov)
Улучшения
- Поддержка
IF NOT EXISTSв операторахALTER TABLE ADD COLUMN, а такжеIF EXISTSвDROP/MODIFY/CLEAR/COMMENT COLUMN. #3900 (Boris Granveaud) - Функция
parseDateTimeBestEffort: добавлена поддержка форматовDD.MM.YYYY,DD.MM.YY,DD-MM-YYYY,DD-Mon-YYYY,DD/Month/YYYYи подобных. #3922 (alexey-milovidov) CapnProtoInputStreamтеперь поддерживает нерегулярные структуры. #4063 (Odin Hultgren Van Der Horst)- Повышено удобство использования: добавлена проверка того, что процесс сервера запускается владельцем каталога данных. Запуск сервера от root запрещён, если данные принадлежат пользователю, отличному от root. #3785 (sergey-v-galtsev)
- Улучшена логика проверки обязательных столбцов при анализе запросов с JOIN. #3930 (Artem Zuikov)
- Уменьшено число соединений при большом количестве Distributed tables на одном сервере. #3726 (Winter Zhang)
- Добавлена поддержка итоговой строки для запроса
WITH TOTALSв ODBC Driver. #3836 (Maksim Koritckiy) - Разрешено использовать
Enumкак целые числа внутри функции if. #3875 (Ivan) - Добавлена настройка
low_cardinality_allow_in_native_format. Если она отключена, типLowCadrinalityне используется в форматеNative. #3879 (KochetovNicolai) - Из кэша compiled expressions удалены некоторые избыточные объекты, чтобы снизить использование памяти. #4042 (alesapin)
- Добавлена проверка того, что запрос
SET send_logs_level = 'value'принимает допустимое значение. #3873 (Sabyanin Maxim) - Исправлена проверка типов данных в функциях преобразования типов. #3896 (Winter Zhang)
Повышение производительности
- Добавлена настройка MergeTree
use_minimalistic_part_header_in_zookeeper. Если она включена, таблицы Replicated будут хранить метаданные компактной части в одном znode для части. Это может значительно уменьшить размер снимка ZooKeeper (особенно если в таблицах много столбцов). Обратите внимание: после включения этой настройки вы не сможете перейти на более раннюю версию, которая её не поддерживает. #3960 (Alex Zatelepin) - Добавлена реализация с использованием DFA для функций
sequenceMatchиsequenceCount, если шаблон регулярного выражения не содержит временных условий. #4004 (Léo Ercolanelli) - Улучшена производительность сериализации целых чисел. #3968 (Amos Bird)
- Для PODArray добавлено заполнение нулями слева, чтобы элемент с индексом -1 всегда был допустимым и обнулённым. Это используется для вычисления смещений без ветвлений. #3920 (Amos Bird)
- Возвращена предыдущая версия
jemalloc, так как она приводила к снижению производительности. #4018 (alexey-milovidov)
Обратно несовместимые изменения
- Удалена недокументированная возможность
ALTER MODIFY PRIMARY KEY, поскольку её заменила командаALTER MODIFY ORDER BY. #3887 (Alex Zatelepin) - Удалена функция
shardByHash. #3833 (alexey-milovidov) - Запрещено использовать скалярные подзапросы, возвращающие результат типа
AggregateFunction. #3865 (Ivan)
Улучшения сборки, тестирования и упаковки
- Добавлена поддержка сборки для PowerPC (
ppc64le). #4132 (Danila Kutenin) - Функциональные тесты с сохранением состояния запускаются на общедоступном наборе данных. #3969 (alexey-milovidov)
- Исправлена ошибка, из-за которой server не мог запуститься и выводил сообщение
bash: /usr/bin/clickhouse-extract-from-config: Operation not permittedв Docker или systemd-nspawn. #4136 (alexey-milovidov) - Обновлена библиотека
rdkafkaдо v1.0.0-RC5. Вместо низкоуровневого интерфейса на C использован cppkafka. #4025 (Ivan) - Обновлена библиотека
mariadb-client. Исправлена одна из проблем, выявленных UBSan. #3924 (alexey-milovidov) - Некоторые исправления в сборках UBSan. #3926 #3021 #3948 (alexey-milovidov)
- Добавлены прогоны тестов для каждого коммита в сборке с UBSan.
- Добавлены запуски статического анализатора PVS-Studio для каждого коммита.
- Исправлены ошибки, выявленные с помощью PVS-Studio. #4013 (alexey-milovidov)
- Исправлены проблемы с совместимостью glibc. #4100 (alexey-milovidov)
- Docker-образы переведены на 18.10, добавлен файл совместимости для glibc >= 2.28 #3965 (alesapin)
- Добавлена переменная окружения для случаев, когда пользователь не хочет выполнять
chownдля каталогов в Docker-образе сервера. #3967 (alesapin) - В clang включили большинство предупреждений из
-Weverything. Включили-Wpedantic. #3986 (alexey-milovidov) - Добавлено ещё несколько предупреждений, доступных только в Clang 8. #3993 (alexey-milovidov)
- При динамической компоновке используйте
libLLVM, а не отдельные библиотеки LLVM. #3989 (Orivej Desh) - Добавлены переменные санитайзера для тестовых образов. #4072 (alesapin)
- Пакет Debian
clickhouse-serverбудет рекомендовать пакетlibcap2-binдля использования инструментаsetcapпри назначении привилегий. Это необязательно. #4093 (alexey-milovidov) - Ускорена компиляция, исправлены директивы include. #3898 (proller)
- Добавлены тесты производительности хеш-функций. #3918 (filimonov)
- Исправлены циклические зависимости библиотек. #3958 (proller)
- Улучшена компиляция в условиях ограниченной доступной памяти. #4030 (proller)
- Добавлен тестовый скрипт для воспроизведения падения производительности в
jemalloc. #4036 (alexey-milovidov) - Исправлены опечатки в комментариях и строковых литералах в
dbms. #4122 (maiha) - Исправлены опечатки в комментариях. #4089 (Evgenii Pravda)