mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-27 18:12:02 +00:00
454 lines
67 KiB
Markdown
454 lines
67 KiB
Markdown
# ClickHouse 1.1.54362 Release Candidate, 2018-03-11
|
||
|
||
## Новые возможности:
|
||
|
||
* Агрегация без `GROUP BY` по пустому множеству (как например, `SELECT count(*) FROM table WHERE 0`) теперь возвращает результат из одной строки с нулевыми значениями агрегатных функций, в соответствии со стандартом SQL. Вы можете вернуть старое поведение (возвращать пустой результат), выставив настройку `empty_result_for_aggregation_by_empty_set` в значение 1.
|
||
* Добавлено приведение типов при `UNION ALL`. Допустимо использование столбцов с разными алиасами в соответствующих позициях `SELECT` в `UNION ALL`, что соответствует стандарту SQL.
|
||
* Поддержка произвольных выражений в секции `LIMIT BY`. Ранее было возможно лишь использование столбцов - результата `SELECT`.
|
||
* Использование индекса таблиц семейства `MergeTree` при наличии условия `IN` на кортеж от выражений от столбцов первичного ключа. Пример `WHERE (UserID, EventDate) IN ((123, '2000-01-01'), ...)` (Anastasiya Tsarkova).
|
||
* Добавлен инструмент `clickhouse-copier` для межкластерного копирования и перешардирования данных (бета).
|
||
* Добавлены функции консистентного хэширования `yandexConsistentHash`, `jumpConsistentHash`, `sumburConsistentHash`. Их можно использовать в качестве ключа шардирования для того, чтобы уменьшить объём сетевого трафика при последующих перешардированиях.
|
||
* Добавлены функции `arrayAny`, `arrayAll`, `hasAny`, `hasAll`, `arrayIntersect`, `arrayResize`.
|
||
* Добавлена функция `arrayCumSum` (Javi Santana).
|
||
* Добавлена функция `parseDateTimeBestEffort`, `parseDateTimeBestEffortOrZero`, `parseDateTimeBestEffortOrNull`, позволяющая прочитать DateTime из строки, содержащей текст в широком множестве возможных форматов.
|
||
* Возможность частичной перезагрузки данных внешних словарей при их обновлении (загрузка лишь записей со значением заданного поля большим, чем при предыдущей загрузке) (Arsen Hakobyan).
|
||
* Добавлена табличная функция `cluster`. Пример: `cluster(cluster_name, db, table)`. Табличная функция `remote` может принимать имя кластера в качестве первого аргумента, если оно указано в виде идентификатора.
|
||
* Возможность использования табличных функций `remote`, `cluster` в `INSERT` запросах.
|
||
* Добавлены виртуальные столбцы `create_table_query`, `engine_full` в таблице `system.tables`. Столбец `metadata_modification_time` сделан виртуальным.
|
||
* Добавлены столбцы `data_path`, `metadata_path` в таблицы `system.tables` и` system.databases`, а также столбец `path` в таблицы `system.parts` и `system.parts_columns`.
|
||
* Добавлена дополнительная информация о слияниях в таблице `system.part_log`.
|
||
* Возможность использования произвольного ключа партиционирования для таблицы `system.query_log` (Kirill Shvakov).
|
||
* Запрос `SHOW TABLES` теперь показывает также и временные таблицы. Добавлены временные таблицы и столбец `is_temporary` в таблице `system.tables` (zhang2014).
|
||
* Добавлен запрос `DROP TEMPORARY TABLE`, `EXISTS TEMPORARY TABLE` (zhang2014).
|
||
* Поддержка `SHOW CREATE TABLE` для временных таблиц (zhang2014).
|
||
* Добавлен конфигурационный параметр `system_profile` для настроек, используемых внутренними процессами.
|
||
* Поддержка загрузки `object_id` в качестве атрибута в словарях с источником `MongoDB` (Павел Литвиненко).
|
||
* Возможность читать `null` как значение по-умолчанию при загрузке данных для внешнего словаря с источником `MongoDB` (Павел Литвиненко).
|
||
* Возможность чтения значения типа `DateTime` в формате `Values` из unix timestamp без одинарных кавычек.
|
||
* Поддержан failover в табличной функции `remote` для случая, когда на части реплик отсутствует запрошенная таблица.
|
||
* Возможность переопределять параметры конфигурации в параметрах командной строки при запуске `clickhouse-server`, пример: `clickhouse-server -- --logger.level=information`.
|
||
* Реализована функция `empty` от аргумента типа `FixedString`: функция возвращает 1, если строка состоит полностью из нулевых байт (zhang2014).
|
||
* Добавлен конфигурационный параметр `listen_try`, позволяющий слушать хотя бы один из listen адресов и не завершать работу, если некоторые адреса не удаётся слушать (полезно для систем с выключенной поддержкой IPv4 или IPv6).
|
||
* Добавлен движок таблиц `VersionedCollapsingMergeTree`.
|
||
* Поддержка строк и произвольных числовых типов для источника словарей `library`.
|
||
* Возможность использования таблиц семейства `MergeTree` без первичного ключа (для этого необходимо указать `ORDER BY tuple()`).
|
||
* Добавлена возможность выполнить преобразование (`CAST`) `Nullable` типа в не `Nullable` тип, если аргумент не является `NULL`.
|
||
* Возможность выполнения `RENAME TABLE` для `VIEW`.
|
||
* Добавлена функция `throwIf`.
|
||
* Добавлена настройка `odbc_default_field_size`, позволяющая расширить максимальный размер значения, загружаемого из ODBC источника (по-умолчанию - 1024).
|
||
* В таблицу `system.processes` и в `SHOW PROCESSLIST` добавлены столбцы `is_cancelled` и `peak_memory_usage`.
|
||
|
||
## Улучшения:
|
||
|
||
* Ограничения на результат и квоты на результат теперь не применяются к промежуточным данным для запросов `INSERT SELECT` и для подзапросов в `SELECT`.
|
||
* Уменьшено количество ложных срабатываний при проверке состояния `Replicated` таблиц при запуске сервера, приводивших к необходимости выставления флага `force_restore_data`.
|
||
* Добавлена настройка `allow_distributed_ddl`.
|
||
* Запрещено использование недетерминированных функций в выражениях для ключей таблиц семейства `MergeTree`.
|
||
* Файлы с подстановками из `config.d` директорий загружаются в алфавитном порядке.
|
||
* Увеличена производительность функции `arrayElement` в случае константного многомерного массива с пустым массивом в качестве одного из элементов. Пример: `[[1], []][x]`.
|
||
* Увеличена скорость запуска сервера при использовании конфигурационных файлов с очень большими подстановками (например, очень большими списками IP-сетей).
|
||
* При выполнении запроса, табличные функции выполняются один раз. Ранее табличные функции `remote`, `mysql` дважды делали одинаковый запрос на получение структуры таблицы с удалённого сервера.
|
||
* Используется генератор документации `MkDocs`.
|
||
* При попытке удалить столбец таблицы, от которого зависят `DEFAULT`/`MATERIALIZED` выражения других столбцов, кидается исключение (zhang2014).
|
||
* Добавлена возможность парсинга пустой строки в текстовых форматах как числа 0 для `Float` типов данных. Эта возможность присутствовала раньше, но была потеряна в релизе 1.1.54342.
|
||
* Значения типа `Enum` можно использовать в функциях `min`, `max`, `sum` и некоторых других - в этих случаях используются соответствующие числовые значения. Эта возможность присутствовала ранее, но была потеряна в релизе 1.1.54337.
|
||
* Добавлено ограничение `max_expanded_ast_elements` действующее на размер AST после рекурсивного раскрытия алиасов.
|
||
|
||
## Исправление ошибок:
|
||
|
||
* Исправлены случаи ошибочного удаления ненужных столбцов из подзапросов, а также отсутствие удаления ненужных столбцов из подзапросов, содержащих `UNION ALL`.
|
||
* Исправлена ошибка в слияниях для таблиц типа `ReplacingMergeTree`.
|
||
* Исправлена работа синхронного режима вставки в `Distributed` таблицы (`insert_distributed_sync = 1`).
|
||
* Исправлены segfault при некоторых случаях использования `FULL` и `RIGHT JOIN` с дублирующимися столбцами в подзапросах.
|
||
* Исправлены segfault, которые могут возникать при использовании функциональности `replace_running_query` и `KILL QUERY`.
|
||
* Исправлен порядок столбцов `source` и `last_exception` в таблице `system.dictionaries`.
|
||
* Исправлена ошибка - запрос `DROP DATABASE` не удалял файл с метаданными.
|
||
* Исправлен запрос `DROP DATABASE` для базы данных типа `Dictionary`.
|
||
* Исправлена неоправданно низкая точность работы функций `uniqHLL12` и `uniqCombined` для кардинальностей больше 100 млн. элементов (Alex Bocharov).
|
||
* Исправлено вычисление неявных значений по-умолчанию при необходимости одновременного вычисления явных выражений по-умолчанию в запросах `INSERT` (zhang2014).
|
||
* Исправлен редкий случай, в котором запрос к таблице типа `MergeTree` мог не завершаться (chenxing-xc).
|
||
* Исправлено падение при выполнении запроса `CHECK` для `Distributed` таблиц, если все шарды локальные (chenxing.xc).
|
||
* Исправлена незначительная регрессия производительности при работе функций, использующих регулярные выражения.
|
||
* Исправлена регрессия производительности при создании многомерных массивов от сложных выражений.
|
||
* Исправлена ошибка, из-за которой в `.sql` файл с метаданными может записываться лишняя секция `FORMAT`.
|
||
* Исправлена ошибка, приводящая к тому, что ограничение `max_table_size_to_drop` действует при попытке удаления `MATERIALIZED VIEW`, смотрящего на явно указанную таблицу.
|
||
* Исправлена несовместимость со старыми клиентами (на старые клиенты могли отправляться данные с типом `DateTime('timezone')`, который они не понимают).
|
||
* Исправлена ошибка при чтении столбцов-элементов `Nested` структур, которые были добавлены с помощью `ALTER`, но являются пустыми для старых партиций, когда условия на такие столбцы переносятся в `PREWHERE`.
|
||
* Исправлена ошибка при фильтрации таблиц по условию на виртуальных столбец `_table` в запросах к таблицам типа `Merge`.
|
||
* Исправлена ошибка при использовании `ALIAS` столбцов в `Distributed` таблицах.
|
||
* Исправлена ошибка, приводящая к невозможности динамической компиляции запросов с агрегатными функциями из семейства `quantile`.
|
||
* Исправлен race condition в конвейере выполнения запроса, который мог проявляться в очень редких случаях при использовании `Merge` таблиц над большим количеством таблиц, а также при использовании `GLOBAL` подзапросов.
|
||
* Исправлено падение при передаче массивов разных размеров в функцию `arrayReduce` при использовании агрегатных функций от нескольких аргументов.
|
||
* Запрещено использование запросов с `UNION ALL` в `MATERIALIZED VIEW`.
|
||
* Исправлена ошибка, которая может возникать при инициализации системной таблицы `part_log` при старте сервера (по-умолчанию `part_log` выключен).
|
||
|
||
## Обратно несовместимые изменения:
|
||
|
||
* Удалена настройка `distributed_ddl_allow_replicated_alter`. Соответствующее поведение включено по-умолчанию.
|
||
* Удалена настройка `strict_insert_defaults`. Если вы использовали эту функциональность, напишите на `clickhouse-feedback@yandex-team.com`.
|
||
* Удалён движок таблиц `UnsortedMergeTree`.
|
||
|
||
# Релиз ClickHouse 1.1.54343, 2018-02-05
|
||
|
||
* Добавлена возможность использовать макросы при задании имени кластера в распределенных DLL запросах и создании Distributed-таблиц: `CREATE TABLE distr ON CLUSTER '{cluster}' (...) ENGINE = Distributed('{cluster}', 'db', 'table')`.
|
||
* Теперь при вычислении запросов вида `SELECT ... FROM table WHERE expr IN (subquery)` используется индекс таблицы `table`.
|
||
* Улучшена обработка дубликатов при вставке в Replicated-таблицы, теперь они не приводят к излишнему замедлению выполнения очереди репликации.
|
||
|
||
# Релиз ClickHouse 1.1.54342, 2018-01-22
|
||
|
||
Релиз содержит исправление к предыдущему релизу 1.1.54337:
|
||
* Исправлена регрессия в версии 1.1.54337: если пользователь по-умолчанию имеет readonly доступ, то сервер отказывался стартовать с сообщением `Cannot create database in readonly mode`.
|
||
* Исправлена регрессия в версии 1.1.54337: на системах под управлением systemd, логи по ошибке всегда записываются в syslog; watchdog скрипт по ошибке использует init.d.
|
||
* Исправлена регрессия в версии 1.1.54337: неправильная конфигурация по-умоланию в Docker образе.
|
||
* Исправлена недетерминированная работа GraphiteMergeTree (в логах видно по сообщениям `Data after merge is not byte-identical to data on another replicas`).
|
||
* Исправлена ошибка, в связи с которой запрос OPTIMIZE к Replicated таблицам мог приводить к неконсистентным мержам (в логах видно по сообщениям `Part ... intersects previous part`).
|
||
* Таблицы типа Buffer теперь работают при наличии MATERIALIZED столбцов в таблице назначения (by zhang2014).
|
||
* Исправлена одна из ошибок в реализации NULL.
|
||
|
||
# Релиз ClickHouse 1.1.54337, 2018-01-18
|
||
|
||
## Новые возможности:
|
||
|
||
* Добавлена поддержка хранения многомерных массивов и кортежей (тип данных `Tuple`) в таблицах.
|
||
* Поддержка табличных функций для запросов `DESCRIBE` и `INSERT`. Поддержка подзапроса в запросе `DESCRIBE`. Примеры: `DESC TABLE remote('host', default.hits)`; `DESC TABLE (SELECT 1)`; `INSERT INTO TABLE FUNCTION remote('host', default.hits)`. Возможность писать `INSERT INTO TABLE` вместо `INSERT INTO`.
|
||
* Улучшена поддержка часовых поясов. В типе `DateTime` может быть указана таймзона, которая используется для парсинга и отображения данных в текстовом виде. Пример: `DateTime('Europe/Moscow')`. При указании таймзоны в функциях работы с `DateTime`, тип возвращаемого значения будет запоминать таймзону, для того, чтобы значение отображалось ожидаемым образом.
|
||
* Добавлены функции `toTimeZone`, `timeDiff`, `toQuarter`, `toRelativeQuarterNum`. В функцию `toRelativeHour`/`Minute`/`Second` можно передать аргумент типа `Date`. Имя функции `now` воспринимается без учёта регистра.
|
||
* Добавлена функция `toStartOfFifteenMinutes` (Kirill Shvakov).
|
||
* Добавлена программа `clickhouse format` для переформатирования запросов.
|
||
* Добавлен конфигурационный параметр `format_schema_path` (Marek Vavruša). Он используется для задания схемы для формата `Cap'n'Proto`. Файлы со схемой могут использоваться только из указанной директории.
|
||
* Добавлена поддержка `incl` и `conf.d` подстановок для конфигурации словарей и моделей (Pavel Yakunin).
|
||
* В таблице `system.settings` появилось описание большинства настроек (Kirill Shvakov).
|
||
* Добавлена таблица `system.parts_columns`, содержащая информацию о размерах столбцов в каждом куске данных `MergeTree` таблиц.
|
||
* Добавлена таблица `system.models`, содержащая информацию о загруженных моделях `CatBoost`.
|
||
* Добавлены табличные функции `mysql` и `odbc` и соответствующие движки таблиц `MySQL`, `ODBC` для обращения к удалённым базам данных. Функциональность в состоянии "бета".
|
||
* Для функции `groupArray` разрешено использование аргументов типа `AggregateFunction` (можно создать массив из состояний агрегатных функций).
|
||
* Удалены ограничения на использование разных комбинаций комбинаторов агрегатных функций. Для примера, вы можете использовать как функцию `avgForEachIf`, так и `avgIfForEach`, которые имеют разный смысл.
|
||
* Комбинатор агрегатных функций `-ForEach` расширен для случая агрегатных функций с более чем одним аргументом.
|
||
* Добавлена поддержка агрегатных функций от `Nullable` аргументов, для случаев, когда функция всегда возвращает не `Nullable` результат (реализовано с участием Silviu Caragea). Пример: `groupArray`, `groupUniqArray`, `topK`.
|
||
* Добавлен параметр командной строки `max_client_network_bandwidth` для `clickhouse-client` (Kirill Shvakov).
|
||
* Пользователям с доступом `readonly = 2` разрешено работать с временными таблицами (CREATE, DROP, INSERT...) (Kirill Shvakov).
|
||
* Добавлена возможность указания количества consumers для `Kafka`. Расширена возможность конфигурации движка `Kafka` (Marek Vavruša).
|
||
* Добавлены функции `intExp2`, `intExp10`.
|
||
* Добавлена агрегатная функция `sumKahan`.
|
||
* Добавлены функции to*Number*OrNull, где *Number* - числовой тип.
|
||
* Добавлена поддержка секции `WITH` для запроса `INSERT SELECT` (автор: zhang2014).
|
||
* Добавлены настройки `http_connection_timeout`, `http_send_timeout`, `http_receive_timeout`. Настройки используются, в том числе, при скачивании кусков для репликации. Изменение этих настроек позволяет сделать более быстрый failover в случае перегруженной сети.
|
||
* Добавлена поддержка `ALTER` для таблиц типа `Null` (Anastasiya Tsarkova).
|
||
* Функция `reinterpretAsString` расширена на все типы данных, значения которых хранятся в памяти непрерывно.
|
||
* Для программы `clickhouse-local` добавлена опция `--silent` для подавления вывода информации о выполнении запроса в stderr.
|
||
* Добавлена поддержка чтения `Date` в текстовом виде в формате, где месяц и день месяца могут быть указаны одной цифрой вместо двух (Amos Bird).
|
||
|
||
## Увеличение производительности:
|
||
|
||
* Увеличена производительность агрегатных функций `min`, `max`, `any`, `anyLast`, `anyHeavy`, `argMin`, `argMax` от строковых аргументов.
|
||
* Увеличена производительность функций `isInfinite`, `isFinite`, `isNaN`, `roundToExp2`.
|
||
* Увеличена производительность форматирования в текстовом виде и парсинга из текста значений типа `Date` и `DateTime`.
|
||
* Увеличена производительность и точность парсинга чисел с плавающей запятой.
|
||
* Уменьшено потребление памяти при `JOIN`, если левая и правая часть содержали столбцы с одинаковым именем, не входящие в `USING`.
|
||
* Увеличена производительность агрегатных функций `varSamp`, `varPop`, `stddevSamp`, `stddevPop`, `covarSamp`, `covarPop`, `corr` за счёт уменьшения стойкости к вычислительной погрешности. Старые версии функций добавлены под именами `varSampStable`, `varPopStable`, `stddevSampStable`, `stddevPopStable`, `covarSampStable`, `covarPopStable`, `corrStable`.
|
||
|
||
## Исправления ошибок:
|
||
|
||
* Исправлена работа дедупликации блоков после `DROP` или `DETATH PARTITION`. Раньше удаление партиции и вставка тех же самых данных заново не работала, так как вставленные заново блоки считались дубликатами.
|
||
* Исправлена ошибка, в связи с которой может неправильно обрабатываться `WHERE` для запросов на создание `MATERIALIZED VIEW` с указанием `POPULATE`.
|
||
* Исправлена ошибка в работе параметра `root_path` в конфигурации `zookeeper_servers`.
|
||
* Исправлен неожиданный результат при передаче аргумента типа `Date` в функцию `toStartOfDay`.
|
||
* Исправлена работа функции `addMonths`, `subtractMonths`, арифметика с `INTERVAL n MONTH`, если в результате получается предыдущий год.
|
||
* Добавлена недостающая поддержка типа данных `UUID` для `DISTINCT`, `JOIN`, в агрегатных функциях `uniq` и во внешних словарях (Иванов Евгений). Поддержка `UUID` всё ещё остаётся не полной.
|
||
* Исправлено поведение `SummingMergeTree` для строк, в которых все значения после суммирования равны нулю.
|
||
* Многочисленные доработки для движка таблиц `Kafka` (Marek Vavruša).
|
||
* Исправлена некорректная работа движка таблиц `Join` (Amos Bird).
|
||
* Исправлена работа аллокатора под FreeBSD и OS X.
|
||
* Функция `extractAll` теперь может доставать пустые вхождения.
|
||
* Исправлена ошибка, не позволяющая подключить при сборке `libressl` вместо `openssl`.
|
||
* Исправлена работа `CREATE TABLE AS SELECT` из временной таблицы.
|
||
* Исправлена неатомарность обновления очереди репликации. Эта проблема могла приводить к рассинхронизации реплик и чинилась при перезапуске.
|
||
* Исправлено переполнение в функциях `gcd`, `lcm`, `modulo` (оператор `%`) (Maks Skorokhod).
|
||
* Файлы `-preprocessed` теперь создаются после изменения `umask` (`umask` может быть задан в конфигурационном файле).
|
||
* Исправлена ошибка фоновой проверки кусков (`MergeTreePartChecker`) при использовании партиционирования по произвольному ключу.
|
||
* Исправлен парсинг кортежей (значений типа `Tuple`) в текстовых форматах.
|
||
* Исправлены сообщения о неподходящих типах аргументов для функций `multiIf`, `array` и некоторых других.
|
||
* Переработана поддержка `Nullable` типов. Исправлены ошибки, которые могут приводить к падению сервера. Исправлено подавляющее большинство других ошибок, связанных с поддержкой `NULL`: неправильное приведение типов при INSERT SELECT, недостаточная поддержка Nullable в HAVING и в PREWHERE, режим `join_use_nulls`, Nullable типы в операторе `OR` и т. п.
|
||
* Исправлена работа с внутренними свойствами типов данных, что позволило исправить проблемы следующего вида: ошибочное суммирование полей типа `Enum` в `SummingMergeTree`; значения типа `Enum` ошибочно выводятся с выравниванием по правому краю в таблицах в `Pretty` форматах, и т. п.
|
||
* Более строгие проверки для допустимых комбинаций составных столбцов - это позволило исправить ошибок, которые могли приводить к падениям.
|
||
* Исправлено переполнение при задании очень большого значения параметра для типа `FixedString`.
|
||
* Исправлена работа агрегатной функции `topK` для generic случая.
|
||
* Добавлена отсутствующая проверка на совпадение размеров массивов для n-арных вариантов агрегатных функций с комбинатором `-Array`.
|
||
* Исправлена работа `--pager` для `clickhouse-client` (автор: ks1322).
|
||
* Исправлена точность работы функции `exp10`.
|
||
* Исправлено поведение функции `visitParamExtract` согласно документации.
|
||
* Исправлено падение при объявлении некорректных типов данных.
|
||
* Исправлена работа `DISTINCT` при условии, что все столбцы константные.
|
||
* Исправлено форматирование запроса в случае наличия функции `tupleElement` со сложным константным выражением в качестве номера элемента.
|
||
* Исправлена работа `Dictionary` таблиц для словарей типа `range_hashed`.
|
||
* Исправлена ошибка, приводящая к появлению лишних строк при `FULL` и `RIGHT JOIN` (Amos Bird).
|
||
* Исправлено падение сервера в случае создания и удаления временных файлов в `config.d` директориях в момент перечитывания конфигурации.
|
||
* Исправлена работа запроса `SYSTEM DROP DNS CACHE`: ранее сброс DNS кэша не приводил к повторному резолвингу имён хостов кластера.
|
||
* Исправлено поведение `MATERIALIZED VIEW` после `DETACH TABLE` таблицы, на которую он смотрит (Marek Vavruša).
|
||
|
||
## Улучшения сборки:
|
||
|
||
* Для сборки используется `pbuilder`. Сборка максимально независима от окружения на сборочной машине.
|
||
* Для разных версий систем выкладывается один и тот же пакет, который совместим с широким диапазоном Linux систем.
|
||
* Добавлен пакет `clickhouse-test`, который может быть использован для запуска функциональных тестов.
|
||
* Добавлена выкладка в репозиторий архива с исходниками. Этот архив может быть использован для воспроизведения сборки без использования GitHub.
|
||
* Добавлена частичная интеграция с Travis CI. В связи с ограничениями на время сборки в Travis, запускается только ограниченный набор тестов на Debug сборке.
|
||
* Добавлена поддержка `Cap'n'Proto` в сборку по-умолчанию.
|
||
* Документация переведена с `Restructured Text` на `Markdown`.
|
||
* Добавлена поддержка `systemd` (Vladimir Smirnov). В связи с несовместимостью с некоторыми образами, она выключена по-умолчанию и может быть включена вручную.
|
||
* Для динамической компиляции запросов, `clang` и `lld` встроены внутрь `clickhouse`. Они также могут быть вызваны с помощью `clickhouse clang` и `clickhouse lld`.
|
||
* Удалено использование расширений GNU из кода и включена опция `-Wextra`. При сборке с помощью `clang` по-умолчанию используется `libc++` вместо `libstdc++`.
|
||
* Выделены библиотеки `clickhouse_parsers` и `clickhouse_common_io` для более быстрой сборки утилит.
|
||
|
||
## Обратно несовместимые изменения:
|
||
|
||
* Формат засечек (marks) для таблиц типа `Log`, содержащих `Nullable` столбцы, изменён обратно-несовместимым образом. В случае наличия таких таблиц, вы можете преобразовать их в `TinyLog` до запуска новой версии сервера. Для этого в соответствующем таблице файле `.sql` в директории `metadata`, замените `ENGINE = Log` на `ENGINE = TinyLog`. Если в таблице нет `Nullable` столбцов или тип таблицы не `Log`, то ничего делать не нужно.
|
||
* Удалена настройка `experimental_allow_extended_storage_definition_syntax`. Соответствующая функциональность включена по-умолчанию.
|
||
* Функция `runningIncome` переименована в `runningDifferenceStartingWithFirstValue` во избежание путаницы.
|
||
* Удалена возможность написания `FROM ARRAY JOIN arr` без указания таблицы после FROM (Amos Bird).
|
||
* Удалён формат `BlockTabSeparated`, использовавшийся лишь для демонстрационных целей.
|
||
* Изменён формат состояния агрегатных функций `varSamp`, `varPop`, `stddevSamp`, `stddevPop`, `covarSamp`, `covarPop`, `corr`. Если вы использовали эти состояния для хранения в таблицах (тип данных `AggregateFunction` от этих функций или материализованные представления, хранящие эти состояния), напишите на clickhouse-feedback@yandex-team.com.
|
||
* В предыдущих версиях существовала недокументированная возможность: в типе данных AggregateFunction можно было не указывать параметры для агрегатной функции, которая зависит от параметров. Пример: `AggregateFunction(quantiles, UInt64)` вместо `AggregateFunction(quantiles(0.5, 0.9), UInt64)`. Эта возможность потеряна. Не смотря на то, что возможность не документирована, мы собираемся вернуть её в ближайших релизах.
|
||
* Значения типа данных Enum не могут быть переданы в агрегатные функции min/max. Возможность будет возвращена обратно в следующем релизе.
|
||
|
||
## На что обратить внимание при обновлении:
|
||
* При обновлении кластера, на время, когда на одних репликах работает новая версия сервера, а на других - старая, репликация будет приостановлена и в логе появятся сообщения вида `unknown parameter 'shard'`. Репликация продолжится после обновления всех реплик кластера.
|
||
* Если на серверах кластера работают разные версии ClickHouse, то возможен неправильный результат распределённых запросов, использующих функции `varSamp`, `varPop`, `stddevSamp`, `stddevPop`, `covarSamp`, `covarPop`, `corr`. Необходимо обновить все серверы кластера.
|
||
|
||
# Релиз ClickHouse 1.1.54327, 2017-12-21
|
||
|
||
Релиз содержит исправление к предыдущему релизу 1.1.54318:
|
||
* Исправлена проблема с возможным race condition при репликации, которая может приводить к потере данных. Проблеме подвержены версии 1.1.54310 и 1.1.54318. Если вы их используете и у вас есть Replicated таблицы, то обновление обязательно. Понять, что эта проблема существует, можно по сообщениям в логе Warning вида `Part ... from own log doesn't exist.` Даже если таких сообщений нет, проблема всё-равно актуальна.
|
||
|
||
# Релиз ClickHouse 1.1.54318, 2017-11-30
|
||
|
||
Релиз содержит изменения к предыдущему релизу 1.1.54310 с исправлением следующих багов:
|
||
* Исправлено некорректное удаление строк при слияниях в движке SummingMergeTree
|
||
* Исправлена утечка памяти в нереплицированных MergeTree-движках
|
||
* Исправлена деградация производительности при частых вставках в MergeTree-движках
|
||
* Исправлена проблема, приводящая к остановке выполнения очереди репликации
|
||
* Исправлено ротирование и архивация логов сервера
|
||
|
||
# Релиз ClickHouse 1.1.54310, 2017-11-01
|
||
|
||
## Новые возможности:
|
||
* Произвольный ключ партиционирования для таблиц семейства MergeTree.
|
||
* Движок таблиц [Kafka](https://clickhouse.yandex/docs/en/single/index.html#document-table_engines/kafka).
|
||
* Возможность загружать модели [CatBoost](https://catboost.yandex/) и применять их к данным, хранящимся в 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.
|
||
|
||
# Релиз 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`
|
||
* Корректная обработка случаев, когда executable-словарь возвращает ненулевой код ответа
|
||
|
||
# Релиз 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` и нарушению консистентности реплик.
|
||
* Исправлена ошибка, приводящая к блокировке при завершении работы сервера, если в это время 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 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.
|
||
|
||
## Улучшения процесса разработки и сборки ClickHouse:
|
||
* Возможность сборки с помощью `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>` и перезапустить сервер.
|
||
|
||
# Релиз 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`
|
||
* Добавлена возможность синхронной вставки в 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 (можно поменять, через параметр <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 с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
|
||
|
||
## Улучшения процесса разработки и сборки ClickHouse:
|
||
* Добавлена возмозможность сборки в Arcadia
|
||
* Добавлена возможность сборки с помощью 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-таблицы для всех подключённых внешних словарей)
|
||
* Возможность проверки необходимости обновления словаря путём отправки запроса в источник
|
||
* 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 файл повреждается
|