- Возможность изменения уровня логгирования без перезагрузки сервера.
- Добавлен запрос
SHOW CREATE DATABASE
. - Возможность передать
query_id
вclickhouse-client
(elBroom). - Добавлена настройка
max_network_bandwidth_for_all_users
. - Добавлена поддержка
ALTER TABLE ... PARTITION ...
дляMATERIALIZED VIEW
. - Добавлена информация о размере кусков данных в несжатом виде в системные таблицы.
- Поддержка межсерверного шифрования для distributed таблиц (
<secure>1</secure>
в конфигурации реплики в<remote_servers>
). - Добавлена настройка уровня таблицы семейства
ReplicatedMergeTree
для уменьшения объема данных, хранимых в zookeeper:use_minimalistic_checksums_in_zookeeper = 1
- Возможность настройки приглашения
clickhouse-client
. По-умолчанию добавлен вывод имени сервера в приглашение. Возможность изменить отображаемое имя сервера. Отправка его в HTTP заголовкеX-ClickHouse-Display-Name
(Kirill Shvakov). - Возможность указания нескольких
topics
через запятую для движкаKafka
(Tobias Adamson) - При остановке запроса по причине
KILL QUERY
илиreplace_running_query
, клиент получает исключениеQuery was cancelled
вместо неполного результата.
- Запросы вида
ALTER TABLE ... DROP/DETACH PARTITION
выполняются впереди очереди репликации. - Возможность использовать
SELECT ... FINAL
иOPTIMIZE ... FINAL
даже в случае, если данные в таблице представлены одним куском. - Пересоздание таблицы
query_log
налету в случае если было произведено её удаление вручную (Kirill Shvakov). - Ускорение функции
lengthUTF8
(zhang2014). - Улучшена производительность синхронной вставки в
Distributed
таблицы (insert_distributed_sync = 1
) в случае очень большого количества шардов. - Сервер принимает настройки
send_timeout
иreceive_timeout
от клиента и применяет их на своей стороне для соединения с клиентом (в переставленном порядке:send_timeout
у сокета на стороне сервера выставляется в значениеreceive_timeout
принятое от клиента, и наоборот). - Более надёжное восстановление после сбоев при асинхронной вставке в
Distributed
таблицы. - Возвращаемый тип функции
countEqual
изменён сUInt32
наUInt64
(谢磊)
- Исправлена ошибка c
IN
где левая часть выраженияNullable
. - Исправлен неправильный результат при использовании кортежей с
IN
в случае, если часть компоненнтов кортежа есть в индексе таблицы. - Исправлена работа ограничения
max_execution_time
с распределенными запросами. - Исправлены ошибки при вычислении размеров составных столбцов в таблице
system.columns
. - Исправлена ошибка при создании временной таблицы
CREATE TEMPORARY TABLE IF NOT EXISTS
- Исправлены ошибки в
StorageKafka
(#2075) - Исправлены падения сервера от некорректных аргументов некоторых аггрегатных функций.
- Исправлена ошибка, из-за которой запрос
DETACH DATABASE
мог не приводить к остановке фоновых задач таблицы типаReplicatedMergeTree
. - Исправлена проблема с появлением
Too many parts
в агрегирующих материализованных представлениях (#2084). - Исправлена рекурсивная обработка подстановок в конфиге, если после одной подстановки, требуется другая подстановка на том же уровне.
- Исправлена ошибка с неправильным синтаксисом в файле с метаданными при создании
VIEW
, использующих запрос сUNION ALL
. - Исправлена работа
SummingMergeTree
в случае суммирования вложенных структур данных с составным ключом. - Исправлена возможность возникновения race condition при выборе лидера таблиц
ReplicatedMergeTree
.
- Поддержка
ninja
вместоmake
при сборке.ninja
используется по-умолчанию при сборке релизов. - Переименованы пакеты
clickhouse-server-base
вclickhouse-common-static
;clickhouse-server-common
вclickhouse-server
;clickhouse-common-dbg
вclickhouse-common-static-dbg
. Для установки используйтеclickhouse-server clickhouse-client
. Для совместимости, пакеты со старыми именами продолжают загружаться в репозиторий.
- Удалена специальная интерпретация выражения IN, если слева указан массив. Ранее выражение вида
arr IN (set)
воспринималось как "хотя бы один элементarr
принадлежит множествуset
". Для получения такого же поведения в новой версии, напишитеarrayExists(x -> x IN (set), arr)
. - Отключено ошибочное использование опции сокета
SO_REUSEPORT
(которая по ошибке включена по-умолчанию в библиотеке Poco). Стоит обратить внимание, что на Linux системах теперь не имеет смысла указывать одновременно адреса::
и0.0.0.0
для listen - следует использовать лишь адрес::
, который (с настройками ядра по-умолчанию) позволяет слушать соединения как по IPv4 так и по IPv6. Также вы можете вернуть поведение старых версий, указав в конфиге<listen_reuse_port>1</listen_reuse_port>
.
- Добавлена системная таблица
system.macros
и автоматическое обновление макросов при изменении конфигурационного файла. - Добавлен запрос
SYSTEM RELOAD CONFIG
. - Добавлена агрегатная функция
maxIntersections(left_col, right_col)
, возвращающая максимальное количество одновременно пересекающихся интервалов[left; right]
. ФункцияmaxIntersectionsPosition(left, right)
возвращает начало такого "максимального" интервала. (Michael Furmur).
- При вставке данных в
Replicated
-таблицу делается меньше обращений кZooKeeper
(также из логаZooKeeper
исчезло большинство user-level ошибок). - Добавлена возможность создавать алиасы для множеств. Пример:
WITH (1, 2, 3) AS set SELECT number IN set FROM system.numbers LIMIT 10
.
- Исправлена ошибка
Illegal PREWHERE
при чтении из Merge-таблицы надDistributed
-таблицами. - Добавлены исправления, позволяющие запускать clickhouse-server в IPv4-only docker-контейнерах.
- Исправлен race condition при чтении из системной таблицы
system.parts_columns
- Убрана двойная буферизация при синхронной вставке в
Distributed
-таблицу, которая могла приводить к timeout-ам соединений. - Исправлена ошибка, вызывающая чрезмерно долгое ожидание недоступной реплики перед началом выполнения
SELECT
. - Исправлено некорректное отображение дат в таблице
system.parts
. - Исправлена ошибка, приводящая к невозможности вставить данные в
Replicated
-таблицу, если в конфигурации кластераZooKeeper
задан непустойchroot
. - Исправлен алгоритм вертикального мержа при пустом ключе
ORDER BY
таблицы. - Возвращена возможность использовать словари в запросах к удаленным таблицам, даже если этих словарей нет на сервере-инициаторе. Данная функциональность была потеряна в версии 1.1.54362.
- Восстановлено поведение, при котором в запросах типа
SELECT * FROM remote('server2', default.table) WHERE col IN (SELECT col2 FROM default.table)
в правой частиIN
должна использоваться удаленная таблицаdefault.table
, а не локальная. данное поведение было нарушено в версии 1.1.54358. - Устранено ненужное Error-level логирование
Not found column ... in block
.
- Агрегация без
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
. Если вы использовали эту функциональность, напишите на[email protected]
. - Удалён движок таблиц
UnsortedMergeTree
.
- Добавлена возможность использовать макросы при задании имени кластера в распределенных DLL запросах и создании Distributed-таблиц:
CREATE TABLE distr ON CLUSTER '{cluster}' (...) ENGINE = Distributed('{cluster}', 'db', 'table')
. - Теперь при вычислении запросов вида
SELECT ... FROM table WHERE expr IN (subquery)
используется индекс таблицыtable
. - Улучшена обработка дубликатов при вставке в Replicated-таблицы, теперь они не приводят к излишнему замедлению выполнения очереди репликации.
Релиз содержит исправление к предыдущему релизу 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.
- Добавлена поддержка хранения многомерных массивов и кортежей (тип данных
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
. - Добавлены функции toNumberOrNull, где 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
от этих функций или материализованные представления, хранящие эти состояния), напишите на [email protected]. - В предыдущих версиях существовала недокументированная возможность: в типе данных 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
. Необходимо обновить все серверы кластера.
Релиз содержит исправление к предыдущему релизу 1.1.54318:
- Исправлена проблема с возможным race condition при репликации, которая может приводить к потере данных. Проблеме подвержены версии 1.1.54310 и 1.1.54318. Если вы их используете и у вас есть Replicated таблицы, то обновление обязательно. Понять, что эта проблема существует, можно по сообщениям в логе Warning вида
Part ... from own log doesn't exist.
Даже если таких сообщений нет, проблема всё-равно актуальна.
Релиз содержит изменения к предыдущему релизу 1.1.54310 с исправлением следующих багов:
- Исправлено некорректное удаление строк при слияниях в движке SummingMergeTree
- Исправлена утечка памяти в нереплицированных MergeTree-движках
- Исправлена деградация производительности при частых вставках в MergeTree-движках
- Исправлена проблема, приводящая к остановке выполнения очереди репликации
- Исправлено ротирование и архивация логов сервера
- Произвольный ключ партиционирования для таблиц семейства MergeTree.
- Движок таблиц Kafka.
- Возможность загружать модели CatBoost и применять их к данным, хранящимся в 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.
- Добавлена поддержка 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-словарь возвращает ненулевой код ответа
- Добавлена функция
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.
- Запросы
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.
- Возможность сборки с помощью
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>
и перезапустить сервер.
- Релиз содержит изменения к предыдущему релизу 1.1.54282, которые исправляют утечку записей о кусках в ZooKeeper
Релиз содержит исправления к предыдущему релизу 1.1.54276:
- Исправлена ошибка
DB::Exception: Assertion violation: !_path.empty()
при вставке в Distributed таблицу. - Исправлен парсинг при вставке в формате RowBinary, если входные данные начинаются с ';'.
- Исправлена ошибка при рантайм-компиляции некоторых агрегатных функций (например,
groupArray()
).
- Добавлена опциональная секция 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 (можно поменять, через параметр в конфиге).
- Улучшены сообщения об ошибках в случае синтаксически неверных запросов
- Значительно уменьшен расход оперативной памяти и улучшена производительность слияний больших 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
- Добавлена возмозможность сборки в Arcadia
- Добавлена возможность сборки с помощью gcc 7
- Ускорена параллельная сборка с помощью ccache+distcc
- Распределённые 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 файл повреждается