Перейти к основному содержанию
Перейти к основному содержанию

Список изменений за 2018 год

Релиз ClickHouse 18.16

Релиз ClickHouse 18.16.1, 2018-12-21

Исправления ошибок:

  • Исправлена ошибка, приводившая к проблемам при обновлении словарей с источником ODBC. #3825, #3829
  • JIT-компиляция агрегатных функций теперь работает со столбцами LowCardinality. #3838

Улучшения:

  • Добавлена настройка low_cardinality_allow_in_native_format (по умолчанию включена). При её отключении столбцы LowCardinality будут преобразовываться в обычные столбцы для SELECT-запросов, а для INSERT-запросов будут ожидаться обычные столбцы. #3879

Улучшения сборки:

  • Исправления для сборок под macOS и ARM.

Релиз ClickHouse 18.16.0, 2018-12-14

Новые возможности:

  • Выражения DEFAULT вычисляются для отсутствующих полей при загрузке данных в полуструктурированные форматы ввода (JSONEachRow, TSKV). Функциональность включается настройкой insert_sample_with_metadata. #3555
  • В запросе ALTER TABLE теперь доступно действие MODIFY ORDER BY для изменения ключа сортировки при добавлении или удалении столбца таблицы. Это полезно для таблиц семейства MergeTree, которые выполняют дополнительные задачи при слиянии на основе этого ключа сортировки, таких как SummingMergeTree, AggregatingMergeTree и т. д. #3581 #3755
  • Для таблиц семейства MergeTree теперь можно задать различные ключ сортировки (ORDER BY) и индекс (PRIMARY KEY). Ключ сортировки может быть длиннее индекса. #3581
  • Добавлена табличная функция hdfs и движок таблиц HDFS для импорта и экспорта данных в HDFS. chenxing-xc
  • Добавлены функции для работы с base64: base64Encode, base64Decode, tryBase64Decode. Alexander Krasheninnikov
  • Теперь вы можете использовать параметр для настройки точности агрегатной функции uniqCombined (то есть выбрать количество ячеек HyperLogLog). #3406
  • Добавлена таблица system.contributors, содержащая имена всех, кто делал коммиты в ClickHouse. #3452
  • Добавлена возможность опускать указание раздела в запросе ALTER TABLE ... FREEZE, чтобы создать резервную копию всех разделов сразу. #3514
  • Добавлены функции dictGet и dictGetOrDefault, которые не требуют указания типа возвращаемого значения. Тип определяется автоматически из описания словаря. Amos Bird
  • Теперь вы можете указывать комментарии для столбца в описании таблицы и изменять их с помощью ALTER. #3377
  • Поддерживается чтение таблиц типа Join с простыми ключами. Amos Bird
  • Теперь вы можете указывать опции join_use_nulls, max_rows_in_join, max_bytes_in_join и join_overflow_mode при создании таблицы типа Join. Amos Bird
  • Добавлена функция joinGet, которая позволяет использовать таблицу типа Join как словарь. Amos Bird
  • В таблицу system.tables добавлены столбцы partition_key, sorting_key, primary_key и sampling_key для предоставления информации о ключах таблицы. #3609
  • В таблицу system.columns добавлены столбцы is_in_partition_key, is_in_sorting_key, is_in_primary_key и is_in_sampling_key. #3609
  • В таблицу system.parts добавлены столбцы min_time и max_time. Эти столбцы заполняются, когда ключ разбиения — это выражение, состоящее из столбцов типа DateTime. Emmanuel Donin de Rosière

Исправления ошибок:

  • Исправления и улучшения производительности для типа данных LowCardinality. GROUP BY с использованием LowCardinality(Nullable(...)). Получение значений extremes. Обработка функций высшего порядка. LEFT ARRAY JOIN. Распределённый GROUP BY. Функции, возвращающие Array. Выполнение ORDER BY. Запись в таблицы Distributed (nicelulu). Обратная совместимость для запросов INSERT от клиентов старых версий, использующих протокол Native. Поддержка типа LowCardinality в JOIN. Повышена производительность при работе в одном потоке. #3823 #3803 #3799 #3769 #3744 #3681 #3651 #3649 #3641 #3632 #3568 #3523 #3518
  • Исправлена работа параметра select_sequential_consistency. Ранее при включённом параметре иногда мог возвращаться неполный результат после начала записи в новый раздел. #2863
  • Базы данных корректно определяются при выполнении DDL-запросов ON CLUSTER и ALTER UPDATE/DELETE. #3772 #3460
  • Для подзапросов внутри VIEW теперь корректно указываются базы данных. #3521
  • Исправлена ошибка в PREWHERE с FINAL для VersionedCollapsingMergeTree. 7167bfd7
  • Теперь вы можете использовать KILL QUERY для отмены запросов, которые ещё не были запущены, поскольку ожидают блокировки таблицы. #3517
  • Исправлены вычисления даты и времени, если часы переводились назад в полночь (это происходит в Иране, а также происходило в Москве с 1981 по 1983 год). Ранее это приводило к тому, что время сбрасывалось на день раньше, чем нужно, а также вызывало некорректное форматирование даты и времени в текстовом формате. #3819
  • Исправлены ошибки в некоторых случаях использования VIEW и подзапросов, когда опускается имя базы данных. Winter Zhang
  • Исправлено состояние гонки при одновременном чтении из MATERIALIZED VIEW и удалении MATERIALIZED VIEW из-за отсутствия блокировки внутреннего MATERIALIZED VIEW. #3404 #3694
  • Исправлена ошибка Lock handler cannot be nullptr. #3689
  • Исправлена обработка запросов при включённой настройке compile_expressions (по умолчанию она включена). Недетерминированные константные выражения, такие как функция now, больше не разворачиваются в константы. #3457
  • Исправлена ошибка, вызывавшая сбой при использовании неконстантного аргумента масштаба в функциях toDecimal32/64/128.
  • Исправлена ошибка при попытке вставить массив с элементами NULL в формате Values в столбец типа Array без Nullable (если input_format_values_interpret_expressions = 1). #3487 #3503
  • Исправлено непрерывное логирование ошибок в DDLWorker при недоступности ZooKeeper. 8f50c620
  • Исправлен тип возвращаемого значения для функций quantile* с аргументами типов Date и DateTime. #3580
  • Исправлена обработка предложения WITH при указании простого псевдонима без выражений. #3570
  • Исправлена обработка запросов с именованными подзапросами и квалифицированными именами столбцов при включённом параметре enable_optimize_predicate_expression. Winter Zhang
  • Исправлена ошибка Attempt to attach to nullptr thread group при работе с материализованными представлениями. Marek Vavruša
  • Исправлена ошибка, приводившая к сбою при передаче некоторых некорректных аргументов в функцию arrayReverse. 73e3a7b6
  • Исправлено переполнение буфера в функции extractURLParameter. Улучшена производительность. Добавлена корректная обработка строк, содержащих нулевые байты. 141e9799
  • Исправлено переполнение буфера в функциях lowerUTF8 и upperUTF8. Удалена возможность вызывать эти функции для аргументов типа FixedString. #3662
  • Устранено редкое состояние гонки при удалении таблиц MergeTree. #3680
  • Исправлено состояние гонки при чтении из таблиц типа Buffer и одновременном выполнении операций ALTER или DROP над целевыми таблицами. #3719
  • Исправлено падение (segfault) при превышении предела max_temporary_non_const_columns. #3788

Улучшения:

  • Сервер не записывает обработанные файлы конфигурации в каталог /etc/clickhouse-server/. Вместо этого он сохраняет их в каталоге preprocessed_configs внутри path. Это означает, что каталог /etc/clickhouse-server/ недоступен для записи пользователю clickhouse, что повышает безопасность. #2443
  • Параметр min_merge_bytes_to_use_direct_io по умолчанию равен 10 ГиБ. Слияния, которые формируют крупные части таблиц семейства MergeTree, выполняются в режиме O_DIRECT, что предотвращает чрезмерное вытеснение страниц из страницного кэша. #3504
  • Ускорен запуск сервера при очень большом количестве таблиц. #3398
  • Добавлен пул соединений и HTTP Keep-Alive для соединений между репликами. #3594
  • Если синтаксис запроса недопустим, в интерфейсе HTTP возвращается код 400 Bad Request (ранее возвращался код 500). 31bc680a
  • Параметр join_default_strictness по умолчанию имеет значение ALL для совместимости. 120e2cbe
  • Удалено логирование в stderr в библиотеке re2 для некорректных или сложных регулярных выражений. #3723
  • Добавлено для табличного движка Kafka: проверка наличия подписок перед началом чтения из Kafka; параметр таблицы kafka_max_block_size. Marek Vavruša
  • Функции cityHash64, farmHash64, metroHash64, sipHash64, halfMD5, murmurHash2_32, murmurHash2_64, murmurHash3_32 и murmurHash3_64 теперь работают с произвольным числом аргументов, а также с аргументами в виде кортежей. #3451 #3519
  • Функция arrayReverse теперь работает с массивами любого типа. 73e3a7b6
  • Добавлен необязательный параметр — размер слота для функции timeSlots. Kirill Shvakov
  • Для FULL и RIGHT JOIN настройка max_block_size используется для потока данных, не вошедших в соединение, из правой таблицы. Amos Bird
  • Добавлен параметр командной строки --secure в clickhouse-benchmark и clickhouse-performance-test, позволяющий включить TLS. #3688 #3690
  • Преобразование типов данных, когда структура таблицы типа Buffer не совпадает со структурой целевой таблицы. Vitaly Baranov
  • Добавлена опция tcp_keep_alive_timeout для включения отправки keep-alive‑пакетов по истечении заданного интервала простоя. #3441
  • Убрано избыточное заключение в кавычки значений ключа партиционирования в таблице system.parts, если он состоит из одного столбца. #3652
  • Функция вычисления остатка по модулю работает для типов данных Date и DateTime. #3385
  • Добавлены синонимы для функций POWER, LN, LCASE, UCASE, REPLACE, LOCATE, SUBSTR и MID. #3774 #3763 Некоторые имена функций сделаны регистронезависимыми для совместимости со стандартом SQL. Добавлен синтаксический сахар SUBSTRING(expr FROM start FOR length) для совместимости с SQL. #3804
  • Добавлена возможность выполнять mlock страниц памяти, содержащих исполняемый код clickhouse-server, чтобы предотвратить их вытеснение из памяти. По умолчанию эта возможность отключена. #3553
  • Улучшена производительность при чтении с использованием O_DIRECT (при включённой опции min_bytes_to_use_direct_io). #3405
  • Улучшена производительность функции dictGet...OrDefault для константного аргумента ключа и неконстантного значения по умолчанию. Amos Bird
  • Функция firstSignificantSubdomain теперь обрабатывает домены gov, mil и edu. Igor Hatarist Повышена производительность. #3628
  • Возможность указывать пользовательские переменные окружения для запуска clickhouse-server с использованием сценария инициализации SYS-V init.d, задавая CLICKHOUSE_PROGRAM_ENV в /etc/default/clickhouse. Павло Башинский
  • Исправлен код возврата для init-скрипта clickhouse-server. #3516
  • В таблице system.metrics теперь есть метрика VersionInteger, а в system.build_options добавлена строка VERSION_INTEGER, которая содержит числовое представление версии ClickHouse, например 18016000. #3644
  • Удалена возможность сравнивать значения типа Date с числом, чтобы избежать потенциальных ошибок вида date = 2018-12-17, когда кавычки вокруг даты по ошибке опускаются. #3687
  • Исправлено поведение функций с состоянием, таких как rowNumberInAllBlocks. Ранее они возвращали результат, увеличенный на единицу, из‑за того, что начинали работу на этапе анализа запроса. Amos Bird
  • Если файл force_restore_data не удаётся удалить, выводится сообщение об ошибке. Amos Bird

