Перейти к основному содержанию
Чтобы эффективно использовать DataStore и добиться оптимальной производительности, важно понимать его модель отложенного вычисления.

Отложенное вычисление

DataStore использует отложенное вычисление — операции не выполняются сразу, а фиксируются и компилируются в оптимизированные SQL-запросы. Выполнение происходит только тогда, когда результаты действительно нужны.

Пример: отложенное и немедленное вычисление

Преимущества отложенного вычисления

  1. Оптимизация запросов: Несколько операций компилируются в один оптимизированный SQL-запрос
  2. Pushdown фильтров: Фильтры применяются на уровне источника данных
  3. Исключение лишних столбцов: Считываются только нужные столбцы
  4. Отложенные решения: Движок выполнения можно выбрать при выполнении
  5. Просмотр плана: Перед выполнением запроса можно просмотреть план и отладить его

Триггеры выполнения

Выполнение автоматически запускается, когда требуются фактические значения:

Автоматические триггеры

Примеры:

Операции, которые остаются отложенными

Примеры:

Трёхфазное выполнение

Операции DataStore используют трёхфазную модель выполнения:

Фаза 1: Отложенное построение SQL-запроса

Операции, которые можно представить в виде SQL-запроса, накапливаются:

Фаза 2: Момент выполнения

Когда срабатывает триггер, выполняется накопленный SQL:

Фаза 3: Операции с DataFrame (если есть)

Если после выполнения вы применяете цепочку операций, доступных только в pandas:

Просмотр Execution Plan

Используйте explain(), чтобы увидеть, что будет выполнено:
Query
Response
Используйте verbose=True для получения более подробной информации:
Полную документацию см. в разделе Отладка: explain().

Кэширование

DataStore кэширует результаты выполнения, чтобы избежать лишних запросов.

Как работает кэширование

Инвалидация кэша

Кэш сбрасывается, когда операции изменяют DataStore:

Управление кэшем вручную


Сочетание SQL и операций Pandas

DataStore эффективно обрабатывает операции, сочетающие SQL и Pandas:

SQL-совместимые операции

Они преобразуются в SQL:
  • filter(), where()
  • select()
  • groupby(), agg()
  • sort(), orderby()
  • limit(), offset()
  • join(), union()
  • distinct()
  • Операции со столбцами (математика, сравнение, строковые методы)

Операции только в Pandas

Они запускают выполнение и используют pandas:
  • apply() с пользовательскими функциями
  • pivot_table() со сложными агрегациями
  • stack(), unstack()
  • операции над уже выполненными DataFrames

Гибридные конвейеры


Выбор движка выполнения

DataStore может выполнять операции на разных движках:

Автоматический режим (по умолчанию)

Принудительное использование движка chDB

Принудительно использовать движок pandas

Подробнее см. в разделе Конфигурация: движок выполнения.

Влияние на производительность

Хорошо: фильтруйте как можно раньше

Плохо: поздняя фильтрация

Хорошо: выбирайте столбцы заранее

Хорошо: доверьте SQL эту работу


Краткая сводка лучших практик

  1. Выстраивайте Operations в цепочку перед выполнением - Сначала сформируйте полный запрос, затем запускайте его один раз
  2. Фильтруйте как можно раньше - Уменьшайте объём данных как можно ближе к источнику
  3. Выбирайте только нужные столбцы - Отсечение столбцов повышает производительность
  4. Используйте explain(), чтобы понять выполнение - Выполните Debug перед запуском
  5. Поручите SQL агрегации - ClickHouse оптимизирован для этого
  6. Помните о триггерах выполнения - Избегайте случайного преждевременного запуска
  7. Используйте кэширование с умом - Понимайте, когда кэш сбрасывается