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

BigQuery против ClickHouse Cloud: Эквивалентные и различные концепции

Организация ресурсов

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

NEEDS ALT

Организации

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

Проекты BigQuery против Сервисов ClickHouse Cloud

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

  1. Группу вычислительных узлов (в настоящее время 2 узла для сервиса уровня Development и 3 для сервиса уровня Production). Для этих узлов ClickHouse Cloud поддерживает вертикальное и горизонтальное масштабирование, как вручную, так и автоматически.
  2. Папку объектного хранилища, где сервис хранит все данные.
  3. Конечную точку (или несколько конечных точек, созданных через интерфейс 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. Для вертикального автоматического масштабирования вы можете задать минимальный и максимальный размер для памяти и процессорных ядер вычислительных узлов сервиса. Сервис будет масштабироваться по мере необходимости в пределах этих границ. Эти настройки также доступны во время первоначального создания сервиса. Каждый вычислительный узел в сервисе имеет одинаковый размер. Вы можете изменить количество вычислительных узлов в рамках сервиса с помощью горизонтального масштабирования.

Более того, подобно квотам BigQuery, ClickHouse Cloud предоставляет контроль параллелизма, ограничения на использование памяти и планирование ввода-вывода, позволяя пользователям изолировать запросы на классы нагрузки. Устанавливая лимиты на общие ресурсы (процессорные ядра, оперативная память, ввод-вывод на диске и сети) для конкретных классов нагрузки, система обеспечивает то, чтобы эти запросы не влияли на другие критически важные бизнес-запросы. Контроль параллелизма предотвращает переподписку потоков в сценариях с высоким числом одновременных запросов.

ClickHouse отслеживает размеры байтов выделений памяти на уровне сервера, пользователя и запроса, позволяя гибкие лимиты использования памяти. Переподписание памяти позволяет запросам использовать дополнительную свободную память сверх гарантированной памяти, при этом гарантируя лимиты памяти для других запросов. Кроме того, использование памяти для агрегации, сортировки и соединения может быть ограничено, что позволяет переключаться на внешние алгоритмы, когда лимит памяти превышен.

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

Разрешения

ClickHouse Cloud управляет доступом пользователей в двух местах: через облачную консоль и через базу данных. Доступ к консоли управляется через интерфейс clickhouse.cloud. Доступ к базе данных управляется через учетные записи пользователей баз данных и роли. Кроме того, пользователям консоли могут быть предоставлены роли в базе данных, которые позволяют пользователю консоли взаимодействовать с базой данных через нашу SQL консоль.

Типы данных

ClickHouse предлагает более тонкую точность в отношении чисел. Например, BigQuery предлагает числовые типы INT64, NUMERIC, BIGNUMERIC и FLOAT64. В отличие от этого, ClickHouse предлагает несколько типов точности для десятичных, плавающих и целых чисел. С помощью этих типов данных пользователи ClickHouse могут оптимизировать хранилище и использование памяти, что приводит к более быстрым запросам и меньшему потреблению ресурсов. Ниже мы сопоставляем эквивалентный тип ClickHouse для каждого типа BigQuery:

BigQueryClickHouse
ARRAYArray(t)
NUMERICDecimal(P, S), Decimal32(S), Decimal64(S), Decimal128(S)
BIG NUMERICDecimal256(S)
BOOLBool
BYTESFixedString
DATEDate32 (с более узким диапазоном)
DATETIMEDateTime, DateTime64 (узкий диапазон, высокая точность)
FLOAT64Float64
GEOGRAPHYGeo Data Types
INT64UInt8, UInt16, UInt32, UInt64, UInt128, UInt256, Int8, Int16, Int32, Int64, Int128, Int256
INTERVALNA - поддерживается как выражение или через функции
JSONJSON
STRINGString (bytes)
STRUCTTuple, Nested
TIMEDateTime64
TIMESTAMPDateTime64

При выборе из нескольких вариантов типов ClickHouse, учитывайте фактический диапазон данных и выбирайте минимально необходимый. Также учитывайте возможность использования подходящих кодеков для дальнейшего сжатия.

Техники ускорения запросов

Первичные и внешние ключи и первичный индекс

В BigQuery таблица может иметь первичные и внешние ключевые ограничения. Обычно первичные и внешние ключи используются в реляционных базах данных для обеспечения целостности данных. Значение первичного ключа обычно уникально для каждой строки и не является NULL. Каждое значение внешнего ключа в строке должно присутствовать в колонке первичного ключа таблицы с первичным ключом или быть NULL. В BigQuery эти ограничения не применяются, но оптимизатор запросов может использовать эту информацию для улучшения оптимизации запросов.

В ClickHouse таблица также может иметь первичный ключ. Как и в BigQuery, ClickHouse не накладывает ограничения на уникальность значений колонки первичного ключа таблицы. В отличие от BigQuery, данные таблицы хранятся на диске в упорядоченном виде по колонке(ам) первичного ключа. Оптимизатор запросов использует этот порядок сортировки, чтобы предотвратить повторное упорядочение, минимизировать использование памяти для соединений и включить короткое замыкание для условий лимита. В отличие от BigQuery, ClickHouse автоматически создает индекс (разреженный) первичного ключа на основе значений колонки первичного ключа. Этот индекс используется для ускорения всех запросов, содержащих фильтры по колонкам первичного ключа. В настоящее время ClickHouse не поддерживает ограничения внешнего ключа.

Второстепенные индексы (доступны только в ClickHouse)

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

  • Индекс Bloom Filter:
    • Используется для ускорения запросов с условиями равенства (например, =, IN).
    • Использует вероятностные структуры данных для определения, существует ли значение в блоке данных.
  • Индекс Token Bloom Filter:
    • Похож на индекс Bloom Filter, но используется для токенизированных строк и подходит для текстовых поисковых запросов.
  • Индекс Min-Max:
    • Поддерживает минимальные и максимальные значения колонки для каждой части данных.
    • Помогает пропускать чтение частей данных, которые не попадают в заданный диапазон.

Индексы поиска

Аналогично индексам поиска в 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, 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:

BigQueryClickHouse
ARRAY_CONCATarrayConcat
ARRAY_LENGTHlength
ARRAY_REVERSEarrayReverse
ARRAY_TO_STRINGarrayStringConcat
GENERATE_ARRAYrange

Создание массива с одним элементом для каждой строки в подзапросе

BigQuery

ARRAY функция

ClickHouse

функция groupArray

Преобразование массива в набор строк

BigQuery

UNNEST оператор

ClickHouse

ARRAY JOIN оператор

Возврат массива дат

BigQuery

GENERATE_DATE_ARRAY функция

range + arrayMap функции

ClickHouse

Возврат массива временных меток

BigQuery

GENERATE_TIMESTAMP_ARRAY функция

ClickHouse

range + arrayMap функции

Фильтрация массивов

BigQuery

Требует временного преобразования массивов обратно в таблицы через оператор UNNEST

ClickHouse

arrayFilter функция

Объединение массивов

BigQuery

Требует временного преобразования массивов обратно в таблицы через оператор UNNEST

ClickHouse

arrayZip функция

Агрегирование массивов

BigQuery

Требует преобразования массивов обратно в таблицы через оператор UNNEST

ClickHouse

arraySum, arrayAvg, … функция, или любая из более 90 существующих названий агрегирующих функций в качестве аргумента для arrayReduce функции