Улучшения сборки:

  • Обновлена библиотека jemalloc, что устраняет потенциальную утечку памяти. Amos Bird
  • Профилирование с помощью jemalloc включено по умолчанию для отладки сборок. 2cc82f5c
  • Добавлена возможность запускать интеграционные тесты, когда в системе установлен только Docker. #3650
  • Добавлен fuzz‑тест выражений в запросах SELECT. #3442
  • Добавлен стресс‑тест для коммитов, который выполняет функциональные тесты параллельно и в случайном порядке для обнаружения большего количества состояний гонки. #3438
  • Улучшен способ запуска clickhouse-server в Docker-образе. Elghazal Ahmed
  • Для Docker-образа добавлена поддержка инициализации баз данных с использованием файлов в каталоге /docker-entrypoint-initdb.d. Konstantин Lebedev
  • Исправления для сборок на ARM. #3709

Обратно несовместимые изменения:

  • Удалена возможность сравнивать тип Date с числом. Вместо toDate('2018-12-18') = 17883 необходимо использовать явное приведение типа: = toDate(17883). #3687

Релиз ClickHouse 18.14

Релиз ClickHouse 18.14.19, 2018-12-19

Исправления ошибок:

  • Исправлена ошибка, приводившая к проблемам при обновлении словарей с источником ODBC. #3825, #3829
  • Базы данных теперь корректно указываются при выполнении DDL-запросов ON CLUSTER. #3460
  • Исправлена ошибка сегментации при превышении лимита max_temporary_non_const_columns. #3788

Улучшения сборки:

  • Исправления для сборки на ARM.

Релиз ClickHouse 18.14.18, 2018-12-04

Исправления ошибок:

  • Исправлена ошибка в функции dictGet... для словарей типа range, если один из аргументов константный, а другой — нет. #3751
  • Исправлена ошибка, из-за которой сообщения netlink: '...': attribute type 1 has an invalid length выводились в журнал ядра Linux; это происходило только на достаточно новых версиях ядра Linux. #3749
  • Исправлена ошибка сегментации в функции empty для аргумента типа FixedString. Daniel, Dao Quang Minh
  • Исправлено избыточное выделение памяти при использовании большого значения настройки max_query_size (блок памяти размером max_query_size байт предварительно выделялся целиком). #3720

Изменения в сборке:

  • Исправлена сборка с библиотеками LLVM/Clang версии 7 из пакетов ОС (эти библиотеки используются для компиляции запросов во время выполнения). #3582

Релиз ClickHouse 18.14.17, 2018-11-30

Исправления ошибок:

  • Исправлены случаи, когда процесс ODBC bridge не завершался вместе с основным серверным процессом. #3642
  • Исправлена синхронная вставка в таблицу Distributed со списком столбцов, отличающимся от списка столбцов удалённой таблицы. #3673
  • Исправлена редкая гонка состояний, которая могла привести к сбою при удалении таблицы MergeTree. #3643
  • Исправлена взаимная блокировка запроса в случае, когда создание потока запроса завершалось ошибкой Resource temporarily unavailable. #3643
  • Исправлен разбор секции ENGINE, когда использовался синтаксис CREATE AS table и секция ENGINE указывалась перед AS table (ошибка приводила к игнорированию указанного движка). #3692

Релиз ClickHouse 18.14.15, 2018-11-21

Исправления ошибок:

  • Размер блока памяти был завышен при десериализации столбца типа Array(String), что приводило к ошибкам "Memory limit exceeded". Проблема появилась в версии 18.12.13. #3589

Релиз ClickHouse 18.14.14, 2018-11-20

Исправления ошибок:

  • Исправлены запросы ON CLUSTER, когда кластер настроен как защищённый (флаг <secure>). #3599

Изменения сборки:

  • Исправлены проблемы (llvm-7 из системы, macOS). #3582

Релиз ClickHouse 18.14.13, 2018-11-08

Исправления ошибок:

  • Исправлена ошибка Block structure mismatch in MergingSorted stream. #3162
  • Исправлены запросы ON CLUSTER в случае, когда в конфигурации кластера были включены защищённые соединения (флаг <secure>). #3465
  • Исправлена ошибка в запросах, использующих SAMPLE, PREWHERE и столбцы-алиасы. #3543
  • Исправлена редкая ошибка unknown compression method при включённой настройке min_bytes_to_use_direct_io. 3544

Улучшения производительности:

  • Исправлена регрессия производительности запросов с GROUP BY по столбцам типов UInt16 или Date при выполнении на процессорах AMD EPYC. Igor Lapko
  • Исправлена регрессия производительности запросов, обрабатывающих длинные строки. #3530

Улучшения сборки:

  • Улучшения, упрощающие сборку Arcadia. #3475, #3535

Релиз ClickHouse 18.14.12, 2018-11-02

Исправления ошибок:

  • Исправлено падение при объединении двух безымянных подзапросов. #3505
  • Исправлена генерация некорректных запросов (с пустым предложением WHERE) при запросах к внешним базам данных. hotid
  • Исправлено использование некорректного значения таймаута в словарях ODBC. Marek Vavruša

Релиз ClickHouse 18.14.11, 2018-10-29

Исправления ошибок:

  • Исправлена ошибка Block structure mismatch in UNION stream: different number of columns в запросах с LIMIT. #2156
  • Исправлены ошибки при слиянии данных в таблицах, содержащих массивы внутри структур Nested. #3397
  • Исправлены некорректные результаты запросов при отключённой настройке merge_tree_uniform_read_distribution (по умолчанию она включена). #3429
  • Исправлена ошибка при вставках в Distributed-таблицу в формате Native. #3411

Релиз ClickHouse 18.14.10, 2018-10-23

  • Настройка compile_expressions (JIT-компиляция выражений) по умолчанию отключена. #3410
  • Настройка enable_optimize_predicate_expression по умолчанию отключена.

Релиз ClickHouse 18.14.9, 2018-10-16

Новые возможности:

  • Модификатор WITH CUBE для GROUP BY (также доступен альтернативный синтаксис GROUP BY CUBE(...)). #3172
  • Добавлена функция formatDateTime. Alexandr Krasheninnikov
  • Добавлены движок таблицы JDBC и табличная функция jdbc (требуется установка clickhouse-jdbc-bridge). Alexandr Krasheninnikov
  • Добавлены функции для работы с номером недели по ISO: toISOWeek, toISOYear, toStartOfISOYear и toDayOfYear. #3146
  • Теперь можно использовать столбцы Nullable для таблиц MySQL и ODBC. #3362
  • Вложенные структуры данных могут считываться как вложенные объекты в формате JSONEachRow. Добавлена настройка input_format_import_nested_json. Veloman Yunkan
  • Доступна параллельная обработка для многих материализованных представлений (MATERIALIZED VIEW) при вставке данных. См. настройку parallel_view_processing. Marek Vavruša
  • Добавлен запрос SYSTEM FLUSH LOGS (принудительная запись логов в системные таблицы, такие как query_log). #3321
  • Теперь можно использовать предопределённые макросы database и table при объявлении реплицируемых (Replicated) таблиц. #3251
  • Добавлена возможность чтения значений типа Decimal в инженерной нотации (с указанием степеней десяти). #3153

Экспериментальные возможности:

  • Оптимизация предложения GROUP BY для типов данных LowCardinality. #3138
  • Оптимизировано вычисление выражений для типов данных LowCardinality. #3200

