BigQuery против ClickHouse Cloud: эквивалентные и различные концепции
Организация ресурсов
Способ организации ресурсов в ClickHouse Cloud схож с иерархией ресурсов BigQuery. Мы описываем конкретные различия ниже на основе следующей схемы, показывающей иерархию ресурсов ClickHouse Cloud:

Организации
Аналогично BigQuery, организации являются корневыми узлами в иерархии ресурсов ClickHouse Cloud. Первый пользователь, которого вы настраиваете в своем аккаунте ClickHouse Cloud, автоматически назначается организации, принадлежащей этому пользователю. Пользователь может приглашать других пользователей в организацию.
Проекты BigQuery против Сервисов ClickHouse Cloud
В рамках организаций вы можете создавать сервисы, которые свободно эквивалентны проектам BigQuery, поскольку хранящиеся данные в ClickHouse Cloud ассоциируются с сервисом. В ClickHouse Cloud доступны несколько типов сервисов. Каждый сервис ClickHouse Cloud развертывается в конкретном регионе и включает в себя:
- Группу вычислительных узлов (в настоящее время 2 узла для сервиса уровня разработки и 3 для сервиса уровня производства). Для этих узлов ClickHouse Cloud поддерживает вертикальное и горизонтальное масштабирование, как вручную, так и автоматически.
- Папку объектного хранилища, где сервис хранит все данные.
- Конечную точку (или несколько конечных точек, созданных через интерфейс ClickHouse Cloud UI) - URL сервиса, который вы используете для подключения к сервису (например,
https://dv2fzne24g.us-east-1.aws.clickhouse.cloud:8443
).
Наборы данных BigQuery против Баз данных ClickHouse Cloud
ClickHouse логически группирует таблицы в базы данных. Как и наборы данных BigQuery, базы данных ClickHouse являются логическими контейнерами, которые организуют и контролируют доступ к данным таблиц.
Папки BigQuery
На данный момент ClickHouse Cloud не имеет концепции, эквивалентной папкам BigQuery.
Резервирование слотов и Квоты BigQuery
Аналогично резервированию слотов BigQuery, вы можете настроить вертикальное и горизонтальное автмасштабирование в ClickHouse Cloud. Для вертикального автмасштабирования вы можете установить минимальный и максимальный размер для памяти и ядер CPU вычислительных узлов сервиса. Затем сервис будет масштабироваться по мере необходимости в этих пределах. Эти настройки также доступны во время первоначального процесса создания сервиса. Каждый вычислительный узел в сервисе имеет одинаковый размер. Вы можете изменить количество вычислительных узлов в рамках сервиса с помощью горизонтального масштабирования.
Кроме того, аналогично квотам BigQuery, ClickHouse Cloud предлагает управление конкурентностью, лимиты на использование памяти и планирование ввода-вывода, позволяя пользователям изолировать запросы в классы нагрузки. Устанавливая лимиты на общие ресурсы (ядра CPU, DRAM, диск и сетевой ввод-вывод) для конкретных классов нагрузки, он обеспечивает то, что эти запросы не влияют на другие критически важные бизнес-запросы. Управление конкурентностью предотвращает чрезмерное использование потоков в сценариях с высоким количеством параллельных запросов.
ClickHouse отслеживает размер памяти выделений по уровням сервера, пользователя и запроса, позволяя гибко устанавливать лимиты на использование памяти. Переполнение памяти позволяет запросам использовать дополнительную свободную память за пределами гарантированной памяти, обеспечивая при этом лимиты памяти для других запросов. Кроме того, использование памяти для агрегирования, сортировки и условий соединения может быть ограничено, что позволяет переключаться на внешние алгоритмы, когда лимит памяти превышен.
Наконец, планирование ввода-вывода позволяет пользователям ограничивать доступы к локальным и удаленным дискам для классов нагрузки в зависимости от максимальной пропускной способности, активных запросов и политики.
Разрешения
ClickHouse Cloud контролирует доступ пользователей в двух местах: через консоль облака и через базу данных. Доступ к консоли управляется через интерфейс пользователя clickhouse.cloud. Доступ к базе данных управляется через учетные записи пользователей базы данных и роли. Кроме того, пользователям консоли могут быть предоставлены роли в базе данных, которые позволяют пользователю консоли взаимодействовать с базой данных через нашу SQL консоль.
Типы данных
ClickHouse предлагает более детальную точность в отношении чисел. Например, BigQuery предлагает числовые типы INT64
, NUMERIC
, BIGNUMERIC
и FLOAT64
. В отличие от этого, ClickHouse предлагает множество типов точности для десятичных, плавающих и целых чисел. С помощью этих типов данных пользователи ClickHouse могут оптимизировать хранение и использование памяти, что приводит к более быстрым запросам и меньшему потреблению ресурсов. Ниже мы сопоставляем эквивалентный тип ClickHouse для каждого типа BigQuery:
При представлении нескольких вариантов типов ClickHouse учитывайте фактический диапазон данных и выбирайте наименьший необходимый. Также рассмотрите возможность использования подходящих кодеков для дополнительного сжатия.
Техники ускорения запросов
Первичные и внешние ключи и Первичный индекс
В BigQuery таблица может иметь ограничения первичного и внешнего ключа. Обычно первичные и внешние ключи используются в реляционных базах данных для обеспечения целостности данных. Значение первичного ключа обычно уникально для каждой строки и не может быть NULL
. Каждое значение внешнего ключа в строке должно присутствовать в колонке первичного ключа таблицы первичного ключа или быть NULL
. В BigQuery эти ограничения не обеспечиваются, но оптимизатор запросов может использовать эту информацию для лучшей оптимизации запросов.
В ClickHouse таблица также может иметь первичный ключ. Как и в BigQuery, ClickHouse не обеспечивает уникальности значений колонки первичного ключа таблицы. В отличие от BigQuery, данные таблицы хранятся на диске упорядоченными по колонкам первичного ключа. Оптимизатор запросов использует этот порядок сортировки, чтобы предотвратить переработку, минимизировать использование памяти для соединений и включать короткое замыкание для ограничений. В отличие от BigQuery, ClickHouse автоматически создает первичный индекс (разреженный) на основе значений колонок первичного ключа. Этот индекс используется для ускорения всех запросов, содержащих фильтры по колонкам первичного ключа. В настоящее время ClickHouse не поддерживает ограничения внешнего ключа.
Вторичные индексы (Доступны только в ClickHouse)
В дополнение к первичному индексу, созданному из значений колонок первичного ключа таблицы, ClickHouse позволяет создавать вторичные индексы на других колонках, не входящих в первичный ключ. ClickHouse предлагает несколько типов вторичных индексов, каждый из которых подходит для разных типов запросов:
- Индекс фильтра Блума:
- Используется для ускорения запросов с условиями равенства (например, =, IN).
- Использует вероятностные структуры данных для определения, существует ли значение в блоке данных.
- Индекс токенов фильтра Блума:
- Похож на индекс фильтра Блума, но используется для токенизированных строк и подходит для запросов полнотекстового поиска.
- Минимально-Максимальный индекс:
- Хранит минимальные и максимальные значения колонки для каждой части данных.
- Помогает пропустить чтение частей данных, которые не подпадают под указанный диапазон.
Поисковые индексы
Аналогично поисковым индексам в BigQuery, в ClickHouse можно создавать индексы полнотекстового поиска для таблиц на колонках со строковыми значениями.
Векторные индексы
В BigQuery недавно были введены векторные индексы как функция до выхода из общего доступа. Аналогично, ClickHouse имеет экспериментальную поддержку индексов для ускорения использования векторного поиска.
Разделение
Подобно BigQuery, ClickHouse использует разделение таблиц для повышения производительности и управляемости больших таблиц, разделяя таблицы на более мелкие, более удобные фрагменты, называемые партициями. Мы подробно описываем разделение ClickHouse здесь.
Кластеризация
При кластеризации BigQuery автоматически сортирует данные таблицы на основе значений нескольких указанных колонок и размещает их в оптимально размерами блоках. Кластеризация улучшает производительность запросов, позволяя BigQuery лучше оценивать стоимость выполнения запроса. С кластеризованными колонками запросы также устраняют сканирование ненужных данных.
В ClickHouse данные автоматически кластеризуются на диске на основе колонок первичного ключа таблицы и логически организованы в блоки, которые могут быть быстро найдены или отфильтрованы запросами, использующими структуру данных первичного индекса.
Материализованные представления
И BigQuery, и ClickHouse поддерживают материализованные представления - предвычисленные результаты на основе результата запроса трансформации к базовой таблице для повышения производительности и эффективности.
Запросы к материализованным представлениям
Материализованные представления BigQuery могут быть запрошены напрямую или использованы оптимизатором для обработки запросов к базовым таблицам. Если изменения в базовых таблицах могут аннулировать материализованное представление, данные считываются непосредственно из базовых таблиц. Если изменения в базовых таблицах не аннулируют материализованное представление, то остальная часть данных считывается из материализованного представления, а изменения считываются из базовых таблиц.
В ClickHouse к материализованным представлениям можно запрашивать только напрямую. Однако, по сравнению с BigQuery (где материализованные представления автоматически обновляются в течение 5 минут после изменения в базовых таблицах, но не чаще чем каждые 30 минут), материализованные представления всегда синхронизированы с базовой таблицей.
Обновление материализованных представлений
BigQuery периодически полностью обновляет материализованные представления, выполняя запрос трансформации представления к базовой таблице. Между обновлениями BigQuery комбинирует данные материализованного представления с новыми данными базовой таблицы для обеспечения согласованных результатов запросов, при этом используя материализованное представление.
В ClickHouse материализованные представления обновляются инкрементально. Этот механизм инкрементального обновления обеспечивает высокую масштабируемость и низкие вычислительные затраты: инкрементно обновленные материализованные представления специально разработаны для сценариев, когда базовые таблицы содержат миллиарды или триллионы строк. Вместо того чтобы повторно запрашивать постоянно растущую базовую таблицу для обновления материализованного представления, ClickHouse просто вычисляет частичный результат из (только) значений новых вставленных строк базовой таблицы. Этот частичный результат инкрементально сливается с ранее вычисленным частичным результатом в фоновом режиме. Это приводит к значительно меньшим вычислительным затратам по сравнению с повторным обновлением материализованного представления из всей базовой таблицы.
Транзакции
В отличие от ClickHouse, BigQuery поддерживает многооперационные транзакции внутри одного запроса или через несколько запросов при использовании сессий. Многооперационная транзакция позволяет вам выполнять операции мутации, такие как вставка или удаление строк в одной или нескольких таблицах, и либо зафиксировать, либо откатить изменения атомарно. Многооперационные транзакции находятся на плане разработки ClickHouse на 2024 год.
Агрегатные функции
По сравнению с BigQuery, ClickHouse предлагает значительно больше встроенных агрегатных функций:
- BigQuery предоставляет 18 агрегатных функций и 4 аппроксимирующие агрегатные функции.
- ClickHouse имеет более 150 предустановленных агрегатных функций, а также мощные комбинаторы агрегации для расширения поведения предустановленных агрегатных функций. Например, вы можете применить более 150 предустановленных агрегатных функций к массивам вместо строк таблицы, просто вызвав их с суффиксом -Array. С помощью -Map вы можете применить любую агрегатную функцию к отображениям. А с суффиксом -ForEach вы можете применить любую агрегатную функцию к вложенным массивам.
Источники данных и форматы файлов
По сравнению с BigQuery, ClickHouse поддерживает значительно больше форматов файлов и источников данных:
- ClickHouse имеет нативную поддержку загрузки данных в более чем 90 форматах файлов из практически любого источника данных
- BigQuery поддерживает 5 форматов файлов и 19 источников данных
Особенности языка SQL
ClickHouse предоставляет стандартный SQL с множеством расширений и улучшений, которые делают его более удобным для аналитических задач. Например, SQL ClickHouse поддерживает лямбда-функции и функции высшего порядка, поэтому вам не нужно распаковывать/разделять массивы при применении преобразований. Это большое преимущество по сравнению с другими системами, такими как BigQuery.
Массивы
По сравнению с 8 функциями массивов в BigQuery, ClickHouse имеет более 80 встроенных функций работы с массивами для элегантного и простого моделирования и решения широкого спектра задач.
Типичный паттерн проектирования в ClickHouse заключается в использовании агрегатной функции groupArray
для (временного) преобразования конкретных значений строк таблицы в массив. Этот массив может быть удобно обработан с помощью функций работы с массивами, а результат может быть преобразован обратно в отдельные строки таблицы с помощью агрегатной функции arrayJoin
.
Поскольку SQL ClickHouse поддерживает лямбда-функции высшего порядка, многие сложные операции с массивами могут быть достигнуты простым вызовом одной из встроенных функций высшего порядка, вместо временного преобразования массивов обратно в таблицы, как это часто требуется в BigQuery, например, для фильтрации или сшивания массивов. В ClickHouse эти операции просто представляют собой простой вызов функции высшего порядка arrayFilter
, и arrayZip
, соответственно.
В дальнейшем мы предоставим сопоставление операций с массивами от BigQuery к ClickHouse:
BigQuery | ClickHouse |
---|---|
ARRAY_CONCAT | arrayConcat |
ARRAY_LENGTH | length |
ARRAY_REVERSE | arrayReverse |
ARRAY_TO_STRING | arrayStringConcat |
GENERATE_ARRAY | range |
Создать массив с одним элементом для каждой строки в подзапросе
BigQuery
ClickHouse
groupArray агрегатная функция
Преобразовать массив в набор строк
BigQuery
UNNEST
оператор
ClickHouse
ARRAY JOIN оператор
Вернуть массив дат
BigQuery
GENERATE_DATE_ARRAY функция
ClickHouse
Вернуть массив временных меток
BigQuery
GENERATE_TIMESTAMP_ARRAY функция
ClickHouse
Фильтрация массивов
BigQuery
Требует временного преобразования массивов обратно в таблицы через UNNEST
оператор
ClickHouse
arrayFilter функция
Сшивание массивов
BigQuery
Требует временного преобразования массивов обратно в таблицы через UNNEST
оператор
ClickHouse
arrayZip функция
Агрегация массивов
BigQuery
Требует преобразования массивов обратно в таблицы через UNNEST
оператор
ClickHouse
arraySum, arrayAvg, ... функция или любая из более чем 90 существующих имен агрегатных функций в качестве аргумента для функции arrayReduce