Журнал изменений за 2017 год
Релиз ClickHouse 1.1.54327, 2017-12-21
Этот релиз содержит исправления ошибок для предыдущего релиза 1.1.54318:
- Исправлена ошибка с возможным состоянием гонки в репликации, которая могла приводить к потере данных. Эта проблема затрагивает версии 1.1.54310 и 1.1.54318. Если вы используете одну из этих версий с реплицируемыми таблицами, настоятельно рекомендуется выполнить обновление. Эта проблема проявляется в логах предупреждающими сообщениями вида
Part ... from own log does not exist.. Проблема актуальна, даже если вы не видите эти сообщения в логах.
Релиз ClickHouse 1.1.54318, 2017-11-30
Этот релиз содержит исправления ошибок для предыдущего релиза 1.1.54310:
- Исправлено некорректное удаление строк во время слияний в движке SummingMergeTree
- Исправлена утечка памяти в нереплицируемых движках MergeTree
- Исправлена деградация производительности при частых вставках в движки MergeTree
- Исправлена проблема, приводившая к остановке очереди репликации
- Исправлена ротация и архивирование серверных логов
Релиз ClickHouse 1.1.54310, 2017-11-01
Новые возможности:
- Пользовательский ключ партиционирования для семейства движков таблиц MergeTree.
- Движок таблиц Kafka.
- Добавлена поддержка загрузки моделей CatBoost и их применения к данным, хранящимся в ClickHouse.
- Добавлена поддержка часовых поясов с нецелочисленным смещением от UTC.
- Добавлена поддержка арифметических операций с временными интервалами.
- Диапазон значений для типов Date и DateTime расширен до 2105 года.
- Добавлен запрос
CREATE MATERIALIZED VIEW x TO y(указывается существующая таблица для хранения данных материализованного представления). - Добавлен запрос
ATTACH TABLEбез аргументов. - Логика обработки столбцов типа Nested с именами, оканчивающимися на -Map, в таблице SummingMergeTree была вынесена в агрегатную функцию sumMap. Теперь вы можете указывать такие столбцы явно.
- Максимальный размер словаря IP trie увеличен до 128M записей.
- Добавлена функция getSizeOfEnumType.
- Добавлена агрегатная функция sumWithOverflow.
- Добавлена поддержка входного формата Cap'n Proto.
- Теперь можно настраивать уровень сжатия при использовании алгоритма zstd.
Несовместимые изменения:
- Создание временных таблиц с движком, отличным от Memory, не допускается.
- Явное создание таблиц с движком View или MaterializedView не допускается.
- При создании таблицы выполняется новая проверка, которая удостоверяется, что выражение выборки (sampling key) входит в первичный ключ.
Исправления ошибок:
- Исправлены зависания при синхронной вставке в таблицу Distributed.
- Исправлено неатомарное добавление и удаление частей в реплицируемых таблицах.
- Данные, вставляемые в материализованное представление, не подвергаются избыточной дедупликации.
- Выполнение запроса к таблице Distributed, для которой локальная реплика отстает, а удалённые реплики недоступны, больше не приводит к ошибке.
- Пользователям больше не нужны права доступа к базе данных
defaultдля создания временных таблиц. - Исправлено падение при указании типа Array без аргументов.
- Исправлены зависания, когда дисковый том, содержащий серверные логи, заполнен.
- Исправлено переполнение в функции toRelativeWeekNum для первой недели эпохи Unix.
Улучшения сборки:
- Несколько сторонних библиотек (в частности, Poco) были обновлены и преобразованы в git submodules.
Релиз ClickHouse 1.1.54304, 2017-10-19
Новые возможности:
- Поддержка 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. - Исправлена обработка случая, когда исполняемый словарь возвращает ненулевой код ответа.
ClickHouse Release 1.1.54292, 2017-09-20
New Features:
- Добавлена функция
pointInPolygonдля работы с координатами на координатной плоскости. - Добавлена агрегатная функция
sumMapдля вычисления суммы массивов, аналогичноSummingMergeTree. - Добавлена функция
trunc. Повышена производительность функций округления (round,floor,ceil,roundToExp2) и скорректирована логика их работы. Изменена логика работы функцииroundToExp2для дробных и отрицательных чисел. - Исполняемый файл ClickHouse теперь меньше зависит от версии libc. Один и тот же исполняемый файл ClickHouse может работать на широком спектре систем Linux. Зависимость остаётся при использовании компилируемых запросов (с настройкой
compile = 1, которая по умолчанию не используется). - Сокращено время, необходимое для динамической компиляции запросов.
Bug Fixes:
- Исправлена ошибка, которая иногда приводила к появлению сообщений
part ... intersects previous partи ослабляла согласованность реплик. - Исправлена ошибка, из-за которой сервер зависал, если ZooKeeper был недоступен во время остановки.
- Убрано избыточное логирование при восстановлении реплик.
- Исправлена ошибка в реализации
UNION ALL. - Исправлена ошибка в функции
concat, возникавшая, если первый столбец в блоке имеет типArray. - Прогресс теперь корректно отображается в таблице
system.merges.
ClickHouse Release 1.1.54289, 2017-09-13
New Features:
- Запросы
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 минут).
- При выполнении
ALTERиспользуется блокировка по принципу FIFO: запросALTERне блокируется бесконечно при непрерывно выполняющихся запросах. - Добавлена возможность задать
umaskв конфигурационном файле. - Улучшена производительность запросов с
DISTINCT.
Bug Fixes:
- Улучшен процесс удаления старых узлов в ZooKeeper. Ранее старые узлы иногда не удалялись при очень частых вставках, что, среди прочего, приводило к медленному завершению работы сервера.
- Исправлён случайный выбор хостов для подключения к ZooKeeper.
- Исправлено исключение отстающих реплик из распределённых запросов, если реплика — это localhost.
- Исправлена ошибка, при которой часть данных в таблице
ReplicatedMergeTreeмогла быть повреждена после выполненияALTER MODIFYнад элементом структурыNested. - Исправлена ошибка, которая могла приводить к «зависанию» запросов SELECT.
- Улучшены распределённые DDL-запросы.
- Исправлен запрос
CREATE TABLE ... AS <materialized view>. - Устранена взаимоблокировка в запросе
ALTER ... CLEAR COLUMN IN PARTITIONдля таблицBuffer. - Исправлено некорректное значение по умолчанию для типов
Enum(0 вместо минимального значения) при использовании форматовJSONEachRowиTSKV. - Устранено появление «зомби»-процессов при использовании словаря с источником
executable. - Исправлена ошибка сегментации (segfault) для запроса HEAD.
Улучшенный процесс разработки и сборки ClickHouse:
- Можно использовать
pbuilderдля сборки ClickHouse. - Можно использовать
libc++вместоlibstdc++для сборок под Linux. - Добавлены инструкции по использованию инструментов статического анализа кода:
Coverage,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. Для этого перейдите в раздел<merge_tree>в config.xml, установите<merge_tree><max_bytes_to_merge_at_max_space_in_pool>107374182400</max_bytes_to_merge_at_max_space_in_pool>и перезапустите сервер.
Релиз ClickHouse 1.1.54284, 2017-08-29
- Это релиз с исправлениями ошибок для предыдущего релиза 1.1.54282. Исправлены утечки в каталоге частей в ZooKeeper.
Релиз ClickHouse 1.1.54282, 2017-08-23
Этот релиз содержит исправления ошибок для предыдущего релиза 1.1.54276:
- Исправлена ошибка
DB::Exception: Assertion violation: !_path.empty()при вставке в таблицу Distributed. - Исправлена обработка данных при вставке в формате RowBinary, если входные данные начинаются с ';'.
- Исправлены ошибки при компиляции во время выполнения для некоторых агрегатных функций (например,
groupArray()).
Релиз ClickHouse 1.1.54276, 2017-08-16
Новые возможности:
- Добавлен необязательный раздел WITH для запроса SELECT. Пример запроса:
WITH 1+1 AS a SELECT a, a*a - INSERT может выполняться синхронно в таблицу типа Distributed: OK возвращается только после того, как все данные сохранены на всех шардах. Эта возможность включается настройкой insert_distributed_sync=1.
- Добавлен тип данных UUID для работы с 16-байтовыми идентификаторами.
- Добавлены псевдонимы типов CHAR, FLOAT и других для совместимости с Tableau.
- Добавлены функции toYYYYMM, toYYYYMMDD и toYYYYMMDDhhmmss для преобразования времени в числа.
- Можно использовать IP-адреса (вместе с именем хоста) для идентификации серверов для кластерных DDL-запросов.
- Добавлена поддержка неконстантных аргументов и отрицательных смещений в функции
substring(str, pos, len). - Добавлен параметр max_size для агрегатной функции
groupArray(max_size)(column)и оптимизирована её производительность.
Основные изменения:
- Улучшения безопасности: все файлы сервера создаются с правами 0640 (может быть изменено через параметр конфигурации
<umask>). - Улучшены сообщения об ошибках для запросов с некорректным синтаксисом.
- Существенно снижено потребление памяти и улучшена производительность при слиянии крупных частей данных 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 constexpr. - Добавлены новые настройки для движков MergeTree (секция merge_tree в config.xml):
- replicated_deduplication_window_seconds задаёт количество секунд, в течение которых допускается дедупликация вставок в реплицируемых таблицах.
- cleanup_delay_period задаёт, как часто запускать очистку для удаления устаревших данных.
- replicated_can_become_leader может предотвратить назначение реплики лидером (и назначение слияний).
- Ускорена очистка устаревших данных из ZooKeeper.
- Многочисленные улучшения и исправления для кластерных DDL-запросов. Особый интерес представляет новая настройка distributed_ddl_task_timeout, которая ограничивает время ожидания ответа от серверов в кластере. Если DDL-запрос не был выполнен на всех хостах, ответ будет содержать ошибку тайм-аута, и запрос будет выполнен в асинхронном режиме.
- Улучшено отображение трассировок стека в серверных логах.
- Добавлено значение "none" для метода сжатия.
- Можно использовать несколько секций dictionaries_config в config.xml.
- Возможна работа с MySQL через сокет в файловой системе.
- В таблицу system.parts добавлен новый столбец с информацией о размере меток (marks) в байтах.
Исправление ошибок:
- Распределённые таблицы, использующие таблицу Merge, теперь корректно работают для запроса SELECT с условием по полю
_table. - Исправлено редкое состояние гонки в 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.
Улучшенный рабочий процесс разработки и сборки ClickHouse:
- Сборки можно собирать в Arcadia.
- Для компиляции ClickHouse можно использовать gcc 7.
- Параллельные сборки с использованием ccache+distcc теперь работают быстрее.
Релиз ClickHouse 1.1.54245, 2017-07-04
Новые возможности:
- Распределённый DDL (например,
CREATE TABLE ON CLUSTER) - Реплицируемый запрос
ALTER TABLE CLEAR COLUMN IN PARTITION. - Движок для таблиц Dictionary (доступ к данным словаря в виде таблицы).
- Движок базы данных Dictionary (для этой базы данных автоматически доступны таблицы Dictionary для всех подключённых внешних словарей).
- Можно проверять обновления словаря, отправляя запрос к источнику.
- Квалифицированные имена столбцов.
- Экранирование идентификаторов с помощью двойных кавычек.
- Сессии в HTTP-интерфейсе.
- Запрос OPTIMIZE для Replicated-таблицы может выполняться не только на лидере.
Несовместимые с предыдущими версиями изменения:
- Удалён SET GLOBAL.
Незначительные изменения:
- Теперь после срабатывания алерта в лог выводится полный стек вызовов.
- Ослаблена проверка количества повреждённых/лишних частей данных при старте (ранее было слишком много ложных срабатываний).
Исправленные ошибки:
- Исправлено "залипание" плохого соединения при вставке в Distributed-таблицу.
- GLOBAL IN теперь работает для запроса из таблицы Merge, который обращается к Distributed-таблице.
- На виртуальной машине Google Compute Engine неправильно определялось количество ядер. Это исправлено.
- Изменена работа исполняемого источника кэшируемых внешних словарей.
- Исправлено сравнение строк, содержащих нулевые символы.
- Исправлено сравнение полей первичного ключа Float32 с константами.
- Ранее некорректная оценка размера поля могла приводить к чрезмерно большим выделениям памяти.
- Исправлен сбой при запросе Nullable-столбца, добавленного в таблицу с помощью ALTER.
- Исправлен сбой при сортировке по Nullable-столбцу, если число строк меньше LIMIT.
- Исправлен подзапрос в ORDER BY, состоящий только из константных значений.
- Ранее Replicated-таблица могла оставаться в некорректном состоянии после неудачного DROP TABLE.
- Псевдонимы для скалярных подзапросов с пустыми результатами больше не теряются.
- Теперь запрос, использующий компиляцию, не завершается с ошибкой, если .so-файл повреждён.