Отложенное вычисление
Пример: отложенное и немедленное вычисление
Преимущества отложенного вычисления
- Оптимизация запроса: Несколько операций объединяются в один оптимизированный SQL-запрос
- Pushdown фильтров: Фильтры применяются на уровне источника данных
- Исключение лишних столбцов: Считываются только нужные столбцы
- Отложенный выбор: Движок выполнения можно выбрать во время выполнения
- Просмотр плана: Перед выполнением можно просмотреть и отладить запрос
Триггеры выполнения
Автоматические триггеры
Примеры:
Операции, которые остаются ленивыми
Примеры:
Трёхфазная модель выполнения
Фаза 1: Построение SQL-запроса (отложенное)
Фаза 2: Момент выполнения
Этап 3: Операции с DataFrame (если есть)
Просмотр планов выполнения
explain(), чтобы посмотреть, что именно будет выполнено:
Query
Response
verbose=True, чтобы получить более подробную информацию:
Кэширование
Как работает кэширование
Сброс кэша
Ручное управление кэшем
Сочетание операций SQL и Pandas
Операции с поддержкой SQL
filter(),where()select()groupby(),agg()sort(),orderby()limit(),offset()join(),union()distinct()- Операции со столбцами (математика, сравнение, строковые методы)
Операции только в Pandas
apply()с пользовательскими функциямиpivot_table()со сложными агрегациямиstack(),unstack()- Операции с уже выполненными DataFrame
Гибридные конвейеры
Выбор движка выполнения
Автоматический режим (по умолчанию)
Принудительно использовать движок chDB
Принудительное использование движка pandas
Влияние на производительность
Хорошо: фильтровать как можно раньше
Плохо: фильтровать слишком поздно
Хорошо: сразу выбирайте нужные столбцы
Хорошая практика: пусть SQL делает всю работу
Краткий обзор рекомендаций
- Объединяйте операции в цепочку перед выполнением - Сначала соберите полный запрос, затем запускайте его один раз
- Фильтруйте как можно раньше - Сокращайте объём данных в источнике
- Выбирайте только нужные столбцы - Отсечение столбцов повышает производительность
- Используйте
explain(), чтобы понять выполнение - Отлаживайте до запуска - Поручайте агрегации SQL - ClickHouse оптимизирован для этого
- Учитывайте, что запускает выполнение - Избегайте случайного преждевременного запуска
- Используйте кэширование с умом - Понимайте, когда кэш сбрасывается