Added changelog for 18.16 (complete, without authors and links) [#CLICKHOUSE-2]

This commit is contained in:
Alexey Milovidov 2018-12-18 04:27:52 +03:00
parent 6ba4459b1b
commit e1623b1139
2 changed files with 96 additions and 93 deletions

View File

@ -1,94 +1 @@
## ClickHouse release 18.16.0, 2018-12-14
### Новые возможности:
* Вычисление `DEFAULT` выражений для отсутствующих полей при загрузке данных в полуструктурированных форматах (`JSONEachRow`, `TSKV`).
* Для запроса `ALTER TABLE` добавлено действие `MODIFY ORDER BY` для изменения ключа сортировки при одновременном добавлении или удалении столбца таблицы. Это полезно для таблиц семейства `MergeTree`, выполняющих дополнительную работу при слияниях, согласно этому ключу сортировки, как например, `SummingMergeTree`, `AggregatingMergeTree` и т. п.
* Для таблиц семейства `MergeTree` появилась возможность указать различный ключ сортировки (`ORDER BY`) и индекс (`PRIMARY KEY`). Ключ сортировки может быть длиннее, чем индекс.
* Добавлена табличная функция `hdfs` и движок таблиц `HDFS` для импорта и экспорта данных в HDFS.
* Добавлены функции для работы с base64: `base64Encode`, `base64Decode`, `tryBase64Decode`.
* Для агрегатной функции `uniqCombined` появилась возможность настраивать точность работы с помощью параметра (выбирать количество ячеек HyperLogLog).
* Добавлена таблица `system.contributors`, содержащая имена всех, кто делал коммиты в ClickHouse.
* Добавлена возможность не указывать партицию для запроса `ALTER TABLE ... FREEZE` для бэкапа сразу всех партиций.
* Добавлены функции `dictGet`, `dictGetOrDefault` без указания типа возвращаемого значения. Тип определяется автоматически из описания словаря.
* Слияния, образующие крупные куски таблиц семейства MergeTree, будут производиться в режиме O_DIRECT, что исключает вымывание кэша. Добавлена настройка таблиц семейства `MergeTree` `min_merge_bytes_to_use_direct_io`, по-умолчанию - 10 GiB.
* Возможность указания комментария для столбца в описании таблицы и изменения его с помощью ALTER.
* Возможность чтения из таблицы типа `Join` в случае простых ключей.
* Возможность указания настроек `join_use_nulls`, `max_rows_in_join`, `max_bytes_in_join`, `join_overflow_mode` при создании таблицы типа `Join`.
* Добавлена функция `joinGet`, позволяющая использовать таблицы типа `Join` как словарь.
* Добавлены столбцы `partition_key`, `sorting_key`, `primary_key`, `sampling_key` в таблицу `system.tables`, позволяющие получить информацию о ключах таблицы.
* Добавлены столбцы `is_in_partition_key`, `is_in_sorting_key`, `is_in_primary_key`, `is_in_sampling_key` в таблицу `system.columns`.
* Добавлены столбцы `min_time`, `max_time` в таблицу `system.parts`. Эти столбцы заполняются, если ключ партиционирования является выражением от столбцов типа `DateTime`.
### Исправления ошибок:
* Исправления и улучшения производительности для типа данных `LowCardinality`. GROUP BY по LowCardinality(Nullable(...)). Получение extremes значений. Выполнение функций высшего порядка. LEFT ARRAY JOIN. Распределённый GROUP BY. Функции, возвращающие Array. Выполнение ORDER BY. Запись в Distributed таблицы (nicelulu). Обратная совместимость для запросов `INSERT` от старых клиентов, реализующих `Native` протокол. Поддержка `LowCardinality` для `JOIN`. Производительность при работе в один поток.
* Исправлено некорректное слияние многомерных массивов во вложенных структурах данных при вертикальном мерже.
* Исправлена работа настройки `select_sequential_consistency`. Ранее, при включенной настройке, после начала записи в новую партицию, мог возвращаться неполный результат.
* Корректное указание базы данных при выполнении DDL запросов `ON CLUSTER`, а также при выполнении `ALTER UPDATE/DELETE`.
* Корректное указание базы данных для подзапросов внутри VIEW.
* Исправление ошибки `Unknown compression method` при использовании настройки `min_bytes_to_use_direct_io`.
* Исправлено удаление лишних `ALIAS` столбцов при выполнении запроса с `PREWHERE`.
* Исправлена работа `PREWHERE` с `FINAL` для `VersionedCollapsingMergeTree`.
* Возможность с помощью запроса KILL QUERY отмены запросов, которые ещё не начали выполняться из-за ожидания блокировки таблицы.
* Исправлены расчёты с датой и временем в случае, если стрелки часов были переведены назад в полночь (это происходит в Иране, а также было Москве с 1981 по 1983 год). Ранее это приводило к тому, что стрелки часов переводились на сутки раньше, чем нужно, а также приводило к некорректному форматированию даты-с-временем в текстовом виде.
* Исправлена неправильная передача таймаутов для словарей ODBC, JDBC.
* Исправлена работа некоторых случаев VIEW и подзапросов без указания базы данных.
* Исправлен race condition при одновременном чтении из MATERIALIZED VIEW и удалением MATERIALIZED VIEW из-за отсутствия блокировки внутренней таблицы MATERIALIZED VIEW.
* Исправлена ошибка `Lock handler cannot be nullptr.`
* Исправления выполнения запросов при включенной настройке `compile_expressions` (выключена по-умолчанию) - убрана свёртка недетерминированных константных выражений, как например, функции `now`.
* Исправлено падение при указании неконстантного аргумента scale в функциях `toDecimal32/64/128`.
* Исправлена ошибка при попытке вставки в формате `Values` массива с `NULL` элементами в столбец типа `Array` без `Nullable` (в случае `input_format_values_interpret_expressions` = 1).
* Исправлено непрерывное логгирование ошибок в `DDLWorker`, если ZooKeeper недоступен.
* Исправлен тип возвращаемого значения для функций `quantile*` от аргументов типа `Date` и `DateTime`.
* Исправлена работа секции `WITH`, если она задаёт простой алиас.
* Исправлена обработка запросов с именованными подзапросами при включенной настройке `enable_optimize_predicate_expression`.
* Исправлена ошибка `Attempt to attach to nullptr thread group` при работе материализованных представлений.
* Исправлена ошибка при вставке данных в `Distributed` таблицу в случае несовпадающей структуры таблицы на удалённом сервере.
* Исправлено падение при передаче некоторых некорректных аргументов в функцию `arrayReverse`.
* Исправлен buffer overflow в функции `extractURLParameter`. Увеличена производительность. Добавлена корректная обработка строк, содержащих нулевые байты.
* Исправлен buffer overflow в функциях `lowerUTF8`, `upperUTF8`. Удалена возможность выполнения этих функций над аргументами типа FixedString.
* Исправлен редкий race condition при удалении таблиц типа MergeTree.
* Исправлен race condition при чтении из таблиц типа `Buffer` и одновременном `ALTER` либо `DROP` таблиц назначения.
* Исправлен segfault в случае превышения ограничения `max_temporary_non_const_columns`.
### Улучшения:
* Обработанные конфигурационные файлы записываются сервером не в `/etc/clickhouse-server/` директорию, а в директорию `preprocessed_configs` внутри `path`. Это позволяет оставить директорию `/etc/clickhouse-server/` недоступной для записи пользователем `clickhouse`, что повышает безопасность.
* Ускорен запуск сервера в случае наличия очень большого количества таблиц.
* Добавлен HTTP Keep-Alive для соединения между репликами.
* В случае ошибки синтаксиса запроса, в `HTTP` интерфейсе возвращается код `400 Bad Request` (ранее возвращался код 500).
* Для настройки `join_default_strictness` выбрано значение по-умолчанию `ALL` для совместимости.
* Убрано логгирование в `stderr` из библиотеки `re2` в случае некорректных или сложных регулярных выражений.
* Для движка таблиц Kafka TODO
* Функции `cityHash64`, `farmHash64`, `metroHash64`, `sipHash64`, `halfMD5`, `murmurHash2_32`, `murmurHash2_64`, `murmurHash3_32`, `murmurHash3_64` теперь работают для произвольного количества аргументов, а также для аргументов-кортежей.
* Функция `arrayReverse` теперь работает с любыми типами массивов.
* Добавлен опциональный параметр - размер слота для функции `timeSlots`.
* Для `FULL` и `RIGHT JOIN` учитывается настройка `max_block_size` для потока неприсоединённых данных из правой таблицы.
* В `clickhouse-benchmark` и `clickhouse-performance-test` добавлен параметр командной строки `--secure` для включения TLS.
* Преобразование типов в случае, если структура таблицы типа `Buffer` не соответствует структуре таблицы назначения.
* Добавлена настройка tcp_keep_alive_timeout для включения keep-alive пакетов после неактивности в течение указанного интервала времени.
* Убрано излишнее квотирование ключа партиции в таблице `system.parts`, если он состоит из одного столбца.
* Функция деления с остатком работает для типов данных `Date` и `DateTime`.
* Добавлены синонимы функций `POWER`, `LN`, `LCASE`, `UCASE`, `REPLACE`, `LOCATE`, `SUBSTR`, `MID`. Некоторые имена функций сделаны регистронезависимыми для совместимости со стандартом SQL. Добавлен синтаксический сахар `SUBSTRING(expr FROM start FOR length)` для совместимости с SQL.
* Добавлена возможность включения `mlock` страниц памяти, соответствующих исполняемому коду `clickhouse-server` для предотвращения вытеснения их из памяти. Возможность выключена по-умолчанию.
* Увеличена производительность чтения с O_DIRECT (с включенной опцией min_bytes_to_use_direct_io).
* Улучшена производительность работы функции `dictGet...OrDefault` в случае константного аргумента-ключа и неконстантного аргумента-default.
* В функции `firstSignificantSubdomain` добавлена обработка доменов `gov`, `mil`, `edu`. Увеличена производительность работы.
* Возможность указания произвольных переменных окружения для запуска clickhouse-server с помощью указания `CLICKHOUSE_PROGRAM_ENV` в `/etc/default/clickhouse`.
* Правильный код возврата init-скрипта clickhouse-server.
* В таблицу `system.metrics` добавлена метрика `VersionInteger`, а в `system.build_options` добавлена строчка `VERSION_INTEGER`, содержащая версию ClickHouse в числовом представлении, вида `18016000`.
* Удалена возможность сравнения типа `Date` с числом, чтобы избежать потенциальных ошибок вида `date = 2018-12-17`, где ошибочно не указаны кавычки вокруг даты.
* Исправлено поведение функций с состоянием типа `rowNumberInAllBlocks` - раньше они выдавали число на единицу больше вследствие их запуска во время анализа запроса.
* При невозможности удалить файл `force_restore_data`, выводится сообщение об ошибке.
### Улучшение сборки:
* Обновлена библиотека `jemalloc`, что исправляет потенциальную утечку памяти.
* Для debug сборок включено по-умолчанию профилирование `jemalloc`.
* Добавлена возможность запуска интеграционных тестов, при наличии установленным в системе лишь `Docker`.
* Добавлен fuzz тест выражений в SELECT запросах.
* Добавлен покоммитный stress тест, выполняющий функциональные тесты параллельно и в произвольном порядке, без разбора результатов, позволяющий обнаружить больше race conditions.
* Улучшение способа запуска clickhouse-server в Docker образе.
* Для Docker образа добавлена поддержка инициализации базы данных с помощью файлов в директории `/docker-entrypoint-initdb.d`.
* Исправления для сборки под ARM.

View File

@ -1,3 +1,99 @@
## ClickHouse release 18.16.0, 2018-12-14
### Новые возможности:
* Вычисление `DEFAULT` выражений для отсутствующих полей при загрузке данных в полуструктурированных форматах (`JSONEachRow`, `TSKV`).
* Для запроса `ALTER TABLE` добавлено действие `MODIFY ORDER BY` для изменения ключа сортировки при одновременном добавлении или удалении столбца таблицы. Это полезно для таблиц семейства `MergeTree`, выполняющих дополнительную работу при слияниях, согласно этому ключу сортировки, как например, `SummingMergeTree`, `AggregatingMergeTree` и т. п.
* Для таблиц семейства `MergeTree` появилась возможность указать различный ключ сортировки (`ORDER BY`) и индекс (`PRIMARY KEY`). Ключ сортировки может быть длиннее, чем индекс.
* Добавлена табличная функция `hdfs` и движок таблиц `HDFS` для импорта и экспорта данных в HDFS.
* Добавлены функции для работы с base64: `base64Encode`, `base64Decode`, `tryBase64Decode`.
* Для агрегатной функции `uniqCombined` появилась возможность настраивать точность работы с помощью параметра (выбирать количество ячеек HyperLogLog).
* Добавлена таблица `system.contributors`, содержащая имена всех, кто делал коммиты в ClickHouse.
* Добавлена возможность не указывать партицию для запроса `ALTER TABLE ... FREEZE` для бэкапа сразу всех партиций.
* Добавлены функции `dictGet`, `dictGetOrDefault` без указания типа возвращаемого значения. Тип определяется автоматически из описания словаря.
* Слияния, образующие крупные куски таблиц семейства MergeTree, будут производиться в режиме O_DIRECT, что исключает вымывание кэша. Добавлена настройка таблиц семейства `MergeTree` `min_merge_bytes_to_use_direct_io`, по-умолчанию - 10 GiB.
* Возможность указания комментария для столбца в описании таблицы и изменения его с помощью ALTER.
* Возможность чтения из таблицы типа `Join` в случае простых ключей.
* Возможность указания настроек `join_use_nulls`, `max_rows_in_join`, `max_bytes_in_join`, `join_overflow_mode` при создании таблицы типа `Join`.
* Добавлена функция `joinGet`, позволяющая использовать таблицы типа `Join` как словарь.
* Добавлены столбцы `partition_key`, `sorting_key`, `primary_key`, `sampling_key` в таблицу `system.tables`, позволяющие получить информацию о ключах таблицы.
* Добавлены столбцы `is_in_partition_key`, `is_in_sorting_key`, `is_in_primary_key`, `is_in_sampling_key` в таблицу `system.columns`.
* Добавлены столбцы `min_time`, `max_time` в таблицу `system.parts`. Эти столбцы заполняются, если ключ партиционирования является выражением от столбцов типа `DateTime`.
### Исправления ошибок:
* Исправления и улучшения производительности для типа данных `LowCardinality`. GROUP BY по LowCardinality(Nullable(...)). Получение extremes значений. Выполнение функций высшего порядка. LEFT ARRAY JOIN. Распределённый GROUP BY. Функции, возвращающие Array. Выполнение ORDER BY. Запись в Distributed таблицы (nicelulu). Обратная совместимость для запросов `INSERT` от старых клиентов, реализующих `Native` протокол. Поддержка `LowCardinality` для `JOIN`. Производительность при работе в один поток.
* Исправлено некорректное слияние многомерных массивов во вложенных структурах данных при вертикальном мерже.
* Исправлена работа настройки `select_sequential_consistency`. Ранее, при включенной настройке, после начала записи в новую партицию, мог возвращаться неполный результат.
* Корректное указание базы данных при выполнении DDL запросов `ON CLUSTER`, а также при выполнении `ALTER UPDATE/DELETE`.
* Корректное указание базы данных для подзапросов внутри VIEW.
* Исправление ошибки `Unknown compression method` при использовании настройки `min_bytes_to_use_direct_io`.
* Исправлено удаление лишних `ALIAS` столбцов при выполнении запроса с `PREWHERE`.
* Исправлена работа `PREWHERE` с `FINAL` для `VersionedCollapsingMergeTree`.
* Возможность с помощью запроса KILL QUERY отмены запросов, которые ещё не начали выполняться из-за ожидания блокировки таблицы.
* Исправлены расчёты с датой и временем в случае, если стрелки часов были переведены назад в полночь (это происходит в Иране, а также было Москве с 1981 по 1983 год). Ранее это приводило к тому, что стрелки часов переводились на сутки раньше, чем нужно, а также приводило к некорректному форматированию даты-с-временем в текстовом виде.
* Исправлена неправильная передача таймаутов для словарей ODBC, JDBC.
* Исправлена работа некоторых случаев VIEW и подзапросов без указания базы данных.
* Исправлен race condition при одновременном чтении из MATERIALIZED VIEW и удалением MATERIALIZED VIEW из-за отсутствия блокировки внутренней таблицы MATERIALIZED VIEW.
* Исправлена ошибка `Lock handler cannot be nullptr.`
* Исправления выполнения запросов при включенной настройке `compile_expressions` (выключена по-умолчанию) - убрана свёртка недетерминированных константных выражений, как например, функции `now`.
* Исправлено падение при указании неконстантного аргумента scale в функциях `toDecimal32/64/128`.
* Исправлена ошибка при попытке вставки в формате `Values` массива с `NULL` элементами в столбец типа `Array` без `Nullable` (в случае `input_format_values_interpret_expressions` = 1).
* Исправлено непрерывное логгирование ошибок в `DDLWorker`, если ZooKeeper недоступен.
* Исправлен тип возвращаемого значения для функций `quantile*` от аргументов типа `Date` и `DateTime`.
* Исправлена работа секции `WITH`, если она задаёт простой алиас.
* Исправлена обработка запросов с именованными подзапросами при включенной настройке `enable_optimize_predicate_expression`.
* Исправлена ошибка `Attempt to attach to nullptr thread group` при работе материализованных представлений.
* Исправлена ошибка при вставке данных в `Distributed` таблицу в случае несовпадающей структуры таблицы на удалённом сервере.
* Исправлено падение при передаче некоторых некорректных аргументов в функцию `arrayReverse`.
* Исправлен buffer overflow в функции `extractURLParameter`. Увеличена производительность. Добавлена корректная обработка строк, содержащих нулевые байты.
* Исправлен buffer overflow в функциях `lowerUTF8`, `upperUTF8`. Удалена возможность выполнения этих функций над аргументами типа FixedString.
* Исправлен редкий race condition при удалении таблиц типа MergeTree.
* Исправлен race condition при чтении из таблиц типа `Buffer` и одновременном `ALTER` либо `DROP` таблиц назначения.
* Исправлен segfault в случае превышения ограничения `max_temporary_non_const_columns`.
### Улучшения:
* Обработанные конфигурационные файлы записываются сервером не в `/etc/clickhouse-server/` директорию, а в директорию `preprocessed_configs` внутри `path`. Это позволяет оставить директорию `/etc/clickhouse-server/` недоступной для записи пользователем `clickhouse`, что повышает безопасность.
* Ускорен запуск сервера в случае наличия очень большого количества таблиц.
* Добавлен HTTP Keep-Alive для соединения между репликами.
* В случае ошибки синтаксиса запроса, в `HTTP` интерфейсе возвращается код `400 Bad Request` (ранее возвращался код 500).
* Для настройки `join_default_strictness` выбрано значение по-умолчанию `ALL` для совместимости.
* Убрано логгирование в `stderr` из библиотеки `re2` в случае некорректных или сложных регулярных выражений.
* Для движка таблиц Kafka TODO
* Функции `cityHash64`, `farmHash64`, `metroHash64`, `sipHash64`, `halfMD5`, `murmurHash2_32`, `murmurHash2_64`, `murmurHash3_32`, `murmurHash3_64` теперь работают для произвольного количества аргументов, а также для аргументов-кортежей.
* Функция `arrayReverse` теперь работает с любыми типами массивов.
* Добавлен опциональный параметр - размер слота для функции `timeSlots`.
* Для `FULL` и `RIGHT JOIN` учитывается настройка `max_block_size` для потока неприсоединённых данных из правой таблицы.
* В `clickhouse-benchmark` и `clickhouse-performance-test` добавлен параметр командной строки `--secure` для включения TLS.
* Преобразование типов в случае, если структура таблицы типа `Buffer` не соответствует структуре таблицы назначения.
* Добавлена настройка tcp_keep_alive_timeout для включения keep-alive пакетов после неактивности в течение указанного интервала времени.
* Убрано излишнее квотирование ключа партиции в таблице `system.parts`, если он состоит из одного столбца.
* Функция деления с остатком работает для типов данных `Date` и `DateTime`.
* Добавлены синонимы функций `POWER`, `LN`, `LCASE`, `UCASE`, `REPLACE`, `LOCATE`, `SUBSTR`, `MID`. Некоторые имена функций сделаны регистронезависимыми для совместимости со стандартом SQL. Добавлен синтаксический сахар `SUBSTRING(expr FROM start FOR length)` для совместимости с SQL.
* Добавлена возможность включения `mlock` страниц памяти, соответствующих исполняемому коду `clickhouse-server` для предотвращения вытеснения их из памяти. Возможность выключена по-умолчанию.
* Увеличена производительность чтения с O_DIRECT (с включенной опцией min_bytes_to_use_direct_io).
* Улучшена производительность работы функции `dictGet...OrDefault` в случае константного аргумента-ключа и неконстантного аргумента-default.
* В функции `firstSignificantSubdomain` добавлена обработка доменов `gov`, `mil`, `edu`. Увеличена производительность работы.
* Возможность указания произвольных переменных окружения для запуска clickhouse-server с помощью указания `CLICKHOUSE_PROGRAM_ENV` в `/etc/default/clickhouse`.
* Правильный код возврата init-скрипта clickhouse-server.
* В таблицу `system.metrics` добавлена метрика `VersionInteger`, а в `system.build_options` добавлена строчка `VERSION_INTEGER`, содержащая версию ClickHouse в числовом представлении, вида `18016000`.
* Удалена возможность сравнения типа `Date` с числом, чтобы избежать потенциальных ошибок вида `date = 2018-12-17`, где ошибочно не указаны кавычки вокруг даты.
* Исправлено поведение функций с состоянием типа `rowNumberInAllBlocks` - раньше они выдавали число на единицу больше вследствие их запуска во время анализа запроса.
* При невозможности удалить файл `force_restore_data`, выводится сообщение об ошибке.
### Улучшение сборки:
* Обновлена библиотека `jemalloc`, что исправляет потенциальную утечку памяти.
* Для debug сборок включено по-умолчанию профилирование `jemalloc`.
* Добавлена возможность запуска интеграционных тестов, при наличии установленным в системе лишь `Docker`.
* Добавлен fuzz тест выражений в SELECT запросах.
* Добавлен покоммитный stress тест, выполняющий функциональные тесты параллельно и в произвольном порядке, без разбора результатов, позволяющий обнаружить больше race conditions.
* Улучшение способа запуска clickhouse-server в Docker образе.
* Для Docker образа добавлена поддержка инициализации базы данных с помощью файлов в директории `/docker-entrypoint-initdb.d`.
* Исправления для сборки под ARM.
## ClickHouse release 18.14.18, 2018-12-04
### Исправления ошибок: