Changelog for 18.16: in progress (a half) [#CLICKHOUSE-2]

This commit is contained in:
Alexey Milovidov 2018-12-17 23:35:55 +03:00
parent 14df9c76aa
commit b978c892f6

View File

@ -1,4 +1,78 @@
* Настройка `enable_optimize_predicate_expression` выключена по-умолчанию.
## ClickHouse release 18.16.0, 2018-12-14
### Новые возможности:
* Вычисление `DEFAULT` выражений для отсутствующих полей при загрузке данных в полуструктурированных форматах (`JSONEachRow`, `TSKV`).
* Для запроса `ALTER TABLE` добавлено действие `MODIFY ORDER BY` для изменения ключа сортировки при одновременном добавлении или удалении столбца таблицы. Это полезно для таблиц семейства `MergeTree`, выполняющих дополнительную работу при слияниях, согласно этому ключу сортировки, как например, `SummingMergeTree`, `AggregatingMergeTree` и т. п.
* Добавлена табличная функция `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.
* Добавлены столбцы `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`.
### Исправления ошибок:
* Исправлено некорректное слияние многомерных массивов во вложенных структурах данных при вертикальном мерже.
* Исправлена работа настройки `select_sequential_consistency`. Ранее, при включенной настройке, после начала записи в новую партицию, мог возвращаться неполный результат.
* Корректное указание базы данных при выполнении DDL запросов `ON CLUSTER`.
* Корректное указание базы данных для подзапросов внутри VIEW.
* Исправление ошибки `Unknown compression method` при использовании настройки `min_bytes_to_use_direct_io`.
* Исправлено удаление лишних `ALIAS` столбцов при выполнении запроса с `PREWHERE`.
* Исправлена работа `PREWHERE` с `FINAL` для `VersionedCollapsingMergeTree`.
* Возможность с помощью запроса KILL QUERY отмены запросов, которые ещё не начали выполняться из-за ожидания блокировки таблицы.
* Исправлена неправильная передача таймаутов для словарей 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).
* Исправления и улучшения производительности для типа данных `LowCardinality`. GROUP BY по LowCardinality(Nullable(...)). Получение extremes значений. Выполнение функций высшего порядка. LEFT ARRAY JOIN. Распределённый GROUP BY. Функции, возвращающие Array. Выполнение ORDER BY. Запись в Distributed таблицы (nicelulu)
* Исправлено непрерывное логгирование ошибок в `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.
### Улучшения:
* Файлы *-preprocessed.xml записываются в директорию с данными (/var/lib/clickhouse/preprocessed_configs). Для /etc/clickhouse-server больше не нужен +w для пользователя clickhouse. Для удобства создан симлинк /var/lib/clickhouse/preprocessed_configs -> /etc/clickhouse-server/preprocessed
* Обработанные конфигурационные файлы записываются сервером не в `/etc/clickhouse-server/` директорию, а в директорию `preprocessed_configs` внутри `path`. Это позволяет оставить директорию `/etc/clickhouse-server/` недоступной для записи пользователем `clickhouse`, что повышает безопасность.
* Ускорен запуск сервера в случае наличия очень большого количества таблиц.
* Добавлен HTTP Keep-Alive для соединения между репликами.
* В случае ошибки синтаксиса запроса, в `HTTP` интерфейсе возвращается код `400 Bad Request` (ранее возвращался код 500).
* Для настройки `join_default_strictness` выбрано значение по-умолчанию `ALL` для совместимости.
* Для движка таблиц Kafka TODO
* Функции `cityHash64`, `farmHash64`, `metroHash64`, `sipHash64`, `halfMD5`, `murmurHash2_32`, `murmurHash2_64`, `murmurHash3_32`, `murmurHash3_64` теперь работают для произвольного количества аргументов, а также для аргументов-кортежей.
* Функция `arrayReverse` теперь работает с любыми типами массивов.
* В `clickhouse-benchmark` и `clickhouse-performance-test` добавлен параметр командной строки `--secure` для включения TLS.
* Преобразование типов в случае, если структура таблицы типа `Buffer` не соответствует структуре таблицы назначения.
* Добавлена настройка tcp_keep_alive_timeout для включения keep-alive пакетов после неактивности в течение указанного интервала времени.
* Убрано излишнее квотирование ключа партиции в таблице `system.parts`, если он состоит из одного столбца.
* Функция деления с остатком работает для типов данных `Date` и `DateTime`.
* Добавлены синонимы функций POWER, LN. Некоторые имена функций сделаны регистронезависимыми для совместимости со стандартом 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`, где ошибочно не указаны кавычки вокруг даты.
### Улучшение сборки:
* Обновлена библиотека `jemalloc`, что исправляет потенциальную утечку памяти.
* Добавлена возможность запуска интеграционных тестов, при наличии установленным в системе лишь `Docker`.
* Добавлен fuzz тест выражений в SELECT запросах.
* Добавлен покоммитный stress тест, выполняющий функциональные тесты параллельно и в произвольном порядке, без разбора результатов, позволяющий обнаружить больше race conditions.
* Исправление запуска clickhouse-server в Docker образе.