Релиз ClickHouse 1.1.54327, 2017-12-21
- Исправлена ошибка, связанная с возможным состоянием гонки при репликации, которая могла привести к потере данных. Эта проблема затрагивает версии 1.1.54310 и 1.1.54318. Если вы используете одну из этих версий с таблицами Replicated, настоятельно рекомендуется обновиться. Эта проблема проявляется в журналах в виде предупреждений, таких как
Part ... from own log does not exist.Она актуальна, даже если вы не видите этих сообщений в журналах.
Релиз ClickHouse 1.1.54318, 2017-11-30
- Исправлено некорректное удаление строк во время слияний в движке SummingMergeTree
- Исправлена утечка памяти в нереплицируемых движках MergeTree
- Исправлено снижение производительности при частых вставках в движках MergeTree
- Исправлена проблема, из-за которой очередь репликации переставала работать
- Исправлены ротация и архивирование серверных журналов
Релиз ClickHouse 1.1.54310, 2017-11-01
Новые возможности:
- Настраиваемый ключ партиционирования для семейства движков таблиц MergeTree.
- Движок таблицы Kafka.
- Добавлена поддержка загрузки моделей CatBoost и их применения к данным, хранящимся в ClickHouse.
- Добавлена поддержка часовых поясов с нецелыми смещениями относительно UTC.
- Добавлена поддержка арифметических операций с временными интервалами.
- Диапазон значений типов Date и DateTime расширен до 2105 года.
- Добавлен запрос
CREATE MATERIALIZED VIEW x TO y(задаёт существующую таблицу для хранения данных materialized view). - Добавлен запрос
ATTACH TABLEбез аргументов. - Логика обработки Nested-столбцов с именами, оканчивающимися на -Map, в таблице SummingMergeTree была вынесена в агрегатную функцию sumMap. Теперь такие столбцы можно указывать явно.
- Максимальный размер словаря IP trie увеличен до 128M записей.
- Добавлена функция getSizeOfEnumType.
- Добавлена агрегатная функция sumWithOverflow.
- Добавлена поддержка входного формата Cap’n Proto.
- Теперь можно настраивать уровень сжатия при использовании алгоритма zstd.
Обратно несовместимые изменения:
- Создание временных таблиц с движком, отличным от Memory, запрещено.
- Явное создание таблиц с движком View или MaterializedView запрещено.
- При создании таблицы новая проверка удостоверяется, что выражение ключа выборки включено в первичный ключ.
Исправления ошибок:
- Исправлены зависания при синхронной вставке в distributed таблицу.
- Исправлены неатомарные добавление и удаление частей в таблицах Replicated.
- Данные, вставленные в materialized view, больше не подвергаются лишней дедупликации.
- Выполнение запроса к distributed таблице, у которой локальная реплика отстает, а удаленные реплики недоступны, больше не приводит к ошибке.
- Пользователям больше не нужны права доступа к базе данных
default, чтобы создавать временные таблицы. - Исправлено аварийное завершение при указании типа Array без аргументов.
- Исправлены зависания, если заполнен том диска с серверными журналами.
- Исправлено переполнение в функции toRelativeWeekNum для первой недели эпохи Unix.
Улучшения сборки:
- Несколько сторонних библиотек (в частности Poco) были обновлены и переведены на git-подмодули.
Релиз ClickHouse 1.1.54304, 2017-10-19
Новые возможности:
- Поддержка TLS в собственном протоколе (для включения задайте
tcp_ssl_portвconfig.xml).
Исправления ошибок:
ALTERдля таблиц Replicated теперь старается запускаться как можно раньше.- Исправлен сбой при чтении данных с настройкой
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 1.1.54292, 2017-09-20
Новые возможности:
- Добавлена функция
pointInPolygonдля работы с координатами на координатной плоскости. - Добавлена агрегатная функция
sumMapдля вычисления суммы массивов по аналогии сSummingMergeTree. - Добавлена функция
trunc. Повышена производительность функций округления (round,floor,ceil,roundToExp2) и исправлена логика их работы. Изменена логика функцииroundToExp2для дробных и отрицательных чисел. - Исполняемый файл ClickHouse теперь в меньшей степени зависит от версии libc. Один и тот же исполняемый файл ClickHouse может работать на самых разных системах Linux. Зависимость по-прежнему сохраняется при использовании скомпилированных запросов (с параметром
compile = 1, который по умолчанию не используется). - Сокращено время, необходимое для динамической компиляции запросов.
Исправления ошибок:
- Исправлена ошибка, из-за которой иногда появлялись сообщения
part ... intersects previous partи ухудшалась согласованность реплик. - Исправлена ошибка, из-за которой server зависал, если ZooKeeper был недоступен при завершении работы.
- Убрано избыточное логирование при восстановлении реплик.
- Исправлена ошибка в реализации UNION ALL.
- Исправлена ошибка в функции concat, возникавшая, если первый столбец в блоке имеет тип Array.
- Прогресс теперь корректно отображается в таблице system.merges.
Релиз ClickHouse 1.1.54289, 2017-09-13
Новые возможности:
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-временной метки из форматовCSVиJSONEachRow. - Отстающие реплики в распределённых запросах теперь по умолчанию исключаются (пороговое значение по умолчанию — 5 минут).
- Во время ALTER используется FIFO-блокировка: запрос 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. - Устранено появление процессов-зомби при использовании словаря с источником
executable. - Исправлен segfault при выполнении HEAD-запроса.
Улучшенный процесс разработки и сборки ClickHouse:
- Вы можете использовать
pbuilderдля сборки ClickHouse. - При сборке в Linux можно использовать
libc++вместоlibstdc++. - Добавлены инструкции по использованию инструментов статического анализа кода:
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
- Исправлено
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 для преобразования времени в числа.
- Для идентификации серверов в кластерных DDL-запросах можно использовать IP-адреса (вместе с именем хоста).
- Добавлена поддержка неконстантных аргументов и отрицательных смещений в функции
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 таблицы.
- Настройки можно задавать в режиме только для чтения, если их значение не изменяется.
- Добавлена возможность считывать неполные гранулы движка 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, которая ограничивает время ожидания ответа от серверов в кластере. Если DDL-запрос не был выполнен на всех хостах, ответ будет содержать ошибку тайм-аута, а запрос будет выполнен в асинхронном режиме.
- Улучшено отображение трассировок стека в серверных журналах.
- Добавлено значение “none” для метода сжатия.
- В config.xml можно использовать несколько разделов dictionaries_config.
- Можно подключаться к MySQL через сокет в файловой системе.
- В таблице system.parts появился новый столбец с информацией о размере marks в байтах.
Исправления ошибок:
- distributed таблицы, использующие таблицу Merge, теперь корректно работают для запросов SELECT с условием по полю
_table. - Исправлено редкое состояние гонки в ReplicatedMergeTree при проверке частей данных.
- Исправлено возможное зависание на этапе «выбора лидера» при запуске сервера.
- Настройка 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 миллиардами элементов. - Исправлено переключение при отказе для словарей с 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.
Незначительные изменения:
- Теперь после срабатывания алерта в лог выводится полная трассировка стека.
- Смягчена проверка числа повреждённых/лишних частей данных при запуске (ложных срабатываний было слишком много).
Исправления ошибок:
- Исправлено «залипание» некорректного connection при вставке в distributed таблицу.
- Теперь GLOBAL IN работает и для запроса из таблицы Merge, обращающегося к distributed таблице.
- Исправлено неверное определение количества ядер на виртуальной машине Google Compute Engine.
- Изменена работа executable-источника кэшированных внешних словарей.
- Исправлено сравнение строк, содержащих нулевые символы.
- Исправлено сравнение полей primary key типа Float32 с константами.
- Ранее неверная оценка размера field могла приводить к чрезмерно большим выделениям памяти.
- Исправлен сбой при выполнении запроса к столбцу Nullable, добавленному в таблицу с помощью ALTER.
- Исправлен сбой при сортировке по столбцу Nullable, если количество строк меньше LIMIT.
- Исправлен subquery в ORDER BY, состоящий только из константных значений.
- Ранее таблица Replicated могла оставаться в некорректном состоянии после неудачного DROP TABLE.
- Псевдонимы для scalar subqueries с пустым результатом больше не теряются.
- Теперь запрос, использующий компиляцию, не завершается с error, если файл .so повреждён.