Улучшения:

  • Существенно уменьшено потребление памяти для запросов с ORDER BY и LIMIT. См. настройку max_bytes_before_remerge_sort. #3205
  • При отсутствии указания типа JOIN (LEFT, INNER, ...), по умолчанию используется INNER JOIN. #3147
  • Квалифицированные звёздочки корректно работают в запросах с JOIN. Winter Zhang
  • Движок таблицы ODBC корректно выбирает способ кавычения идентификаторов в SQL-диалекте удалённой базы данных. Alexandr Krasheninnikov
  • Настройка compile_expressions (JIT-компиляция выражений) включена по умолчанию.
  • Исправлено поведение при одновременном выполнении запросов DROP DATABASE/TABLE IF EXISTS и CREATE DATABASE/TABLE IF NOT EXISTS. Ранее запрос CREATE DATABASE ... IF NOT EXISTS мог возвращать сообщение об ошибке «File ... already exists», а запросы CREATE TABLE ... IF NOT EXISTS и DROP TABLE IF EXISTS могли возвращать ошибку Table ... is creating or attaching right now. #3101
  • Выражения LIKE и IN с константным правым операндом передаются на удалённый сервер при выполнении запросов к таблицам MySQL или ODBC. #3182
  • Сравнения с константными выражениями в предложении WHERE передаются на удалённый сервер при запросах к таблицам MySQL и ODBC. Ранее передавались только сравнения с константами. #3182
  • Правильный расчет ширины строки в терминале для форматов Pretty, в том числе для строк с иероглифами. Amos Bird.
  • ON CLUSTER можно указывать для запросов ALTER UPDATE.
  • Улучшена производительность при чтении данных в формате JSONEachRow. #3332
  • Добавлены синонимы для функций LENGTH и CHARACTER_LENGTH для совместимости. Функция CONCAT больше не чувствительна к регистру. #3306
  • Добавлен синоним TIMESTAMP для типа DateTime. #3390
  • В журналах сервера всегда отведено место под query_id, даже если строка журнала не связана с запросом. Это упрощает разбор текстовых журналов сервера сторонними инструментами.
  • Потребление памяти запросом логируется, когда оно превышает следующий порог, выраженный целым числом гигабайт. #3205
  • Добавлен режим совместимости для случая, когда клиентская библиотека, использующая протокол Native, по ошибке отправляет меньше столбцов, чем ожидает сервер в запросе INSERT. Такая ситуация могла возникать при использовании библиотеки clickhouse-cpp. Ранее это приводило к аварийному завершению работы сервера. #3171
  • В пользовательском выражении WHERE в clickhouse-copier теперь можно использовать псевдоним partition_key (для дополнительной фильтрации по партиции исходной таблицы). Это полезно, если схема партиционирования во время копирования меняется, но лишь незначительно. #3166
  • Работа движка Kafka перенесена в пул фоновых потоков, чтобы автоматически снижать скорость чтения данных при высоких нагрузках. Marek Vavruša.
  • Поддержка чтения значений Tuple и Nested для структур типа struct в формате Cap'n Proto. Marek Vavruša
  • Список доменов верхнего уровня для функции firstSignificantSubdomain теперь включает в себя домен biz. decaseal
  • В конфигурации внешних словарей null_value интерпретируется как значение по умолчанию для соответствующего типа данных. #3330
  • Добавлена поддержка функций intDiv и intDivOrZero для Decimal. b48402e8
  • Поддержка типов Date, DateTime, UUID и Decimal в качестве ключа для агрегатной функции sumMap. #3281
  • Поддержка типа данных Decimal во внешних словарях. #3324
  • Поддержка типа данных Decimal в таблицах SummingMergeTree. #3348
  • Добавлены специализации для UUID в функции if. #3366
  • Снижено количество системных вызовов open и close при чтении из таблиц MergeTree. #3283
  • Запрос TRUNCATE TABLE может быть выполнен на любой реплике (при этом запрос будет передан реплике-лидеру). Kirill Shvakov

Исправления ошибок:

  • Исправлена проблема в таблицах Dictionary для словарей range_hashed. Ошибка проявлялась в версии 18.12.17. #1702
  • Исправлена ошибка при загрузке словарей типа range_hashed (сообщение Unsupported type Nullable (...)). Эта ошибка возникала в версии 18.12.17. #3362
  • Исправлены ошибки в функции pointInPolygon, вызванные накоплением погрешностей вычислений для полигонов с большим количеством вершин, расположенных близко друг к другу. #3331 #3341
  • Если после слияния частей данных контрольная сумма для результирующей части отличается от результата того же слияния на другой реплике, результат слияния удаляется, и часть данных загружается с другой реплики (это корректное поведение). Но после загрузки часть данных не удавалось добавить в рабочий набор из‑за ошибки о том, что такая часть уже существует (потому что часть данных была удалена с некоторой задержкой после слияния). Это приводило к циклическим попыткам повторной загрузки одних и тех же данных. #3194
  • Исправлено некорректное вычисление общего потребления памяти запросами (из‑за этого настройка max_memory_usage_for_all_queries работала неправильно, а метрика MemoryTracking имела неверное значение). Эта ошибка проявлялась в версии 18.12.13. Marek Vavruša
  • Исправлена работа CREATE TABLE ... ON CLUSTER ... AS SELECT .... Эта ошибка наблюдалась в версии 18.12.13. #3247
  • Исправлена лишняя подготовка структур данных для операций JOIN на сервере, инициирующем запрос, если операции JOIN выполняются только на удалённых серверах. #3340
  • Исправлены ошибки в движке Kafka: взаимоблокировки после исключений при запуске чтения данных и блокировки при завершении чтения данных (Marek Vavruša).
  • Для таблиц Kafka необязательный параметр schema (схема формата Cap'n'Proto) не передавался. Vojtech Splichal
  • Если в ансамбле серверов ZooKeeper есть серверы, которые принимают соединение, но затем сразу закрывают его вместо ответа на handshake, ClickHouse пытается подключиться к другому серверу. Раньше это приводило к ошибке Cannot read all data. Bytes read: 0. Bytes expected: 4. и сервер не мог запуститься. 8218cf3a
  • Если в ансамбле серверов ZooKeeper есть серверы, для которых DNS‑запрос завершается ошибкой, эти серверы игнорируются. 17b8e209
  • Исправлено преобразование типов между Date и DateTime при вставке данных в формате VALUES (если input_format_values_interpret_expressions = 1). Ранее преобразование выполнялось между числовым значением количества дней с начала эпохи Unix и Unix-временем (Unix timestamp), что приводило к неожиданным результатам. #3229
  • Исправлено преобразование типов между Decimal и целыми числами. #3211
  • Исправлены ошибки в настройке enable_optimize_predicate_expression. Winter Zhang
  • Исправлена ошибка разбора формата CSV с числами с плавающей запятой при использовании нестандартного разделителя CSV, например ; #3155
  • Исправлена функция arrayCumSumNonNegative (она не накапливает отрицательные значения, если текущее значение аккумулятора меньше нуля). Aleksey Studnev
  • Исправлено поведение таблиц Merge поверх таблиц Distributed при использовании PREWHERE. #3165
  • Устранены ошибки в запросе ALTER UPDATE.
  • Исправлены ошибки в табличной функции odbc, обнаруженные в версии 18.12. #3197
  • Исправлена работа агрегатных функций с комбинатором StateArray. #3188
  • Исправлено падение при делении значения типа Decimal на ноль. 69dd6609
  • Исправлен вывод типов для операций с аргументами Decimal и целочисленными аргументами. #3224
  • Исправлен сегфолт при выполнении GROUP BY на Decimal128. 3359ba06
  • Параметр log_query_threads (логирование информации о каждом потоке выполнения запроса) теперь действует только в том случае, если опция log_queries (логирование информации о запросах) установлена в значение 1. Поскольку опция log_query_threads включена по умолчанию, информация о потоках ранее записывалась в лог даже при отключённом логировании запросов. #3241
  • Исправлена ошибка в распределённом режиме работы агрегатной функции quantiles (сообщение об ошибке Not found column quantile...). 292a8855
  • Исправлена проблема совместимости при одновременной работе кластера с серверами версии 18.12.17 и более ранними серверами. Для распределённых запросов с ключами GROUP BY как фиксированной, так и переменной длины, если объём данных для агрегации был велик, возвращаемые данные могли быть агрегированы не полностью (две разные строки содержали одинаковые ключи агрегации). #3254
  • Исправлена обработка подстановок в clickhouse-performance-test, если запрос содержит только часть объявленных в тесте подстановок. #3263
  • Исправлена ошибка при использовании FINAL с PREWHERE. #3298
  • Исправлена ошибка при использовании PREWHERE для столбцов, добавленных с помощью оператора ALTER. #3298
  • Добавлена проверка на отсутствие arrayJoin для выражений DEFAULT и MATERIALIZED. Ранее использование arrayJoin приводило к ошибке при вставке данных. #3337
  • Добавлена проверка, гарантирующая отсутствие arrayJoin в предложении PREWHERE. Ранее это приводило к сообщениям вида Size ... does not match или Unknown compression method при выполнении запросов. #3357
  • Исправлена ошибка сегментации, которая в редких случаях могла возникать после оптимизации, заменявшей цепочки AND из сравнений на равенство на соответствующее выражение IN. liuyimin-bytedance
  • Незначительные исправления в clickhouse-benchmark: раньше информация о клиенте не отправлялась на сервер; теперь количество выполненных запросов подсчитывается более точно при завершении работы и при ограничении числа итераций. #3351 #3352

Обратно несовместимые изменения:

  • Удалён параметр allow_experimental_decimal_type. Тип данных Decimal теперь доступен для использования по умолчанию. #3329

Релиз ClickHouse 18.12

Релиз ClickHouse 18.12.17, 2018-09-16

Новые возможности:

  • Для источника clickhouse реализован invalidate_query (возможность указать запрос для проверки необходимости обновления внешнего словаря). #3126
  • Добавлена возможность использовать типы данных UInt*, Int* и DateTime (вместе с типом Date) в качестве ключа внешнего словаря range_hashed, определяющего границы диапазонов. Теперь для обозначения открытого диапазона можно использовать NULL. Vasily Nemkov
  • Тип Decimal теперь поддерживает агрегатные функции var* и stddev*. #3129
  • Тип Decimal теперь поддерживает математические функции (exp, sin и т. д.). #3129
  • В таблице system.part_log теперь есть столбец partition_id. #3089

Исправления ошибок:

  • Merge теперь корректно работает на таблицах Distributed. Winter Zhang
  • Исправлена несовместимость (избыточная зависимость от версии glibc), из-за которой было невозможно запускать ClickHouse на Ubuntu Precise и более старых версиях. Несовместимость появилась в версии 18.12.13. #3130
  • Исправлены ошибки в настройке enable_optimize_predicate_expression. Winter Zhang
  • Исправлена незначительная проблема с обратной совместимостью, которая проявлялась при работе с кластером реплик на версиях ранее 18.12.13 и одновременном создании новой реплики таблицы на сервере с более новой версией (проявлялась сообщением Can not clone replica, because the ... updated to new ClickHouse version, что логично, но происходить не должно). #3122

Изменения, нарушающие обратную совместимость:

  • Опция enable_optimize_predicate_expression теперь по умолчанию включена (что довольно оптимистично). Если при анализе запроса возникают ошибки, связанные с поиском имён столбцов, установите enable_optimize_predicate_expression в 0. Winter Zhang

Релиз ClickHouse 18.12.14, 2018-09-13

Новые возможности:

  • Добавлена поддержка запросов ALTER UPDATE. #3035
  • Добавлена опция allow_ddl, которая ограничивает доступ пользователя к DDL-запросам. #3104
  • Добавлена опция min_merge_bytes_to_use_direct_io для движков MergeTree, которая позволяет задать порог для общего размера слияния (при превышении порога файлы кусков данных обрабатываются с использованием O_DIRECT). #3117
  • В системной таблице system.merges теперь содержится столбец partition_id. #3099

Улучшения:

  • Если кусок данных во время мутации остаётся неизменным, он не загружается репликами. #3103
  • При работе с clickhouse-client доступно автодополнение имён настроек. #3106

