Clickhouse 24.7: главные новинки свежего релиза

обновления ClickHouse, курсы ClickHouse для дата-инженера, инженерия данных примеры курсы обучение, DWH ClickHouse, Школа Больших Данных Учебный Центр Коммерсант

Новая логика дедупликации данных, ограничения работы с матпредставлениями, дополнительные SQL-функции и улучшения производительности ClickHouse 24.7: краткий обзор ключевых особенностей июльского выпуска.

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

30 июля 2024 года вышел очередной релиз ClickHouse, в котором довольно много изменений, несовместимых с прошлыми версиями. В частности, в реплицированных базах данных теперь нельзя создать материализованное представление с табличным движком  ReplicatedMergeTree с заполнением данных при его создании. Это означает, что запрос

CREATE MATERIALIZED VIEW ... ENGINE ReplicatedMergeTree POPULATE AS SELECT ...

будет выдавать ошибку.
Также для материализованных представлений изменен принцип дедупликации данных. Теперь при параллельной вставке данных с разделением на 2 или более блоков, эти блоки не считаются дубликатами. Аналогичное замечание справедливо и для одинаковых блоков данных в целевой таблице материализованного представления, поступающих из разных материализованных представлений: теперь они не дедуплицируются. Это реализовано через улучшение аннотации фрагментов на уровне конвейера. В новой версии Clickhouse каждый фрагмент может иметь несколько прикрепленных структур с базовым классом ChunkInfo, которые отличаются производным типом. Токен дедупликации для каждого фрагмента записывается как TokenInfo (производный класс от ChunkInfo) с SetInitialTokenTransform. После этого токен может быть обновлен. Начальное значение для TokenInfo берется либо из настройки insert_deduplication_token, либо вычисляется как хэш из вставленных данных. Чтобы различать одинаковые блоки, которые не должны быть дедуплицированы, TokenInfo обновляется более подробной информацией об источнике данных, например, дополняется именами материализованных представлений по пути к таблице.
Кроме того, клиент clickhouse-keeper, сервис репликации и координации распределенных DDL-запросов, в новой версии принимает только пути в строковых литералах, т.е., их теперь надо заключать в одинарные кавычки. А еще ClickHouse Keeper может использовать внутреннее хранилище на диске, что повышает его надежность и производительность. Эта функция пока имеет статус экспериментальной.

Также исправлена опечатка: метрика KeeperOutstandingRequets переименована в KeeperOutstandingRequests. Из таблицы системных функции system.functions, которая содержит  информацию об обычных и агрегатных функциях, удалено поле is_deterministic поскольку было изначально реализовано некорректно.

Функция tuple, используемая для создания кортежей, теперь будет строить именованные кортежи в запросе, что управляется конфигурацией enable_named_columns_in_function_tuple. А функция tupleNames позволит извлекать имена кортежей.

Из новых фичей стоит отметить поддержку соединения последовательностей по нечеткому совпадению (ASOF JOIN) в алгоритме full_sorting_join и JWT-аутентификации в клиенте, что доступно только в ClickHouse Cloud. Еще добавлены SQL-функции changeYear, changeMonth, changeDay, changeHour, changeMinute и changeSecond, которые позволяют легко и быстро изменить дату и время. Например, запрос

SELECT changeMonth(toDate('2024-07-14'), 8)

вернет дату 2024-08-14.

В ClickHouse 24.7 появилась новая агрегатная функция groupConcat. Она работает аналогично arrayStringConcat(groupArray(column), ‘,’) и может принимать 2 параметра: разделитель строк и количество элементов для обработки.

Также внедрены скрипты запуска, которые позволяют выполнять предварительно настроенные запросы на этапе запуска. Для работы с файлами формата Parquet добавлен новый параметр для отключения/включения записи индекса страниц. А в табличной функции file подстановочный знак * теперь добавляется автоматически в конец пути к каталогу.

Еще добавлены системные таблицы с основной информацией обо всех отдельных таблицах и system.error_log, содержащий историю значений ошибок из таблицы system.errors, периодически сбрасываемую на диск. Наконец, для управления уровнем логирования в консоли в конфигурацию сервера добавлен параметр logger.console_log_level.

С точки зрения администрирования интересными новыми функциями стала поддержка хранилища AzureQueue и дополнительные конфигурации клиента. В частности, для клиента в неинтерактивном режиме добавлена  опция —memory-usage, а также реализован интерактивный клиент для clickhouse-disks с добавлением локального диска из локального каталога. Еще в конфигурации клиента теперь поддерживается конфигурация accept_invalid_certificate, позволяющая клиенту подключаться по защищенному TCP-соединению к серверу, работающему с самоподписанным сертификатом. Это может использоваться как сокращение для openSSL-настроек клиента verificationMode=none и invalidCertificateHandler.name=AcceptCertificateHandler.

Экспериментальные функции и улучшения Clickhouse 24.7

Отдельно стоит отметить экспериментальные функции свежего релиза ClickHouse, направленные на улучшение производительности, надежности и гибкости, особенно в работе с новыми типами данных и распределенной обработкой. В частности, изменена двоичная сериализация типа данных Variant, который до сих пор считается экспериментальным. Для экономии пространства введен compact-режим, чтобы избежать многократной записи одного и того же дискриминатора, если в гранулах (группах строк) используются только один вариант или значения NULL. Использованием compact-режима управляет настройка use_compact_variant_discriminators_serialization, которая включена по умолчанию.

Чтобы эффективно использовать параллельные реплики с пользовательским ключом в MergeTree-таблицах, добавлена поддержка cluster_for_parallel_replicas. Это нововведение направлено на улучшение производительности и масштабируемости ClickHouse при работе с большими объемами данных.

К довольно значимым улучшениям можно отнести измененный алгоритм преобразования целого числа в строку. Теперь эта операция будет выполняться намного быстрее благодаря использованию модифицированного алгоритма jeaiii/itoa вместо amdn/itoa. Для оптимизации работы с хэш-таблицами, созданными алгоритмом parallel_hash при соединении, их размеры теперь собираются и кэшируются, чтобы использоваться в последующих выполнениях запросов.

Буферизация запросов с первичным ключом ORDER BY и условием WHERE с высокой селективностью позволит повысить их производительность. Использование буферной памяти запросом контролируется настройкой read_in_order_use_buffering (включено по умолчанию). А оптимизация плана запроса с оператором LIMIT позволяет более эффективно обрабатывать запросы, содержащие ограничение на количество возвращаемых строк.

Чтобы снизить использование памяти, первичный индекс устаревших частей таблицы будет позволит на диск. Это особенно важно для систем с ограниченными ресурсами памяти и снижает вероятность OOM-ошибок, связанных с ее нехваткой.

Наконец, в новом релизе Clickhouse исправлено множество ошибок. Например, реализована проверка циклических зависимостей в запросах CREATE/REPLACE/RENAME/EXCHANGE и выдача исключения, если есть циклическая зависимость. Ранее такие циклические зависимости могли приводить к взаимоблокировке во время запуска сервера. Также исправлены некоторые ошибки в создании зависимостей.

Об новинках релиза 24.8 читайте в нашей новой статье.

Освойте использование ClickHouse для аналитики больших данных на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:

Источники

  1. https://github.com/ClickHouse/ClickHouse/blob/master/CHANGELOG.md#247
  2. https://presentations.clickhouse.com/release_24.7/
Я даю свое согласие на обработку персональных данных и соглашаюсь с политикой конфиденциальности.
Поиск по сайту