Кэширование общих запросов
Семантический слой dbt позволяет кэшировать общие запросы для ускорения производительности и уменьшения вычислительных затрат на дорогие запросы.
Существует два разных типа кэширования:
- Кэширование результатов использует встроенный слой кэширования вашей платформы данных.
- Декларативное кэширование позволяет предварительно разогреть кэш с помощью конфигурации сохраненных запросов.
Хотя вы можете использовать кэширование для ускорения ваших запросов и уменьшения времени вычислений, знание различий между двумя типами зависит от вашего случая использования:
- Кэширование результатов происходит автоматически, используя кэш вашей платформы данных.
- Декларативное кэширование позволяет вам "задекларировать" запросы, которые вы хотите кэшировать. При декларативном кэшировании вам нужно предвидеть, какие запросы вы хотите кэшировать.
- Декларативное кэширование также позволяет динамически фильтровать ваши дашборды, не теряя преимуществ производительности кэширования. Это работает, потому что фильтры по измерениям (которые уже находятся в конфигурации сохраненного запроса) будут использовать кэш.
Предварительные условия
- План dbt Cloud Team или Enterprise.
- Среды dbt Cloud должны быть на релизных треках, а не на устаревших версиях dbt Core.
- Успешный запуск задания и производственная среда.
- Для декларативного кэширования необходимо иметь экспорты, определенные в вашем YAML-файле конфигурации сохраненных запросов.
Кэширование результатов
Кэширование результатов использует встроенный слой кэширования и функции вашей платформы данных. MetricFlow генерирует один и тот же SQL для нескольких запросов, что позволяет использовать кэш вашей платформы данных. Проверьте спецификации вашей платформы данных.
Вот как работает кэширование, используя Snowflake в качестве примера, и э то должно быть похоже на других платформах данных:
- Запуск с холодного кэша — Когда вы запускаете запрос семантического слоя из вашего BI-инструмента, который не выполнялся в последние 24 часа, запрос сканирует весь набор данных и не использует кэш.
- Запуск с теплого кэша — Если вы повторно запускаете тот же запрос через 1 час, сгенерированный и выполненный SQL на Snowflake остается тем же. На Snowflake кэш результатов устанавливается для каждого пользователя на 24 часа, что позволяет повторному запросу использовать кэш и возвращать результаты быстрее.
Разные платформы данных могут иметь разные слои кэширования и правила аннулирования кэша. Вот список ресурсов о том, как работает кэширование на некоторых распространенных платформах данных:
Декларативное кэширование
Декларативное кэширование позволяет предварительно разогреть кэш, используя сохраненные запросы, установив конфигурацию кэша в true
в настройках saved_queries
. Это полезно для оптимизации производительности ключевых дашбордов или общих запросов ad-hoc.
Декларативное кэширование также позволяет динамически фильтровать ваши дашборды, не теряя преимуществ производительности кэширования. Это работает, потому что фильтры по измерениям (которые уже находятся в конфигурации сохраненного запроса) будут использовать кэш.
Например, если вы фильтруете метрику по географическому региону на дашборде, запрос будет использовать кэш, обеспечивая более быстрые результаты. Это также устраняет необходимость создавать отдельные сохраненные запросы со статическими фильтрами.
Для деталей конфигурации обратитесь к Настройка декларативного кэширования.
Как работает декларативное кэширование:
- Убедитесь, что в вашем YAML-файле конфигурации сохраненных запросов определены экспорты.
- Запуск сохраненного запроса инициирует в Семантическом слое dbt:
- Создание кэшированной таблицы из сохраненного запроса с определенными экспортами на вашей платформе данных.
- Убедитесь, что любые запросы, соответствующие входным данным сох раненного запроса, используют кэш, возвращая данные быстрее.
- Автоматически аннулирует кэш, когда обнаруживает новые и свежие данные в любых вышестоящих моделях, связанных с метриками в вашей кэшированной таблице.
- Обновляет (или перестраивает) кэш при следующем запуске сохраненного запроса.
📹 Посмотрите это видео-демо, чтобы увидеть, как работает декларативное кэширование!
Это видео демонстрирует концепцию декларативного кэширования, как его запустить с помощью планировщика dbt Cloud и как быстро загружаются ваши дашборды в результате.
Обратитесь к следующей диаграмме, которая иллюстрирует, что происходит, когда Семантический слой dbt получает запрос:
Настройка декларативного кэширования
Чтобы заполнить кэш, вам нужно настроить экспорт в вашем YAML-файле конфигурации сохраненного запроса и установить cache config
в true
. Вы не можете кэшировать сохраненный запрос без определенного экспорта.
saved_queries:
- name: my_saved_query
... # Остальная часть конфигурации сохраненных запросов.
config:
cache:
enabled: true # Установите в true для включения, по умолчанию false.
exports:
- name: order_data_key_metrics
config:
export_as: table
Чтобы включить сохраненные запросы на уровне проекта, вы можете установить конфигурацию saved-queries
в файле dbt_project.yml
. Это сэкономит вам время на настройку сохраненных запросов в каждом файле:
saved-queries:
my_saved_query:
config:
+cache:
enabled: true
Запуск вашего декларативного кэша
После настройки декларативного кэширования в вашей YAML-конфигурации вы можете запустить экспорты с помощью планировщика заданий dbt Cloud, чтобы создать кэшированную таблицу из сохраненного запроса на вашей платформе данных.
- Используйте экспорты для настройки задания для запуска сохраненного запроса в dbt Cloud.
- Семантический слой dbt создает таблицу кэша на вашей платформе данных в выделенной схеме
dbt_sl_cache
. - Схема кэша и таблицы создаются с использованием ваших учетных данных для развертывания. Вам нужно предоставить доступ на чтение к этой схеме для вашего пользователя Семантического слоя.
- Кэш обновляется (или перестраивается) по тому же расписанию, что и задание сохраненного запроса.
После успешного выполнения задания вы можете вернуться к вашему дашборду, чтобы ощутить скорость и преимущества декларативного кэширования.
Управление кэшем
dbt Cloud использует метаданные из ваших запусков моделей dbt для интеллектуального управления аннулированием кэша. Когда вы запускаете задание dbt, оно отслеживает последнее время выполнения модели и проверяет свежесть метрик, находящихся выше по потоку от вашего кэша.
Если в вышестоящей модели есть данные, созданные после создания кэша, dbt Cloud аннулирует кэш. Это означает, что запросы не будут использовать устаревшие случаи и вместо этого будут запрашивать данные непосредственно из источника. Устаревшие, устаревшие таблицы кэша периодически удаляются, и dbt Cloud запишет новый кэш при следующем запуске вашего сохраненного запроса.
Вы можете вручную аннулировать кэш через API Семантического слоя dbt, используя поле InvalidateCacheResult
.