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 предлагает управление параллелизмом, ограничение использования памяти и планирование I/O, позволяя пользователям изолировать запросы в классы нагрузки. Устанавливая ограничения на общие ресурсы (ядра CPU, DRAM, ввод-вывод диска и сети) для конкретных классов нагрузки, он обеспечивает, чтобы эти запросы не влияли на другие критические бизнес-запросы. Управление параллелизмом предотвращает избыточное использование потоков в сценариях с высоким количеством параллельных запросов.
ClickHouse отслеживает размеры байтов памяти на уровне сервера, пользователя и запроса, что позволяет гибко настраивать лимиты использования памяти. Переизбыток памяти позволяет запросам использовать дополнительную свободную память сверх гарантированной памяти, при этом обеспечивая лимиты памяти для других запросов. Кроме того, использование памяти для агрегации, сортировки и соединений может быть ограничено, позволяя использовать внешние алгоритмы, когда лимит по памяти превышен.
Наконец, планирование I/O позволяет пользователям ограничивать доступ к локальным и удаленным дискам для классов нагрузки на основе максимальной пропускной способности, активных запросов и политики.
Права доступа
ClickHouse Cloud управляет доступом пользователей в двух местах, через облачную консоль и через базу данных. Доступ к консоли осуществляется через интерфейс пользователя clickhouse.cloud. Доступ к базе данных управляется через учетные записи пользователей базы данных и роли. Кроме того, пользователям консоли могут быть предоставлены роли в базе данных, которые позволяют пользователю консоли взаимодействовать с базой данных через нашу SQL консоль.
Типы данных
ClickHouse предлагает более детализированную точность в отношении чисел. Например, BigQuery предлагает числовые типы INT64
, NUMERIC
, BIGNUMERIC
и FLOAT64
. В отличие от этого, ClickHouse предлагает несколько типов точности для десятичных, плавающих и целых чисел. С этими типами данных пользователи ClickHouse могут оптимизировать использование памяти и затраты на хранение, что приводит к более быстрым запросам и меньшему потреблению ресурсов. Ниже мы сопоставляем эквивалентный тип ClickHouse для каждого типа BigQuery:
При наличии нескольких вариантов типов ClickHouse учитывайте фактический диапазон данных и выбирайте минимально необходимый. Также рассмотрите возможность использования подходящих кодеков для дальнейшего сжатия.
Техники ускорения запросов
Первичные и внешние ключи и первичный индекс
В BigQuery таблица может иметь ограничения первичных и внешних ключей. Обычно первичные и внешние ключи используются в реляционных базах данных для обеспечения целостности данных. Значение первичного ключа обычно уникально для каждой строки и не равно NULL
. Каждое значение внешнего ключа в строке должно присутствовать в столбце первичного ключа таблицы первичного ключа или быть NULL
. В BigQuery эти ограничения не обеспечиваются, но оптимизатор запросов может использовать эту информацию для лучшей оптимизации запросов.
В ClickHouse таблица также может иметь первичный ключ. Как и в BigQuery, ClickHouse не обеспечивает уникальность значений в столбце первичного ключа таблицы. В отличие от BigQuery, данные таблицы хранятся на диске отсортированными по значениям столбца(ов) первичного ключа. Оптимизатор запросов использует этот порядок сортировки, чтобы избежать повторной сортировки, минимизировать использование памяти для соединений и включить короткое замыкание для ограничений limit. В отличие от BigQuery, ClickHouse автоматически создает индекс (разреженный) первичный индекс на основе значений столбца первичного ключа. Этот индекс используется для ускорения всех запросов, содержащих фильтры по столбцам первичного ключа. В настоящее время ClickHouse не поддерживает ограничения внешних ключей.
Вторичные индексы (Доступны только в ClickHouse)
В дополнение к первичному индексу, созданному на основе значений столбцов первичного ключа таблицы, ClickHouse позволяет создавать вторичные индексы по столбцам, отличным от тех, что находятся в первичном ключе. ClickHouse предлагает несколько типов вторичных индексов, каждый из которых подходит для разных типов запросов:
- Индекс фильтра Блума:
- Используется для ускорения запросов с условиями равенства (например, =, IN).
- Использует вероятностные структуры данных для определения существования значения в блоке данных.
- Индекс токенов фильтра Блума:
- Похож на индекс фильтра Блума, но используется для токенизированных строк и подходит для запросов полного текста.
- Мин-Макс индекс:
- Хранит минимальные и максимальные значения столбца для каждой части данных.
- Помогает пропускать чтение частей данных, которые не попадают в указанный диапазон.
Индексы поиска
Аналогично индексам поиска в BigQuery, индексы полнотекстового поиска могут быть созданы для таблиц ClickHouse на столбцах со строковыми значениями.
Векторные индексы
BigQuery недавно представил векторные индексы как функцию Pre-GA. Аналогично, 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 |
Создать массив с одним элементом для каждой строки в подзапросе
Стоит отметить, что следует использовать оператор ARRAY
ClickHouse
Преобразовать массив в набор строк
Стоит отметить, что следует использовать оператор UNNEST
ClickHouse
ARRAY JOIN clause
Вернуть массив дат
Стоит отметить, что следует использовать функцию GENERATE_DATE_ARRAY
С помощью функций range и arrayMap
ClickHouse
Вернуть массив отметок времени
Стоит отметить, что следует использовать функцию GENERATE_TIMESTAMP_ARRAY
С помощью функций range и arrayMap
ClickHouse
Фильтрация массивов
Стоит отметить, что требует временного преобразования массивов обратно в таблицы с помощью оператора UNNEST
ClickHouse
arrayFilter function
Объединение массивов
Стоит отметить, что требует временного преобразования массивов обратно в таблицы с помощью оператора UNNEST
ClickHouse
arrayZip function
Агрегация массивов
Стоит отметить, что требует преобразования массивов обратно в таблицы с помощью оператора UNNEST
ClickHouse
arraySum, arrayAvg, ... function, или любое из более чем 90 существующих имен агрегатных функций в качестве аргумента для функции arrayReduce