- Релиз содержит изменения к предыдущему релизу 1.1.54310 с исправлением следующих багов:
- Исправлено некорректное удаление строк при слияниях в движке SummingMergeTree
- Исправлена утечка памяти в нереплицированных MergeTree-движках
- Исправлена деградация производительности при частых вставках в MergeTree-движках
- Исправлена проблема, приводящая к остановке выполнения очереди репликации
- Исправлено ротирование и архивация логов сервера
- Произвольный ключ партиционирования для таблиц семейства MergeTree.
- Движок таблиц Kafka.
- Возможность загружать модели CatBoost и применять их к данным, хранящимся в ClickHouse.
- Поддержка часовых поясов с нецелым смещением от UTC.
- Поддержка операций с временными интервалами.
- Диапазон значений типов Date и DateTime расширен до 2105 года.
- Запрос
CREATE MATERIALIZED VIEW x TO y
(позволяет указать существующую таблицу для хранения данных материализованного представления). - Запрос
ATTACH TABLE
без аргументов. - Логика обработки Nested-столбцов в SummingMergeTree, заканчивающихся на -Map, вынесена в агрегатную функцию sumMap. Такие столбцы теперь можно задавать явно.
- Максимальный размер IP trie-словаря увеличен до 128М записей.
- Функция getSizeOfEnumType.
- Агрегатная функция sumWithOverflow.
- Поддержка входного формата Cap’n Proto.
- Возможность задавать уровень сжатия при использовании алгоритма zstd.
- Запрещено создание временных таблиц с движком, отличным от Memory.
- Запрещено явное создание таблиц с движком View и MaterializedView.
- При создании таблицы теперь проверяется, что ключ сэмплирования входит в первичный ключ.
- Исправлено зависание при синхронной вставке в Distributed таблицу.
- Исправлена неатомарность при добавлении/удалении кусков в реплицированных таблицах.
- Данные, вставляемые в материализованное представление, теперь не подвергаются излишней дедупликации.
- Запрос в Distributed таблицу, для которого локальная реплика отстаёт, а удалённые недоступны, теперь не падает.
- Для создания временных таблиц теперь не требуется прав доступа к БД
default
. - Исправлено падение при указании типа Array без аргументов.
- Исправлено зависание при недостатке места на диске в разделе с логами.
- Исправлено переполнение в функции toRelativeWeekNum для первой недели Unix-эпохи.
- Несколько сторонних библиотек (в частности, Poco) обновлены и переведены на git submodules.
- Добавлена поддержка TLS в нативном протоколе (включается заданием
tcp_ssl_port
вconfig.xml
)
ALTER
для реплицированных таблиц теперь пытается начать выполнение как можно быстрее- Исправлены падения при чтении данных с настройкой
preferred_block_size_bytes=0
- Исправлено падение
clickhouse-client
при нажатииPage Down
- Корректная интепретация некоторых сложных запросов с
GLOBAL IN
иUNION ALL
- Операция
FREEZE PARTITION
теперь работает всегда атомарно - Исправлено зависание пустых POST-запросов (теперь возвращается код 411)
- Исправлены ошибки при интепретации выражений типа
CAST(1 AS Nullable(UInt8))
- Исправлена ошибка при чтении колонок типа
Array(Nullable(String))
изMergeTree
таблиц - Исправлено падение при парсинге запросов типа
SELECT dummy AS dummy, dummy AS b
- Корректное обновление пользователей при невалидном
users.xml
- Корректная обработка случаев, когда executable-словарь возвращает ненулевой код ответа
- Добавлена функция
pointInPolygon
для работы с координатами на плоскости. - Добавлена агрегатная функция
sumMap
, обеспечивающая суммирование массивов аналогичноSummingMergeTree
. - Добавлена функция
trunc
. Увеличена производительность функций округленияround
,floor
,ceil
,roundToExp2
. Исправлена логика работы функций округления. Изменена логика работы функцииroundToExp2
для дробных и отрицательных чисел. - Ослаблена зависимость исполняемого файла ClickHouse от версии libc. Один и тот же исполняемый файл ClickHouse может запускаться и работать на широком множестве Linux систем. Замечание: зависимость всё ещё присутствует при использовании скомпилированных запросов (настройка
compile = 1
, по-умолчанию не используется). - Уменьшено время динамической компиляции запросов.
- Исправлена ошибка, которая могла приводить к сообщениям
part ... intersects previous part
и нарушению консистентности реплик. - Исправлена ошибка, приводящая к блокировке при завершении работы сервера, если в это время ZooKeeper недоступен.
- Удалено избыточное логгирование при восстановлении реплик.
- Исправлена ошибка в реализации UNION ALL.
- Исправлена ошибка в функции concat, возникающая в случае, если первый столбец блока имеет тип Array.
- Исправлено отображение прогресса в таблице system.merges.
- Запросы
SYSTEM
для административных действий с сервером:SYSTEM RELOAD DICTIONARY
,SYSTEM RELOAD DICTIONARIES
,SYSTEM DROP DNS CACHE
,SYSTEM SHUTDOWN
,SYSTEM KILL
. - Добавлены функции для работы с массивами:
concat
,arraySlice
,arrayPushBack
,arrayPushFront
,arrayPopBack
,arrayPopFront
. - Добавлены параметры
root
иidentity
для конфигурации ZooKeeper. Это позволяет изолировать разных пользователей одного ZooKeeper кластера. - Добавлены агрегатные функции
groupBitAnd
,groupBitOr
,groupBitXor
(для совместимости доступны также под именамиBIT_AND
,BIT_OR
,BIT_XOR
). - Возможность загрузки внешних словарей из MySQL с указанием сокета на файловой системе.
- Возможность загрузки внешних словарей из MySQL через SSL соединение (параметры
ssl_cert
,ssl_key
,ssl_ca
). - Добавлена настройка
max_network_bandwidth_for_user
для ограничения общего потребления сети для всех запросов одного пользователя. - Поддержка
DROP TABLE
для временных таблиц. - Поддержка чтения значений типа
DateTime
в формате unix timestamp из форматовCSV
иJSONEachRow
. - Включено по-умолчанию отключение отстающих реплик при распределённых запросах (по-умолчанию порог равен 5 минутам).
- Используются FIFO блокировки при ALTER: выполнение ALTER не будет неограниченно блокироваться при непрерывно выполняющихся запросах.
- Возможность задать
umask
в конфигурационном файле. - Увеличена производительность запросов с
DISTINCT
.
- Более оптимальная процедура удаления старых нод в ZooKeeper. Ранее в случае очень частых вставок, старые ноды могли не успевать удаляться, что приводило, в том числе, к очень долгому завершению сервера.
- Исправлена рандомизация при выборе хостов для соединения с ZooKeeper.
- Исправлено отключение отстающей реплики при распределённых запросах, если реплика является localhost.
- Исправлена ошибка, в связи с которой кусок данных таблицы типа
ReplicatedMergeTree
мог становиться битым после выполненияALTER MODIFY
элементаNested
структуры. - Исправлена ошибка приводящая к возможному зависанию SELECT запросов.
- Доработки распределённых DDL запросов.
- Исправлен запрос
CREATE TABLE ... AS <materialized view>
. - Исправлен дедлок при запросе
ALTER ... CLEAR COLUMN IN PARTITION
дляBuffer
таблиц. - Исправлено использование неправильного значения по-умолчанию для
Enum
-ов (0 вместо минимального) при использовании форматовJSONEachRow
иTSKV
. - Исправлено появление zombie процессов при работе со словарём с источником
executable
. - Исправлен segfault при запросе HEAD.
- Возможность сборки с помощью
pbuilder
. - Возможность сборки с использованием
libc++
вместоlibstdc++
под Linux. - Добавлены инструкции для использования статических анализаторов кода
Coverity
,clang-tidy
,cppcheck
.
- Увеличено значение по-умолчанию для настройки MergeTree
max_bytes_to_merge_at_max_space_in_pool
(максимальный суммарный размер кусков в байтах для мержа) со 100 GiB до 150 GiB. Это может привести к запуску больших мержей после обновления сервера, что может вызвать повышенную нагрузку на дисковую подсистему. Если же на серверах, где это происходит, количество свободного места менее чем в два раза больше суммарного объёма выполняющихся мержей, то в связи с этим перестанут выполняться какие-либо другие мержи, включая мержи мелких кусков. Это приведёт к тому, что INSERT-ы будут отклоняться с сообщением "Merges are processing significantly slower than inserts". Для наблюдения, используйте запросSELECT * FROM system.merges
. Вы также можете смотреть на метрикуDiskSpaceReservedForMerge
в таблицеsystem.metrics
или в Graphite. Для исправления этой ситуации можно ничего не делать, так как она нормализуется сама после завершения больших мержей. Если же вас это не устраивает, вы можете вернуть настройкуmax_bytes_to_merge_at_max_space_in_pool
в старое значение, прописав в config.xml в секции<merge_tree>
<max_bytes_to_merge_at_max_space_in_pool>107374182400</max_bytes_to_merge_at_max_space_in_pool>
и перезапустить сервер.
- Релиз содержит изменения к предыдущему релизу 1.1.54282, которые исправляют утечку записей о кусках в ZooKeeper
Релиз содержит исправления к предыдущему релизу 1.1.54276:
- Исправлена ошибка
DB::Exception: Assertion violation: !_path.empty()
при вставке в Distributed таблицу. - Исправлен парсинг при вставке в формате RowBinary, если входные данные начинаются с ';'.
- Исправлена ошибка при рантайм-компиляции некоторых агрегатных функций (например,
groupArray()
).
- Добавлена опциональная секция WITH запроса SELECT. Пример запроса:
WITH 1+1 AS a SELECT a, a*a
- Добавлена возможность синхронной вставки в Distributed таблицу: выдается Ok только после того как все данные записались на все шарды. Активируется настройкой insert_distributed_sync=1
- Добавлен тип данных UUID для работы с 16-байтовыми идентификаторами
- Добавлены алиасы типов CHAR, FLOAT и т.д. для совместимости с Tableau
- Добавлены функции toYYYYMM, toYYYYMMDD, toYYYYMMDDhhmmss для перевода времени в числа
- Добавлена возможность использовать IP адреса (совместно с hostname) для идентификации сервера при работе с кластерными DDL запросами
- Добавлена поддержка неконстантных аргументов и отрицательных смещений в функции
substring(str, pos, len)
- Добавлен параметр max_size для агрегатной функции
groupArray(max_size)(column)
, и оптимизирована её производительность
- Улучшение безопасности: все файлы сервера создаются с правами 0640 (можно поменять, через параметр в конфиге).
- Улучшены сообщения об ошибках в случае синтаксически неверных запросов
- Значительно уменьшен расход оперативной памяти и улучшена производительность слияний больших MergeTree-кусков данных
- Значительно увеличена производительность слияний данных для движка ReplacingMergeTree
- Улучшена производительность асинхронных вставок из Distributed таблицы за счет объединения нескольких исходных вставок. Функциональность включается настройкой distributed_directory_monitor_batch_inserts=1.
- Изменился бинарный формат агрегатных состояний функции
groupArray(array_column)
для массивов
- Добавлена настройка
output_format_json_quote_denormals
, включающая вывод nan и inf значений в формате JSON - Более оптимальное выделение потоков при чтении из Distributed таблиц
- Разрешено задавать настройки в режиме readonly, если их значение не изменяется
- Добавлена возможность считывать нецелые гранулы движка MergeTree для выполнения ограничений на размер блока, задаваемый настройкой preferred_block_size_bytes - для уменьшения потребления оперативной памяти и увеличения кэш-локальности при обработке запросов из таблиц со столбцами большого размера
- Эффективное использование индекса, содержащего выражения типа
toStartOfHour(x)
, для условий видаtoStartOfHour(x) op сonstexpr
- Добавлены новые настройки для MergeTree движков (секция merge_tree в config.xml):
- replicated_deduplication_window_seconds позволяет задать интервал дедупликации вставок в Replicated-таблицы в секундах
- cleanup_delay_period - периодичность запуска очистки неактуальных данных
- replicated_can_become_leader - запретить реплике становиться лидером (и назначать мержи)
- Ускорена очистка неактуальных данных из ZooKeeper
- Множественные улучшения и исправления работы кластерных DDL запросов. В частности, добавлена настройка distributed_ddl_task_timeout, ограничивающая время ожидания ответов серверов кластера.
- Улучшено отображение стэктрейсов в логах сервера
- Добавлен метод сжатия none
- Возможность использования нескольких секций dictionaries_config в config.xml
- Возможность подключения к MySQL через сокет на файловой системе
- В таблицу system.parts добавлен столбец с информацией о размере marks в байтах
- Исправлена некорректная работа Distributed таблиц, использующих Merge таблицы, при SELECT с условием на поле _table
- Исправлен редкий race condition в ReplicatedMergeTree при проверке кусков данных
- Исправлено возможное зависание процедуры leader election при старте сервера
- Исправлено игнорирование настройки max_replica_delay_for_distributed_queries при использовании локальной реплики в качестве источника данных
- Исправлено некорректное поведение
ALTER TABLE CLEAR COLUMN IN PARTITION
при попытке очистить несуществующую колонку - Исправлено исключение в функции multiIf при использовании пустых массивов или строк
- Исправлено чрезмерное выделение памяти при десериализации формата Native
- Исправлено некорректное автообновление Trie словарей
- Исправлено исключение при выполнении запросов с GROUP BY из Merge-таблицы при использовании SAMPLE
- Исправлено падение GROUP BY при использовании настройки distributed_aggregation_memory_efficient=1
- Добавлена возможность указывать database.table в правой части IN и JOIN
- Исправлено использование слишком большого количества потоков при параллельной агрегации
- Исправлена работа функции if с аргументами FixedString
- Исправлена некорректная работа SELECT из Distributed-таблицы для шардов с весом 0
- Исправлено падение запроса
CREATE VIEW IF EXISTS
- Исправлено некорректное поведение при input_format_skip_unknown_fields=1 в случае отрицательных чисел
- Исправлен бесконечный цикл в функции
dictGetHierarchy()
в случае некоторых некорректных данных словаря - Исправлены ошибки типа
Syntax error: unexpected (...)
при выполнении распределенных запросов с подзапросами в секции IN или JOIN, в случае использования совместно с Merge таблицами - Исправлена неправильная интерпретация SELECT запроса из таблиц типа Dictionary
- Исправлена ошибка "Cannot mremap" при использовании множеств в секциях IN, JOIN, содержащих более 2 млрд. элементов
- Исправлен failover для словарей с источником MySQL
- Добавлена возмозможность сборки в Arcadia
- Добавлена возможность сборки с помощью gcc 7
- Ускорена параллельная сборка с помощью ccache+distcc
- Распределённые DDL (например,
CREATE TABLE ON CLUSTER
) - Реплицируемый запрос
ALTER TABLE CLEAR COLUMN IN PARTITION
- Движок таблиц Dictionary (доступ к данным словаря в виде таблицы)
- Движок баз данных Dictionary (в такой базе автоматически доступны Dictionary-таблицы для всех подключённых внешних словарей)
- Возможность проверки необходимости обновления словаря путём отправки запроса в источник
- Qualified имена столбцов
- Квотирование идентификаторов двойными кавычками
- Сессии в HTTP интерфейсе
- Запрос OPTIMIZE для Replicated таблицы теперь можно выполнять не только на лидере
- Убрана команда SET GLOBAL
- Теперь после получения сигнала в лог печатается полный стектрейс
- Ослаблена проверка на количество повреждённых/лишних кусков при старте (было слишком много ложных срабатываний)
- Исправлено залипание плохого соединения при вставке в Distributed таблицу
- GLOBAL IN теперь работает при запросе из таблицы Merge, смотрящей в Distributed
- Теперь правильно определяется количество ядер на виртуалках Google Compute Engine
- Исправления в работе executable источника кэшируемых внешних словарей
- Исправлены сравнения строк, содержащих нулевые символы
- Исправлено сравнение полей первичного ключа типа Float32 с константами
- Раньше неправильная оценка размера поля могла приводить к слишком большим аллокациям
- Исправлено падение при запросе Nullable столбца, добавленного в таблицу ALTER-ом
- Исправлено падение при сортировке по Nullable столбцу, если количество строк меньше LIMIT
- Исправлен ORDER BY подзапроса, состоящего только из константных значений
- Раньше Replicated таблица могла остаться в невалидном состоянии после неудавшегося DROP TABLE
- Алиасы для скалярных подзапросов с пустым результатом теперь не теряются
- Теперь запрос, в котором использовалась компиляция, не завершается ошибкой, если .so файл повреждается