4 октября 2024 года вышел очередной релиз ClickHouse. Знакомимся с его самыми интересными особенностями: добавление строк в обновляемые материализованные представления, агрегатные функции для типов данных JSON и Dynamic, поддержка заголовков HTTP-ответов, автозамена строк с overlay-командами и другие новинки выпуска 24.9.
Обновляемые материализованные представления
Начнем с наиболее значимой новой функции ClickHouse 24.9: APPEND для обновляемых материализованных представлений. Обновляемые материализованные представления (Refreshable Materialized Views) в этой колоночной СУБД похожи на материализованные представления в классических OLTP-хранилищах. Они сохраняют результат указанного запроса для быстрого извлечения и сокращая количество многократного выполнения ресурсоемких запросов. В отличие от инкрементальных материализованных представлений ClickHouse, обновляемым в режиме реального времени по мере поступления данных в таблицу, на которой они основаны, обновляемые материализованные представления требуют периодического выполнения запроса по всему набору данных. Этот набор результатов должен быть теоретически меньше исходного набора данных, что позволяет последующему запросу выполняться быстрее.
С точки зрения масштабирования, инкрементные материализованные представления ClickHouse намного эффективнее обновляемых материализованных представлений, особенно в случаях, когда необходимо выполнить агрегацию по одной таблице. Вычисляя агрегацию только по каждому блоку данных по мере его вставки и объединяя инкрементные состояния в итоговой таблице, запрос всегда выполняется только на подмножестве данных. Это масштабируется до петабайт и обычно является предпочтительным методом. Однако, иногда обновления в реальном времени не нужны. Например, нужно регулярно выполнять полное перевычисление представления по всему набору данных, поскольку оно использует сложное соединение, которое несовместимо с инкрементальным подходом. Обновляемые материализованные представления могут использоваться для запуска пакетных процессов, выполняющих такие задачи, как денормализация данных. Между обновляемыми материализованными представлениями можно организовать зависимости, чтобы одно представление выполнялось только после другого. Это пригодится дата-инженеру для замены запланированных рабочих процессов или простых DAG, таких как задание dbt .
Пока Refreshable Materialized Views считается экспериментальной функцией ClickHouse. В выпуске 24.9 к ней добавлена поддержка APPEND, когда вместо замены всего представления в конец таблицы добавляются новые строки. Это может пригодится, когда нужно делать снимки значений в определенный момент времени.
Другие новинки ClickHouse 24.9
Еще одной важной новинкой релиза 24.9 стала поддержка агрегатных функций для типов данных JSON и Dynamic, добавленных в прошлом выпуске, о чем мы писали здесь. Например, функция distinctJSONPaths возвращает отдельные пути JSON, а distinctDynamicTypes возвращает различные типы для Dynamic-столбцов.
Еще одна новая возможность для работы с таблицами — явно ограничить запрос DELETE указанным разделом. Это позволяет избежать копирования метаданных частей для несвязанных разделов, например:
DELETE FROM test IN PARTITION 202409 WHERE data LIKE '%trash%'
Это запрос удаляет все строки из раздела 202409 таблицы test, в которых в столбце data присутствует подстрока trash.
При интеграции с внешними ресурсами полезно получать заголовки HTTP-ответов. Теперь это можно сделать благодаря виртуальному столбцу _headers в SELECT-запросе FROM url. Результат возвращает словарь заголовков HTTP-ответов при запросе удаленного сервера. Протестируем эту функцию на Clickhouse в открытой песочнице. Например, запрос к конечной точке моего проекта интернет-магазина на платформе Hasura, доступной для GET-запроса без аутентификационных данных, возвращает такой результат:
Дальше с этим можно поработать, например, чтобы получить данные о товарах и их производителях. Для этого нужно немного преобразовать SQL-запрос Clickhouse:
WITH row1 AS ( SELECT product.1 AS product_id, product.2 AS product_name, product.3 AS product_price, product.4 AS provider_id, product.5.1 AS address, product.5.2 AS email, product.5.3 AS company_name, product.5.4 AS phone_number, product.6 AS quantity FROM url('https://anna-ishop-mvp.hasura.app/api/rest/product') ) SELECT * FROM row1 FORMAT Vertical
Наконец, еще одной полезной функцией для обработки текстовых данных в релизе 24.9 стала overlay. Она позволяет заменить фрагмент одной строки на другую строку. Надо указать начальную строку, строку замены, а затем индекс, с которого начинать замену, и сколько символов заменить. Например, заменим слово «Проверка» на слово «Результат» во фразе «Проверка функции замены строки»:
SELECT overlay('Проверка функции замены строки', 'Результат', 1, 16)
Функция overlay заменяет часть исходной строки, начиная с позиции 1 и длиной 16 символов включительно, меняя строку «Проверка» на строку «Результат».
Разумеется, это не все новинки свежего релиза самой популярной колоночной СУБД. Подробнее узнать об этих и других возможностях ClickHouse вы сможете на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:
Источники