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

Данные в режиме, близком к реальному времени, в dbt

По своей архитектуре dbt ориентирован на пакетную обработку: у заданий есть определённое время начала и завершения. Но знаете ли вы, что dbt также позволяет получать данные в режиме, близком к реальному времени, если сочетать непрерывную загрузку в хранилище данных с частыми преобразованиями в dbt?

В этом руководстве рассматриваются несколько подходов к обеспечению актуальности данных в режиме, близком к реальному времени, с помощью dbt:

  1. Инкрементальные подходы — стратегии merge, отслеживание изменений данных (Change Data Capture, CDC) и микропакетная обработка
  2. Встроенные возможности хранилища — когда использовать динамические таблицы и материализованные представления
  3. Подход с лямбда-представлениями — объединение пакетных данных и данных реального времени в одном представлении
  4. Подход только с представлениями - максимальная актуальность для простых преобразований
  5. Эксплуатационные аспекты — сложности, риски и управление затратами

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

Это руководство может использовать любой желающий, но в первую очередь оно предназначено для инженеров и архитекторов данных, которые хотят обеспечить актуальность данных в режиме, близком к реальному времени, с помощью dbt.

Эта серия посвящена актуальности данных (задержки в минутах, а не часах). Рекомендации по выбору между инкрементальными моделями и снимками для хранения истории изменений см. в разделе CDC в dbt.

Какую роль играет dbt?​

Существует два основных варианта использования dbt для получения данных в режиме, близком к реальному времени:

  • Режим, близкий к реальному времени (5–15 минут) — dbt отлично справляется с этой задачей и хорошо подходит для большинства операционных дашбордов.
  • Настоящий режим реального времени (задержка менее секунды) — для этого нужны специализированные потоковые базы данных (ClickHouse, Materialize, Rockset и другие), работающие перед dbt или параллельно с ним; dbt по-прежнему отвечает за «аналитические» таблицы и историю, но не за чтение данных со сверхнизкой задержкой.

Как dbt обеспечивает обработку данных в режиме, близком к реальному времени​

Чтобы получать данные в реальном времени с помощью dbt, мы рекомендуем использовать двухуровневую архитектуру:

Уровень загрузки​

Непрерывное поступление данных с использованием возможностей потоковой загрузки вашего хранилища данных.

Для этого хорошо подходят такие возможности потоковой загрузки, как потоковые таблицы, Snowpipe или Storage Write API. Чтобы найти возможности потоковой загрузки для вашего хранилища, обратитесь к разделу дополнительных ресурсов.

Уровень преобразований dbt​

Запускайте dbt каждые несколько минут для преобразования данных, а для отчётности с минимальной задержкой используйте материализованные представления или динамические таблицы.

Конкретные подходы к преобразованию включают:

Основные рекомендации​

Ниже приведены основные рекомендации, которые помогут вам обеспечить актуальность данных в режиме, близком к реальному времени, с помощью dbt:

  • Загружайте данные непрерывно: используйте встроенные возможности потоковой или микропакетной загрузки вашего хранилища, чтобы сохранять исходные данные сразу по мере их поступления.
  • Часто выполняйте преобразования с помощью dbt по расписанию: настройте запуск заданий dbt с частотой, соответствующей потребностям вашего бизнеса (например, каждые 1–15 минут). Соблюдайте баланс между актуальностью данных, затратами и ограничениями ресурсов.
  • Материализованные представления и динамические таблицы: для отчётности с минимальной задержкой используйте материализованные представления или динамические таблицы. Их можно обновлять каждую минуту.
  • Инкрементальные модели и микропакетная обработка: используйте инкрементальные модели dbt для обработки только новых или изменённых данных, чтобы преобразования оставались эффективными и масштабируемыми.
  • Разделяйте загрузку и преобразование: поддерживайте раздельные потоки получения и преобразования данных. Это позволит оптимизировать каждый из них независимо.
  • Отслеживайте и проверяйте актуальность данных: внедрите проверки качества данных и мониторинг их актуальности, чтобы ваши конвейеры обработки в режиме, близком к реальному времени, выдавали точные и актуальные результаты.
  • Учитывайте затраты и сложность: более частый запуск заданий dbt увеличивает затраты на вычисления и усложняет эксплуатацию. Всегда сопоставляйте пользу для бизнеса с этими издержками.

Нашли ошибку?

0
Loading