Исправления ошибок:

  • Добавлена проверка размеров массивов, являющихся элементами полей типа Nested, при вставке. #3118
  • Исправлена ошибка при обновлении внешних словарей с источником ODBC и хранилищем hashed. Эта ошибка возникала в версии 18.12.13.
  • Исправлено падение при создании временной таблицы из запроса с условием IN. Winter Zhang
  • Исправлена ошибка в агрегатных функциях для массивов, которые могут содержать элементы NULL. Winter Zhang

Релиз ClickHouse 18.12.13, 2018-09-10

Новые возможности:

  • Добавлен тип данных DECIMAL(digits, scale) (Decimal32(scale), Decimal64(scale), Decimal128(scale)). Чтобы его включить, используйте настройку allow_experimental_decimal_type. #2846 #2970 #3008 #3047
  • Новый модификатор WITH ROLLUP для GROUP BY (альтернативный синтаксис — GROUP BY ROLLUP(...)). #2948
  • В запросах с JOIN символ «звёздочка» разворачивается в список столбцов всех таблиц в соответствии со стандартом SQL. Вы можете восстановить прежнее поведение, установив параметр asterisk_left_columns_only равным 1 в пользовательской конфигурации. Winter Zhang
  • Добавлена поддержка операторов JOIN с табличными функциями. Winter Zhang
  • Автодополнение в clickhouse-client по клавише Tab. Sergey Shcherbin
  • Ctrl+C в clickhouse-client стирает введённый запрос. #2877
  • Добавлена настройка join_default_strictness (возможные значения: ", 'any', 'all'). Это позволяет не указывать ANY или ALL в JOIN. #2982
  • Каждая строка серверного лога, связанная с обработкой запроса, содержит идентификатор запроса. #2482
  • Теперь вы можете получать логи выполнения запросов в clickhouse-client (используя параметр send_logs_level). При распределённой обработке запросов логи каскадно собираются со всех серверов. #2482
  • Таблицы system.query_log и system.processes (SHOW PROCESSLIST) теперь содержат информацию обо всех изменённых настройках при выполнении запроса (в виде вложенной структуры данных Settings). Добавлена настройка log_query_settings. #2482
  • Таблицы system.query_log и system.processes теперь содержат сведения о числе потоков, участвующих в выполнении запроса (см. столбец thread_numbers). #2482
  • Добавлены счетчики ProfileEvents, которые измеряют время, затраченное на чтение и запись по сети, чтение и запись на диск, количество сетевых ошибок, а также время ожидания при ограниченной пропускной способности сети. #2482
  • Добавлены счётчики ProfileEvents, которые содержат системные метрики из rusage (их можно использовать для получения информации об использовании CPU в пространстве пользователя и в ядре, о страничных ошибках и переключениях контекста), а также метрики taskstats (их можно использовать для получения информации о времени ожидания I/O, времени ожидания CPU и объёме прочитанных и записанных данных как с использованием page cache, так и без него). #2482
  • Счётчики ProfileEvents применяются на глобальном уровне, для каждого запроса и для каждого потока его выполнения, что позволяет детально профилировать использование ресурсов по каждому запросу. #2482
  • Добавлена таблица system.query_thread_log, содержащая информацию о каждом потоке выполнения запроса. Добавлена настройка log_query_threads. #2482
  • Таблицы system.metrics и system.events теперь содержат встроенную документацию. #3016
  • Добавлена функция arrayEnumerateDense. Amos Bird
  • Добавлены функции arrayCumSumNonNegative и arrayDifference. Aleksey Studnev
  • Добавлена агрегатная функция retention. Sundy Li
  • Теперь вы можете складывать (объединять) состояния агрегатных функций с помощью оператора +, а также умножать их на неотрицательную константу. #3062 #3034
  • Таблицы семейства MergeTree получили виртуальный столбец _partition_id. #3089

Экспериментальные возможности:

  • Добавлен тип данных LowCardinality(T). Этот тип данных автоматически создаёт локальный словарь значений и позволяет обрабатывать данные без распаковки словаря. #2830
  • Добавлен кэш JIT-компилированных функций и счётчик числа использований до компиляции. Чтобы JIT-компилировать выражения, включите настройку compile_expressions. #2990 #3077

Улучшения:

  • Исправлена проблема с неограниченным накоплением журнала репликации при наличии заброшенных реплик. Добавлен эффективный режим восстановления для реплик с большим лагом репликации.
  • Повышена производительность GROUP BY с несколькими полями группировки, когда одно из них строкового типа, а остальные — фиксированной длины.
  • Повышена производительность при использовании PREWHERE и при неявном переносе выражений в PREWHERE.
  • Улучшена производительность разбора текстовых форматов (CSV, TSV). Amos Bird #2980
  • Улучшена производительность чтения строк и массивов в двоичных форматах. Amos Bird
  • Повышена производительность и снижено потребление памяти для запросов к system.tables и system.columns при очень большом количестве таблиц на одном сервере. #2953
  • Исправлена проблема с производительностью при большом потоке запросов, завершающихся ошибкой (функция _dl_addr отображается в perf top, но сервер почти не загружает CPU). #2938
  • Условия проталкиваются в представление (при включённом enable_optimize_predicate_expression). Winter Zhang
  • Улучшена функциональность типа данных UUID. #3074 #2985
  • В словарях The-Alchemist поддерживается тип данных UUID. #2822
  • Функция visitParamExtractRaw корректно работает с вложенными структурами. Winter Zhang
  • При включённой настройке input_format_skip_unknown_fields поля объектов в формате JSONEachRow корректно пропускаются. BlahGeek
  • Для выражения CASE с условиями теперь можно опускать ELSE, что эквивалентно ELSE NULL. #2920
  • Таймаут выполнения операций теперь можно настраивать при работе с ZooKeeper. urykhy
  • Вы можете указать смещение для LIMIT n, m в виде LIMIT n OFFSET m. #2840
  • Вы можете использовать синтаксис SELECT TOP n как альтернативу LIMIT. #2840
  • Увеличен размер очереди на запись в системные таблицы, чтобы ошибка SystemLog parameter queue is full возникала реже.
  • Агрегатная функция windowFunnel теперь поддерживает события, соответствующие нескольким условиям. Amos Bird
  • Дублирующиеся столбцы можно использовать в выражении USING при выполнении JOIN. #3006
  • Форматы вывода Pretty теперь имеют ограничение на выравнивание столбцов по ширине. Используйте настройку output_format_pretty_max_column_pad_width. Если значение шире этого предела, оно по-прежнему будет отображаться полностью, но остальные ячейки таблицы не будут слишком широкими. #3003
  • Табличная функция odbc теперь позволяет указывать имя базы данных/схемы. Amos Bird
  • Добавлена возможность использовать имя пользователя, указанное в файле конфигурации clickhouse-client. Vladimir Kozbin
  • Счётчик ZooKeeperExceptions разделён на три счётчика: ZooKeeperUserExceptions, ZooKeeperHardwareExceptions и ZooKeeperOtherExceptions.
  • Для материализованных представлений поддерживаются запросы ALTER DELETE.
  • Добавлено случайное смещение при периодическом запуске потока очистки для таблиц ReplicatedMergeTree, чтобы избежать периодических пиков нагрузки при очень большом количестве таблиц ReplicatedMergeTree.
  • Поддержка запросов ATTACH TABLE ... ON CLUSTER. #3025

Исправления ошибок:

  • Исправлена проблема с таблицами Dictionary (при которой выбрасывалось исключение Size of offsets does not match size of column или Unknown compression method). Эта ошибка появилась в версии 18.10.3. #2913
  • Исправлена ошибка при слиянии таблиц CollapsingMergeTree, если одна из частей данных пуста (эти части формируются во время слияния или при выполнении ALTER DELETE, если все данные были удалены) и при слиянии использовался алгоритм vertical. #3049
  • Исправлена гонка при выполнении DROP или TRUNCATE для таблиц типа Memory при одновременном SELECT, которая могла приводить к падению сервера. Эта ошибка появилась в версии 1.1.54388. #3038
  • Исправлена проблема, которая могла приводить к потере данных при вставке в таблицы Replicated, если возвращалась ошибка Session is expired (потерю данных можно обнаружить по метрике ReplicatedDataLoss). Эта ошибка возникала в версии 1.1.54378. #2939 #2949 #2964
  • Исправлена ошибка сегментирования при выполнении запроса JOIN ... ON. #3000
  • Исправлена ошибка при поиске имён столбцов, когда выражение WHERE полностью состоит из квалифицированного имени столбца, например WHERE table.column. #2994
  • Исправлена ошибка "Not found column", возникавшая при выполнении распределённых запросов, если с удалённого сервера запрашивался один столбец, состоящий из выражения IN с подзапросом. #3087
  • Исправлена ошибка Block structure mismatch in UNION stream: different number of columns, возникавшая при распределённых запросах, если один из шардов был локальным, а другой — нет, и была включена оптимизация переноса условий в PREWHERE. #2226 #3037 #3055 #3065 #3073 #3090 #3093
  • Исправлена функция pointInPolygon в некоторых случаях для невыпуклых многоугольников. #2910
  • Исправлен некорректный результат при сравнении nan с целыми числами. #3024
  • Исправлена ошибка в библиотеке zlib-ng, которая в редких случаях могла приводить к сбою сегментации (segfault). #2854
  • Исправлена утечка памяти при вставке в таблицу со столбцами AggregateFunction, если состояние агрегатной функции не простое (выделяет память отдельно) и если один запрос на вставку приводит к созданию нескольких небольших блоков. #3084
  • Исправлена гонка при одновременном создании и удалении одной и той же таблицы Buffer или MergeTree.
  • Исправлена потенциальная ошибка сегментации при сравнении кортежей, состоящих из некоторых нетривиальных типов, таких, как кортежи. #2989
  • Исправлена возможная ошибка сегментации при выполнении некоторых запросов ON CLUSTER. Winter Zhang
  • Исправлена ошибка в функции arrayDistinct для элементов массива типа Nullable. #2845 #2937
  • Опция enable_optimize_predicate_expression теперь корректно работает с запросами вида SELECT *. Winter Zhang
  • Исправлено падение (segfault) при повторной инициализации сессии ZooKeeper. #2917
  • Устранена возможная блокировка при работе с ZooKeeper.
  • Исправлен ошибочный код для добавления вложенных структур данных в SummingMergeTree.
  • При выделении памяти для состояний агрегатных функций корректно учитывается выравнивание, что позволяет использовать операции, требующие выравнивания, при реализации состояний агрегатных функций. chenxing-xc

Исправления безопасности:

  • Безопасное использование источников данных ODBC. Взаимодействие с драйверами ODBC выполняется в отдельном процессе clickhouse-odbc-bridge. Ошибки во внешних драйверах ODBC больше не приводят к проблемам со стабильностью сервера или уязвимостям. #2828 #2879 #2886 #2893 #2921
  • Исправлена некорректная проверка пути к файлу в табличной функции catBoostPool. #2894
  • Содержимое системных таблиц (tables, databases, parts, columns, parts_columns, merges, mutations, replicas и replication_queue) фильтруется в соответствии с настроенным доступом пользователя к базам данных (allow_databases). Winter Zhang

Несовместимые изменения:

  • В запросах с JOIN символ звёздочки * разворачивается в список столбцов во всех таблицах в соответствии со стандартом SQL. Старое поведение можно вернуть, установив asterisk_left_columns_only в 1 на уровне пользовательской конфигурации.

Изменения сборки:

  • Большинство интеграционных тестов теперь можно запускать для отдельных коммитов.
  • Проверки стиля кода также можно запускать для отдельных коммитов.
  • Реализация memcpy корректно выбирается при сборке под CentOS7/Fedora. Etienne Champetier
  • При использовании clang для сборки добавлены некоторые предупреждения из -Weverything в дополнение к обычным -Wall -Wextra -Werror. #2957
  • При отладочной сборке используется отладочная опция jemalloc.
  • Интерфейс библиотеки для взаимодействия с ZooKeeper объявлен абстрактным. #2950

Релиз ClickHouse 18.10

Релиз ClickHouse 18.10.3, 2018-08-13

Новые возможности:

  • Для репликации можно использовать HTTPS. #2760
  • Добавлены функции murmurHash2_64, murmurHash3_32, murmurHash3_64 и murmurHash3_128 в дополнение к существующей murmurHash2_32. #2791
  • Поддержка типов Nullable в драйвере ODBC для ClickHouse (формат вывода ODBCDriver2). #2834
  • Поддержка UUID в ключевых столбцах.

Улучшения:

  • Кластеры могут быть удалены без перезапуска сервера при их удалении из конфигурационных файлов. #2777
  • Внешние словари могут быть удалены без перезапуска сервера при их удалении из конфигурационных файлов. #2779
  • Добавлена поддержка SETTINGS для табличного движка Kafka. Alexander Marshalov
  • Улучшения для типа данных UUID (пока не завершены). #2618
  • Поддержка пустых партиций после слияний в движках SummingMergeTree, CollapsingMergeTree и VersionedCollapsingMergeTree. #2815
  • Старые записи о завершённых мутациях удаляются (ALTER DELETE). #2784
  • Добавлена таблица system.merge_tree_settings. Kirill Shvakov
  • Таблица system.tables теперь содержит столбцы зависимостей: dependencies_database и dependencies_table. Winter Zhang
  • Добавлена опция конфигурации max_partition_size_to_drop. #2782
  • Добавлена опция output_format_json_escape_forward_slashes. Alexander Bocharov
  • Добавлена настройка max_fetch_partition_retries_count. #2831
  • Добавлена настройка prefer_localhost_replica для отключения предпочтения локальной реплики и перехода на локальную реплику без межпроцессного взаимодействия. #2832
  • Агрегатная функция quantileExact возвращает nan в случае агрегации по пустому набору значений типов Float32 или Float64. Sundy Li

Исправления ошибок:

  • Удалено ненужное экранирование параметров строки подключения для ODBC, что делало невозможным установление соединения. Эта ошибка возникала в версии 18.6.0.
  • Исправлена логика обработки команд REPLACE PARTITION в очереди репликации. Если для одного и того же раздела было две команды REPLACE, некорректная логика могла привести к тому, что одна из них оставалась в очереди репликации и не выполнялась. #2814
  • Исправлена ошибка слияния, когда все части данных были пустыми (части, сформированные из слияния или из ALTER DELETE, если все данные были удалены). Эта ошибка появилась в версии 18.1.0. #2930
  • Исправлена ошибка при конкурентном выполнении Set или Join. Amos Bird
  • Исправлена ошибка Block structure mismatch in UNION stream: different number of columns, возникавшая для запросов UNION ALL внутри подзапроса, если один из запросов SELECT содержал дублирующиеся имена столбцов. Winter Zhang
  • Исправлена утечка памяти при возникновении исключения при подключении к серверу MySQL.
  • Исправлен неверный код ответа clickhouse-client в случае ошибки запроса.
  • Исправлено некорректное поведение материализованных представлений, содержащих DISTINCT. #2795

Обратно несовместимые изменения

  • Удалена поддержка запросов CHECK TABLE для таблиц типа Distributed.

Изменения сборки:

  • Заменён аллокатор: теперь вместо tcmalloc используется jemalloc. В некоторых сценариях это увеличивает скорость до 20%. Однако есть запросы, которые замедлились до 20%. Потребление памяти в некоторых сценариях снижено примерно на 10%, улучшена стабильность. При высококонкурентных нагрузках использование CPU в пространстве пользователя и в системе показывает лишь незначительный рост. #2773
  • Используется libressl из подмодуля. #1983 #2807
  • Используется unixodbc из подмодуля. #2789
  • Используется mariadb-connector-c из подмодуля. #2785
  • В репозиторий добавлены файлы функциональных тестов, зависящие от доступности тестовых данных (пока без самих тестовых данных).

Релиз ClickHouse 18.6

Релиз ClickHouse 18.6.0, 2018-08-02

Новые возможности:

  • Добавлена поддержка выражений ON для синтаксиса JOIN ON: JOIN ON Expr([table.]column ...) = Expr([table.]column, ...) [AND Expr([table.]column, ...) = Expr([table.]column, ...) ...] Выражение должно представлять собой цепочку равенств, объединённых оператором AND. Каждая сторона равенства может быть произвольным выражением над столбцами одной из таблиц. Для правой таблицы поддерживается использование полностью квалифицированных имён столбцов (table.name, database.table.name, table_alias.name, subquery_alias.name). #2742
  • Для репликации можно включить HTTPS. #2760

Улучшения:

  • Сервер передаёт клиенту номер своей патч-версии. Данные о патч-версии доступны в system.processes и query_log. #2646

Релиз ClickHouse 18.5

Релиз ClickHouse 18.5.1, 2018-07-31

Новые возможности:

  • Добавлена хеш-функция murmurHash2_32 #2756.

Улучшения:

  • Теперь вы можете использовать атрибут from_env #2741 для установки значений в конфигурационных файлах из переменных окружения.
  • Добавлены регистронезависимые версии функций coalesce, ifNull и nullIf #2752.

Исправления ошибок:

  • Исправлена возможная ошибка при запуске реплики #2759.

Релиз ClickHouse 18.4

Релиз ClickHouse 18.4.0, 2018-07-28

Новые возможности:

  • Добавлены системные таблицы: formats, data_type_families, aggregate_function_combinators, table_functions, table_engines, collations #2721.
  • Добавлена возможность использовать табличную функцию вместо таблицы в качестве аргумента табличной функции remote или cluster #2708.
  • Поддержка аутентификации HTTP Basic в протоколе репликации #2727.
  • Функция has теперь позволяет искать числовое значение в массиве значений типа Enum Maxim Khrisanfov.
  • Поддержка добавления произвольных разделителей сообщений при чтении из Kafka Amos Bird.

Улучшения:

  • Запрос ALTER TABLE t DELETE WHERE не перезаписывает части данных, на которые не повлияло условие WHERE #2694.
  • Опция use_minimalistic_checksums_in_zookeeper для таблиц ReplicatedMergeTree включена по умолчанию. Этот параметр был добавлен в версии 1.1.54378 от 2018-04-16. Версии ниже 1.1.54378 больше не могут быть установлены.
  • Поддержка выполнения запросов KILL и OPTIMIZE с указанием ON CLUSTER Winter Zhang.

Исправления ошибок:

  • Исправлена ошибка Column ... is not under an aggregate function and not in GROUP BY для агрегации с выражением IN. Этот баг появился в версии 18.1.0. (bbdd780b)
  • Исправлена ошибка в агрегатной функции windowFunnel Winter Zhang.
  • Исправлена ошибка в агрегатной функции anyHeavy (a2101df2)
  • Исправлен сбой сервера при использовании агрегатной функции countArray().

Обратно несовместимые изменения:

  • Параметры для движка Kafka были изменены с Kafka(kafka_broker_list, kafka_topic_list, kafka_group_name, kafka_format[, kafka_schema, kafka_num_consumers]) на Kafka(kafka_broker_list, kafka_topic_list, kafka_group_name, kafka_format[, kafka_row_delimiter, kafka_schema, kafka_num_consumers]). Если ваши таблицы используют параметры kafka_schema или kafka_num_consumers, вам нужно вручную отредактировать файлы метаданных path/metadata/database/table.sql и добавить параметр kafka_row_delimiter со значением ''.

Релиз ClickHouse 18.1

Релиз ClickHouse 18.1.0, 2018-07-23

Новые возможности:

  • Поддержка запроса ALTER TABLE t DELETE WHERE для нереплицируемых таблиц MergeTree (#2634).
  • Поддержка произвольных типов для семейства агрегатных функций uniq* (#2010).
  • Поддержка произвольных типов в операторах сравнения (#2026).
  • Файл users.xml позволяет задавать маску подсети в формате 10.0.0.1/255.255.255.0. Это необходимо для использования масок для сетей IPv6 с нулями посередине (#2637).
  • Добавлена функция arrayDistinct (#2670).
  • Движок SummingMergeTree теперь может работать со столбцами типа AggregateFunction (Constantin S. Pan).

Улучшения:

  • Изменена схема нумерации версий релизов. Теперь первая часть содержит год релиза (н. э., часовой пояс Москвы, минус 2000), вторая часть содержит номер для существенных изменений (увеличивается для большинства релизов), а третья часть — это версия патча. Релизы по-прежнему сохраняют обратную совместимость, если иное не указано в журнале изменений.
  • Ускорены преобразования чисел с плавающей запятой в строку (Amos Bird).
  • Если некоторые строки были пропущены во время вставки из‑за ошибок парсинга (это возможно при включённых настройках input_allow_errors_num и input_allow_errors_ratio), количество пропущенных строк теперь записывается в лог сервера (Leonardo Cecchi).

Исправления ошибок:

  • Исправлена команда TRUNCATE для временных таблиц (Amos Bird).
  • Исправлена редкая взаимоблокировка в клиентской библиотеке ZooKeeper, которая возникала при сетевой ошибке во время чтения ответа (c315200).
  • Исправлена ошибка при CAST к типам Nullable (#1322).
  • Исправлен некорректный результат функции maxIntersection() при совпадении границ интервалов (Michael Furmur).
  • Исправлено некорректное преобразование цепочки выражений OR в аргументе функции (chenxing-xc).
  • Исправлено снижение производительности для запросов, содержащих выражения IN (subquery) внутри другого подзапроса (#2571).
  • Исправлена несовместимость между серверами с разными версиями в распределённых запросах, использующих функцию CAST, записанную не заглавными буквами (fe8c4d6).
  • Добавлено отсутствующее кавычение идентификаторов для запросов к внешней СУБД (#2635).

Обратно несовместимые изменения:

  • Преобразование строки, содержащей число ноль, к типу DateTime не работает. Пример: SELECT toDateTime('0'). По этой же причине в таблицах не работает DateTime DEFAULT '0', а также <null_value>0</null_value> в словарях. Решение: заменить 0 на 0000-00-00 00:00:00.

Релиз ClickHouse 1.1

Релиз ClickHouse 1.1.54394, 2018-07-12

Новые возможности:

  • Добавлена агрегатная функция histogram (Mikhail Surin).
  • Теперь OPTIMIZE TABLE ... FINAL можно использовать без указания партиций для ReplicatedMergeTree (Amos Bird).

Исправления ошибок:

  • Исправлена проблема с очень маленьким таймаутом для сокетов (одна секунда) на чтение и запись при отправке и загрузке реплицированных данных, из-за которой было невозможно загрузить крупные парты при нагрузке на сеть или диск (это приводило к циклическим попыткам загрузки партов). Эта ошибка возникала в версии 1.1.54388.
  • Исправлены проблемы при использовании chroot в ZooKeeper, если в таблицу вставлялись дублирующиеся блоки данных.
  • Функция has теперь корректно работает для массива с элементами Nullable (#2115).
  • Таблица system.tables теперь корректно работает при использовании в распределённых запросах. Столбцы metadata_modification_time и engine_full теперь не являются виртуальными. Исправлена ошибка, которая возникала, если из таблицы запрашивались только эти столбцы.
  • Исправлена работа пустой таблицы TinyLog после вставки пустого блока данных (#2563).
  • Таблица system.zookeeper работает, если значение узла в ZooKeeper равно NULL.

Релиз ClickHouse 1.1.54390, 2018-07-06

Новые возможности:

  • Запросы можно отправлять в формате multipart/form-data (в поле query), что полезно, если для обработки запроса также отправляются внешние данные (Olga Hvostikova).
  • Добавлена возможность включать или отключать обработку одиночных или двойных кавычек при чтении данных в формате CSV. Это можно настроить с помощью параметров format_csv_allow_single_quotes и format_csv_allow_double_quotes (Amos Bird).
  • Теперь OPTIMIZE TABLE ... FINAL можно использовать без указания партиции для нереплицированных вариантов MergeTree (Amos Bird).

Улучшения:

  • Повышена производительность, снижено потребление памяти и обеспечено корректное отслеживание потребления памяти при использовании оператора IN, когда мог быть использован индекс таблицы (#2584).
  • Удалена избыточная проверка контрольных сумм при добавлении парта данных. Это важно при большом количестве реплик, так как в таких случаях общее число проверок было равно N^2.
  • Добавлена поддержка аргументов Array(Tuple(...)) для функции arrayEnumerateUniq (#2573).
  • Добавлена поддержка Nullable для функции runningDifference (#2594).
  • Улучшена производительность анализа запросов при очень большом количестве выражений (#2572).
  • Ускорен выбор партов данных для слияния в таблицах ReplicatedMergeTree. Ускорено восстановление сессии ZooKeeper (#2597).
  • Файл format_version.txt для таблиц MergeTree пересоздаётся, если отсутствует, что имеет смысл, если ClickHouse запускается после копирования структуры директорий без файлов (Ciprian Hacman).

Исправления ошибок:

  • Исправлена ошибка при работе с ZooKeeper, из-за которой могло оказаться невозможным восстановить сессию и состояния таблиц readonly перед перезапуском сервера.
  • Исправлена ошибка при работе с ZooKeeper, из-за которой старые узлы могли не удаляться при обрыве сессии.
  • Исправлена ошибка в функции quantileTDigest для аргументов типа Float (эта ошибка была внесена в версии 1.1.54388) (Mikhail Surin).
  • Исправлена ошибка в индексе для таблиц MergeTree, если столбец первичного ключа находится внутри функции для преобразования типов между знаковыми и беззнаковыми целыми одного размера (#2603).
  • Исправлена ошибка сегментации, если используются macros, но они отсутствуют в конфигурационном файле (#2570).
  • Исправлено переключение на базу данных по умолчанию при повторном подключении клиента (#2583).
  • Исправлена ошибка, возникавшая при отключённой настройке use_index_for_in_with_subqueries.

Исправление уязвимости:

  • Отправка файлов больше невозможна при подключении к MySQL (LOAD DATA LOCAL INFILE).

ClickHouse Release 1.1.54388, 2018-06-28

Новые возможности:

  • Поддержка запроса ALTER TABLE t DELETE WHERE для реплицируемых таблиц. Добавлена таблица system.mutations для отслеживания прогресса запросов этого типа.
  • Поддержка запроса ALTER TABLE t [REPLACE|ATTACH] PARTITION для таблиц *MergeTree.
  • Поддержка запроса TRUNCATE TABLE (Winter Zhang)
  • Несколько новых запросов SYSTEM для реплицируемых таблиц (RESTART REPLICAS, SYNC REPLICA, [STOP|START] [MERGES|FETCHES|SENDS REPLICATED|REPLICATION QUEUES]).
  • Добавлена возможность записи в таблицу с движком MySQL и соответствующей табличной функцией (sundy-li).
  • Добавлена табличная функция url() и табличный движок URL (Alexander Sapin).
  • Добавлена агрегатная функция windowFunnel (sundy-li).
  • Новые функции startsWith и endsWith для строк (Vadim Plakhtinsky).
  • Табличная функция numbers() теперь позволяет указывать смещение (Winter Zhang).
  • Пароль для clickhouse-client можно вводить в интерактивном режиме.
  • Логи сервера теперь могут отправляться в syslog (Alexander Krasheninnikov).
  • Поддержка логирования в словарях с источником в виде разделяемой библиотеки (Alexander Sapin).
  • Поддержка пользовательских разделителей в CSV (Ivan Zhukov)
  • Добавлена настройка date_time_input_format. Если переключить эту настройку в значение 'best_effort', значения DateTime будут считываться в широком диапазоне форматов.
  • Добавлена утилита clickhouse-obfuscator для обфускации данных. Пример использования: публикация данных, используемых в тестах производительности.

Экспериментальные возможности:

  • Добавлена возможность вычислять аргументы and только там, где это необходимо (Anastasia Tsarkova)
  • JIT-компиляция в машинный код теперь доступна для некоторых выражений (pyos).

Исправления ошибок:

  • Дубликаты больше не появляются в запросах с DISTINCT и ORDER BY.
  • Запросы с ARRAY JOIN и arrayFilter больше не возвращают некорректный результат.
  • Исправлена ошибка при чтении столбца-массива из структуры Nested (#2066).
  • Исправлена ошибка при анализе запросов с предложением HAVING вида HAVING tuple IN (...).
  • Исправлена ошибка при анализе запросов с рекурсивными псевдонимами.
  • Исправлена ошибка при чтении из ReplacingMergeTree с условием в PREWHERE, которое отфильтровывает все строки (#2525).
  • Настройки пользовательского профиля не применялись при использовании сессий в HTTP-интерфейсе.
  • Исправлено применение настроек из параметров командной строки в clickhouse-local.
  • Клиентская библиотека ZooKeeper теперь использует таймаут сессии, полученный от сервера.
  • Исправлена ошибка в клиентской библиотеке ZooKeeper, когда клиент ожидал ответ сервера дольше, чем таймаут.
  • Исправлено отсечение частей для запросов с условиями по столбцам ключа партиционирования (#2342).
  • Слияния теперь возможны после CLEAR COLUMN IN PARTITION (#2315).
  • Исправлено сопоставление типов в табличной функции ODBC (sundy-li).
  • Исправлены сравнения типов для DateTime с часовым поясом и без него (Alexander Bocharov).
  • Исправлен синтаксический разбор и форматирование оператора CAST.
  • Исправлена вставка в материализованное представление для движка Distributed (Babacar Diassé).
  • Исправлена гонка при записи данных из движка Kafka в материализованные представления (Yangkuan Liu).
  • Исправлена SSRF-уязвимость в табличной функции remote().
  • Исправлено поведение выхода clickhouse-client в многострочном режиме (#2510).

Улучшения:

  • Фоновые задачи в реплицируемых таблицах теперь выполняются в пуле потоков, а не в отдельных потоках (Silviu Caragea).
  • Улучшена производительность сжатия LZ4.
  • Ускорен анализ запросов с большим количеством JOIN и подзапросов.
  • DNS-кэш теперь обновляется автоматически при слишком большом количестве сетевых ошибок.
  • Вставка в таблицу больше не выполняется, если вставка в одно из материализованных представлений невозможна из-за слишком большого количества частей.
  • Исправлено расхождение в счётчиках событий Query, SelectQuery и InsertQuery.
  • Допускаются выражения вида tuple IN (SELECT tuple), если типы кортежей совпадают.
  • Сервер с реплицируемыми таблицами может запускаться, даже если ZooKeeper не настроен.
  • При расчёте количества доступных ядер CPU теперь учитываются ограничения cgroups (Atri Sharma).
  • Добавлен chown для конфигурационных директорий в конфигурационном файле systemd (Mikhail Shiryaev).

Изменения сборки:

  • Для сборки может использоваться компилятор gcc8.
  • Добавлена возможность собирать llvm из подмодуля.
  • Версия библиотеки librdkafka обновлена до v0.11.4.
  • Добавлена возможность использовать системную библиотеку libcpuid. Версия библиотеки обновлена до 0.4.0.
  • Исправлена сборка с использованием библиотеки vectorclass (Babacar Diassé).
  • Cmake теперь по умолчанию генерирует файлы для ninja (как при использовании -G Ninja).
  • Добавлена возможность использовать библиотеку libtinfo вместо libtermcap (Georgy Kondratiev).
  • Исправлен конфликт заголовочного файла в Fedora Rawhide (#2520).

Изменения, нарушающие обратную совместимость:

  • Убрано экранирование в форматах Vertical и Pretty* и удалён формат VerticalRaw.
  • Если в распределённом запросе одновременно используются серверы версии 1.1.54388 (или новее) и серверы более старой версии, а запрос содержит выражение cast(x, 'Type') без ключевого слова AS и без написания слова cast прописными буквами, будет сгенерировано исключение с сообщением вида Not found column cast(0, 'UInt8') in block. Решение: обновить серверы во всём кластере.

Релиз ClickHouse 1.1.54385, 2018-06-01

Исправления ошибок:

  • Исправлена ошибка, в некоторых случаях приводившая к блокировке операций ZooKeeper.

Релиз ClickHouse 1.1.54383, 2018-05-22

Исправления ошибок:

  • Исправлено замедление очереди репликации, если у таблицы много реплик.

Релиз ClickHouse 1.1.54381, 2018-05-14

Исправления ошибок:

  • Исправлена утечка узлов в ZooKeeper, когда ClickHouse теряет соединение с сервером ZooKeeper.

Релиз ClickHouse 1.1.54380, 2018-04-21

Новые возможности:

  • Добавлена табличная функция file(path, format, structure). Пример чтения байт из /dev/urandom: ln -s /dev/urandom /var/lib/clickhouse/user_files/random``clickhouse-client -q "SELECT * FROM file('random', 'RowBinary', 'd UInt8') LIMIT 10".

Улучшения:

  • Подзапросы могут быть заключены в скобки () для повышения читаемости запроса. Например: (SELECT 1) UNION ALL (SELECT 1).
  • Простые запросы SELECT к таблице system.processes не учитываются в лимите max_concurrent_queries.

Исправления ошибок:

  • Исправлено некорректное поведение оператора IN при выборке из MATERIALIZED VIEW.
  • Исправлена некорректная фильтрация по индексу партиций в выражениях вида partition_key_column IN (...).
  • Исправлена невозможность выполнить запрос OPTIMIZE на реплике, не являющейся лидером, если над таблицей выполнялась операция REANAME.
  • Исправлена ошибка авторизации при выполнении запросов OPTIMIZE или ALTER на реплике, не являющейся лидером.
  • Исправлено «зависание» KILL QUERY.
  • Исправлена ошибка в клиентской библиотеке ZooKeeper, которая приводила к потере наблюдателей (watches), зависанию распределённой очереди DDL и замедлению очереди репликации, если в конфигурации ZooKeeper используется непустой префикс chroot.

Обратная несовместимость:

  • Удалена поддержка выражений вида (a, b) IN (SELECT (a, b)) (можно использовать эквивалентное выражение (a, b) IN (SELECT a, b)). В предыдущих релизах такие выражения приводили к недетерминированной фильтрации по условию WHERE или вызывали ошибки.

Релиз ClickHouse 1.1.54378, 2018-04-16

Новые возможности:

  • Уровень логирования можно изменить без перезапуска сервера.
  • Добавлен запрос SHOW CREATE DATABASE.
  • Параметр query_id теперь можно передавать в clickhouse-client (elBroom).
  • Новая настройка: max_network_bandwidth_for_all_users.
  • Добавлена поддержка ALTER TABLE ... PARTITION ... для MATERIALIZED VIEW.
  • В системной таблице добавлена информация о размере частей данных в несжатом виде.
  • Поддержка межсерверного шифрования для распределённых таблиц (<secure>1</secure> в конфигурации реплики в <remote_servers>).
  • Настройка на уровне таблицы для семейства ReplicatedMergeTree с целью минимизировать объём данных, хранимых в ZooKeeper: use_minimalistic_checksums_in_zookeeper = 1
  • Настройка приглашения clickhouse-client. По умолчанию в приглашении теперь выводятся имена серверов. Отображаемое имя сервера можно изменить. Оно также отправляется в HTTP‑заголовке X-ClickHouse-Display-Name (Kirill Shvakov).
  • Для движка Kafka можно указать несколько topics, разделённых запятыми (Tobias Adamson).
  • Когда запрос останавливается с помощью KILL QUERY или replace_running_query, клиент получает исключение Query was canceled вместо неполного результата.

Improvements:

  • Запросы 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 (谢磊).

Bug Fixes:

  • Исправлена ошибка с 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 теперь корректно работает при суммировании вложенных структур данных с составным ключом.
  • Устранена потенциальная гонка при выборе лидера для таблиц ReplicatedMergeTree.

Build Changes:

  • Сборка поддерживает 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. Пакеты со старыми именами по-прежнему доступны в репозиториях для обратной совместимости.

Backward Incompatible Changes:

  • Убрана особая интерпретация выражения IN, если слева указан массив. Ранее выражение arr IN (set) интерпретировалось как «по крайней мере один элемент arr принадлежит множеству set». Чтобы получить такое же поведение в новой версии, используйте arrayExists(x -> x IN (set), arr).
  • Отключено некорректное использование опции сокета SO_REUSEPORT, которая была ошибочно включена по умолчанию в библиотеке Poco. Обратите внимание, что в Linux больше нет причин одновременно указывать адреса :: и 0.0.0.0 для прослушивания — используйте только ::, что позволяет принимать соединения как по IPv4, так и по IPv6 (при настройках ядра по умолчанию). Вы также можете вернуть поведение из предыдущих версий, указав <listen_reuse_port>1</listen_reuse_port> в конфигурации.

ClickHouse Release 1.1.54370, 2018-03-16

New Features:

  • Добавлена таблица system.macros и автоматическое обновление макросов при изменении конфигурационного файла.
  • Добавлен запрос SYSTEM RELOAD CONFIG.
  • Добавлена агрегатная функция maxIntersections(left_col, right_col), которая возвращает максимальное количество одновременно пересекающихся интервалов [left; right]. Функция maxIntersectionsPosition(left, right) возвращает начало «максимального» интервала. (Michael Furmur).

Improvements:

  • При вставке данных в Replicated-таблицу выполняется меньше запросов к ZooKeeper (и большинство пользовательских ошибок исчезло из лога ZooKeeper).
  • Добавлена возможность создавать псевдонимы для наборов данных. Пример: WITH (1, 2, 3) AS set SELECT number IN set FROM system.numbers LIMIT 10.

Bug Fixes:

  • Исправлена ошибка Illegal PREWHERE при чтении из Merge-таблиц для Distributed-таблиц.
  • Добавлены исправления, которые позволяют запускать clickhouse-server в Docker-контейнерах, использующих только IPv4.
  • Исправлена гонка при чтении из системной таблицы system.parts_columns.
  • Убрано двойное буферизование при синхронной вставке в таблицу Distributed, которое могло приводить к тайм-ауту соединения.
  • Исправлена ошибка, из-за которой ожидание недоступной реплики перед началом выполнения запроса SELECT могло быть чрезмерно долгим.
  • Исправлены некорректные даты в таблице system.parts.
  • Исправлена ошибка, из-за которой было невозможно вставлять данные в Replicated-таблицу, если chroot был непустым в конфигурации кластера ZooKeeper.
  • Исправлен алгоритм вертикального слияния для таблицы с пустым 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 сообщения Not found column ... in block.

ClickHouse Release 1.1.54362, 2018-03-11

New Features:

  • Агрегирование без GROUP BY для пустого набора (например, SELECT count(*) FROM table WHERE 0) теперь возвращает результат с одной строкой, в которой агрегатные функции принимают значение NULL, в соответствии со стандартом 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 теперь также отображает временные таблицы. В system.tables добавлены временные таблицы и столбец is_temporary (zhang2014).
  • Добавлены запросы DROP TEMPORARY TABLE и EXISTS TEMPORARY TABLE (zhang2014).
  • Поддержка SHOW CREATE TABLE для временных таблиц (zhang2014).
  • Добавлен параметр конфигурации system_profile для управления настройками, используемыми внутренними процессами.
  • Поддержка загрузки object_id в качестве атрибута в словари MongoDB (Pavel Litvinenko).
  • Интерпретация null как значения по умолчанию при загрузке данных во внешний словарь из источника MongoDB (Pavel Litvinenko).
  • Чтение значений DateTime в формате Values из метки времени Unix без одинарных кавычек.
  • Отказоустойчивость поддерживается в табличных функциях типа remote на случай, когда на некоторых репликах отсутствует запрошенная таблица.
  • Параметры конфигурации можно переопределять из командной строки при запуске clickhouse-server. Пример: clickhouse-server -- --logger.level=information.
  • Реализована функция empty для аргумента типа FixedString: функция возвращает 1, если строка полностью состоит из нулевых байтов (zhang2014).
  • Добавлен параметр конфигурации listen_try, позволяющий продолжать работу при прослушивании хотя бы одного из адресов, даже если некоторые адреса недоступны для прослушивания (полезно для систем с отключённой поддержкой IPv4 или IPv6).
  • Добавлен табличный движок VersionedCollapsingMergeTree.
  • Поддержка строк и произвольных числовых типов для источника словаря library.
  • Таблицы MergeTree можно использовать без первичного ключа (при этом необходимо указать ORDER BY tuple()).
  • Тип Nullable может быть преобразован (CAST) в тип, не являющийся Nullable, если аргумент не равен NULL.
  • Оператор RENAME TABLE можно применять к VIEW.
  • Добавлена функция throwIf.
  • Добавлен параметр odbc_default_field_size, позволяющий увеличить максимальный размер значения, загружаемого из источника ODBC (по умолчанию — 1024).
  • В таблице system.processes и у оператора SHOW PROCESSLIST теперь есть столбцы is_cancelled и peak_memory_usage.

Улучшения:

  • Ограничения и квоты на результат больше не применяются к промежуточным данным для запросов INSERT SELECT или для подзапросов SELECT.
  • Сокращено количество ложных срабатываний force_restore_data при проверке состояния таблиц Replicated при старте сервера.
  • Добавлена опция 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).
  • Исправлена небольшая регрессия производительности в функциях, использующих регулярные выражения.
  • Исправлена регрессия производительности при создании многомерных массивов из сложных выражений.
  • Исправлена ошибка, которая могла приводить к появлению лишней секции FORMAT в .sql‑файле с метаданными.
  • Исправлена ошибка, из‑за которой лимит max_table_size_to_drop применялся при попытке удалить MATERIALIZED VIEW, ссылающееся на явно указанную таблицу.
  • Исправлена несовместимость со старыми клиентами (старым клиентам иногда отправлялись данные типа DateTime('timezone'), который они не поддерживают).
  • Исправлена ошибка при чтении элементов столбца Nested у структур, добавленных с помощью ALTER, но пустых для старых партиций, когда условия по этим столбцам были перенесены в PREWHERE.
  • Исправлена ошибка при фильтрации таблиц по виртуальным столбцам _table в запросах к таблицам Merge.
  • Исправлена ошибка при использовании столбцов ALIAS в таблицах Distributed.
  • Исправлена ошибка, из‑за которой динамическая компиляция была невозможна для запросов с агрегатными функциями из семейства quantile.
  • Исправлено состояние гонки в конвейере выполнения запросов, возникавшее в очень редких случаях при использовании таблиц Merge с большим количеством таблиц, а также при использовании подзапросов GLOBAL.
  • Исправлен сбой при передаче массивов разного размера в функцию arrayReduce при использовании агрегатных функций от нескольких аргументов.
  • Запрещено использование запросов с UNION ALL в MATERIALIZED VIEW.
  • Исправлена ошибка при инициализации системной таблицы part_log при запуске сервера (по умолчанию part_log отключена).

Изменения, нарушающие обратную совместимость:

  • Опция distributed_ddl_allow_replicated_alter удалена. Это поведение теперь включено по умолчанию.
  • Настройка strict_insert_defaults удалена. Если вы использовали эту функциональность, напишите по адресу feedback@clickhouse.com.
  • Удалён движок UnsortedMergeTree.

ClickHouse Release 1.1.54343, 2018-02-05

  • Добавлена поддержка макросов для задания имён кластеров в распределённых DDL-запросах и конструкторах таблиц с движком Distributed: CREATE TABLE distr ON CLUSTER '{cluster}' (...) ENGINE = Distributed('{cluster}', 'db', 'table').
  • Теперь запросы вида SELECT ... FROM table WHERE expr IN (subquery) обрабатываются с использованием индекса таблицы table.
  • Улучшена обработка дубликатов при вставке в таблицы с движком Replicated, чтобы они больше не замедляли выполнение очереди репликации.

ClickHouse Release 1.1.54342, 2018-01-22

Этот релиз содержит исправления ошибок для предыдущего релиза 1.1.54337:

  • Исправлена регрессия в 1.1.54337: если пользователь по умолчанию имеет доступ только для чтения, сервер отказывается запускаться с сообщением 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 the data on another replicas).
  • Исправлена ошибка, которая могла приводить к несогласованным слияниям после запроса OPTIMIZE для таблиц с движком Replicated (её можно увидеть по сообщениям лога Part ... intersects the previous part).
  • Таблицы с движком Buffer теперь корректно работают, когда в целевой таблице присутствуют столбцы MATERIALIZED (автор — zhang2014).
  • Исправлена ошибка в реализации NULL.

ClickHouse Release 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('Asia/Istanbul'). Когда часовые пояса указываются в функциях для аргументов типа DateTime, возвращаемый тип будет учитывать часовой пояс, и значение будет отображаться ожидаемым образом.
  • Добавлены функции toTimeZone, timeDiff, toQuarter, toRelativeQuarterNum. Функции toRelativeHour/toRelativeMinute/toRelativeSecond могут принимать значение типа 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 для доступа к удалённым базам данных. Эта функциональность находится на стадии бета-тестирования.
  • Добавлена возможность передавать аргумент типа AggregateFunction в агрегатную функцию groupArray (что позволяет создавать массив состояний некоторой агрегатной функции).
  • Убраны ограничения на различные комбинации комбинаторов агрегатных функций. Например, теперь можно использовать агрегатные функции 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).
  • Добавлена поддержка использования нескольких потребителей с движком Kafka. Расширены параметры конфигурации для Kafka (Marek Vavruša).
  • Добавлены функции intExp3 и intExp4.
  • Добавлена агрегатная функция sumKahan.
  • Добавлено семейство функций to*Number*OrNull, где Number — это числовой тип.
  • Добавлена поддержка операторов WITH для запроса INSERT SELECT (автор: zhang2014).
  • Добавлены настройки: http_connection_timeout, http_send_timeout, http_receive_timeout. В частности, эти настройки используются для загрузки частей данных при репликации. Изменение этих настроек позволяет ускорить переключение при отказе (failover), если сеть перегружена.
  • Добавлена поддержка ALTER для таблиц типа Null (Anastasiya Tsarkova).
  • Функция reinterpretAsString расширена для всех типов данных, которые хранятся в памяти непрерывным участком.
  • Добавлен параметр --silent для инструмента clickhouse-local. Он подавляет вывод информации о выполнении запроса в 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 или DETACH PARTITION. В предыдущей версии удаление раздела и повторная вставка тех же данных не работали, потому что вставленные блоки считались дубликатами.
  • Исправлена ошибка, которая могла приводить к некорректной интерпретации предложения WHERE для запросов CREATE MATERIALIZED VIEW с POPULATE.
  • Исправлена ошибка при использовании параметра root_path в конфигурации zookeeper_servers.
  • Исправлены неожиданные результаты при передаче аргумента Date в toStartOfDay.
  • Исправлены функции addMonths и subtractMonths, а также арифметика для INTERVAL n MONTH в случаях, когда результат относится к предыдущему году.
  • Добавлена отсутствовавшая поддержка типа данных UUID для агрегатных функций DISTINCT, JOIN, uniq и внешних словарей (Evgeniy Ivanov). Поддержка 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 в общем случае.
  • Добавлена отсутствовавшая проверка на равенство размеров массивов в аргументах n-арных вариантов агрегатных функций с комбинатором -Array.
  • Исправлена ошибка в --pager для clickhouse-client (автор: ks1322).
  • Исправлена точность функции exp10.
  • Исправлено поведение функции visitParamExtract для лучшего соответствия документации.
  • Исправлен сбой при указании некорректных типов данных.
  • Исправлено поведение DISTINCT в случае, когда все столбцы являются константами.
  • Исправлено форматирование запроса в случае использования функции tupleElement со сложным константным выражением в качестве индекса элемента кортежа.
  • Исправлена ошибка в таблицах Dictionary для словарей range_hashed.
  • Исправлена ошибка, приводящая к избыточным строкам в результате FULL и RIGHT JOIN (Amos Bird).
  • Исправлен сбой сервера при создании и удалении временных файлов в директориях config.d во время перезагрузки конфигурации.
  • Исправлен запрос SYSTEM DROP DNS CACHE: кэш очищался, но адреса узлов кластера не обновлялись.
  • Исправлено поведение MATERIALIZED VIEW после выполнения DETACH TABLE для базовой таблицы представления (Marek Vavruša).

Улучшения сборки:

  • Для сборки используется утилита pbuilder. Процесс сборки почти полностью независим от окружения хоста сборки.
  • Одна и та же сборка используется для разных версий ОС. Пакеты и бинарные файлы сделаны совместимыми с широким спектром систем Linux.
  • Добавлен пакет clickhouse-test. Его можно использовать для запуска функциональных тестов.
  • Архив с исходным кодом теперь можно публиковать в репозиторий. Он может быть использован для воспроизведения сборки без использования GitHub.
  • Добавлена ограниченная интеграция с Travis CI. Из-за ограничений по времени сборки в Travis тестируется только debug-сборка и запускается ограниченное подмножество тестов.
  • Добавлена поддержка Cap'n'Proto в сборке по умолчанию.
  • Изменён формат исходников документации с Restricted Text на Markdown.
  • Добавлена поддержка systemd (Vladimir Smirnov). По умолчанию она отключена из-за несовместимости с некоторыми образами ОС и может быть включена вручную.
  • Для динамической генерации кода clang и lld встраиваются в бинарный файл clickhouse. Их также можно вызывать как clickhouse clang и clickhouse lld.
  • Удалено использование расширений GNU в коде. Включена опция -Wextra. При сборке с clang по умолчанию используется libc++ вместо libstdc++.
  • Выделены библиотеки clickhouse_parsers и clickhouse_common_io для ускорения сборки различных утилит.

Несовместимые изменения:

  • Формат меток в таблицах типа Log, содержащих столбцы Nullable, изменён несовместимым с предыдущими версиями образом. Если у вас есть такие таблицы, вы должны конвертировать их в тип TinyLog перед запуском новой версии сервера. Для этого замените ENGINE = Log на ENGINE = TinyLog в соответствующем .sql-файле в директории metadata. Если в вашей таблице нет столбцов Nullable или тип вашей таблицы не Log, то вам не нужно ничего делать.
  • Удалена настройка experimental_allow_extended_storage_definition_syntax. Теперь эта возможность включена по умолчанию.
  • Функция runningIncome переименована в runningDifferenceStartingWithFirstvalue, чтобы избежать путаницы.
  • Удалён синтаксис FROM ARRAY JOIN arr, когда ARRAY JOIN указывается непосредственно после FROM без таблицы (Amos Bird).
  • Удалён формат BlockTabSeparated, который использовался исключительно в демонстрационных целях.
  • Изменён формат состояния для агрегатных функций varSamp, varPop, stddevSamp, stddevPop, covarSamp, covarPop, corr. Если вы сохраняли состояния этих агрегатных функций в таблицах (используя тип данных AggregateFunction или материализованные представления с соответствующими состояниями), пожалуйста, напишите на feedback@clickhouse.com.
  • В предыдущих версиях сервера существовала недокументированная возможность: если агрегатная функция зависит от параметров, её всё равно можно было указывать без параметров в типе данных AggregateFunction. Пример: AggregateFunction(quantiles, UInt64) вместо AggregateFunction(quantiles(0.5, 0.9), UInt64). Эта возможность была утрачена. Хотя она и была недокументированной, мы планируем снова поддержать её в будущих релизах.
  • Типы данных Enum не могут использоваться в агрегатных функциях min/max. Эта возможность будет возвращена в следующем релизе.

Обратите внимание при обновлении:

  • При поочерёдном обновлении (rolling update) кластера в момент, когда часть реплик работает на старой версии ClickHouse, а часть — на новой, репликация временно останавливается и в логе появляется сообщение unknown parameter 'shard'. Репликация продолжится после обновления всех реплик кластера.
  • Если на серверах кластера запущены разные версии ClickHouse, возможно, что распределённые запросы, использующие следующие функции, будут возвращать некорректные результаты: varSamp, varPop, stddevSamp, stddevPop, covarSamp, covarPop, corr. Необходимо обновить все узлы кластера.

Журнал изменений за 2017 год