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

Перевод вашего проекта dbt Databricks в продакшн

Обновлен
Databricks
dbt Core
dbt Cloud
Intermediate
Menu

    Введение

    Добро пожаловать в третью часть нашей обширной серии по оптимизации и развертыванию ваших конвейеров данных с использованием Databricks и dbt Cloud. В этом руководстве мы углубимся в доставку этих моделей конечным пользователям, одновременно внедряя лучшие практики, чтобы ваши данные в продакшене оставались надежными и своевременными.

    Предварительные требования

    Если у вас нет каких-либо из следующих требований, обратитесь к инструкциям в Настройка вашего проекта dbt с Databricks для помощи в их выполнении:

    Чтобы начать, давайте вернемся к среде развертывания, созданной для ваших данных в продакшене.

    Среды развертывания

    В программной инженерии среды играют ключевую роль, позволяя инженерам разрабатывать и тестировать код, не влияя на конечных пользователей их программного обеспечения. Аналогично, вы можете проектировать data lakehouses с отдельными средами. Продакшн среда включает в себя отношения (схемы, таблицы и представления), которые запрашивают или используют конечные пользователи, обычно в BI инструменте или модели ML.

    В dbt Cloud среды бывают двух видов:

    • Развертывание — Определяет настройки, используемые для выполнения задач, созданных в этой среде.
    • Разработка — Определяет настройки, используемые в IDE dbt Cloud для конкретного проекта dbt Cloud.

    Каждый проект dbt Cloud может иметь несколько сред развертывания, но только одну среду разработки на пользователя.

    Создание и планирование продакшн задачи

    С вашей настроенной средой развертывания пришло время создать продакшн задачу для выполнения в вашей prod среде.

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

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

    Давайте создадим задачу в dbt Cloud, которая будет трансформировать данные в нашем каталоге Databricks prod.

    1. Создайте новую задачу, нажав Deploy в заголовке, затем Jobs и Create job.

    2. Назовите задачу “Ежедневное обновление”.

    3. Установите Environment на вашу production среду.

    4. В разделе Execution Settings

      • Установите флажок Generate docs on run, чтобы настроить задачу на автоматическую генерацию документации проекта каждый раз, когда эта задача выполняется. Это обеспечит актуальность вашей документации по мере добавления и изменения моделей.
      • Выберите флажок Run on source freshness, чтобы настроить dbt source freshness как первый шаг этой задачи. Ваши источники должны быть настроены на снимок информации о свежести, чтобы это давало значимые инсайты.

      Добавьте следующие три Commands:

      • dbt source freshness
        • Это проверит, не устарели ли какие-либо источники. Мы не хотим пересчитывать модели с данными, которые не изменились с момента нашего последнего запуска.
      • dbt test --models source:*
        • Это проверит качество данных наших исходных данных, например, убедится, что поля ID уникальны и не пусты. Мы не хотим, чтобы плохие данные попадали в продакшн модели.
      • dbt build --exclude source:* --fail-fast
        • dbt build более эффективен, чем выполнение отдельных команд для dbt run и dbt test по отдельности, потому что он сначала выполняет, а затем тестирует каждую модель перед продолжением.
        • Мы исключаем исходные данные, потому что уже протестировали их на шаге 2.
        • Флаг fail-fast заставит dbt немедленно выйти, если один ресурс не удастся построить. Если другие модели находятся в процессе выполнения, когда первая модель не удается, dbt завершит соединения для этих все еще выполняющихся моделей.
    5. В разделе Triggers используйте переключатель, чтобы настроить вашу задачу на выполнение по расписанию. Вы можете ввести конкретные дни и время или создать пользовательский cron-расписание.

      • Если вы хотите, чтобы ваша задача dbt Cloud была запланирована другим оркестратором, например, Databricks Workflows, см. раздел Advanced Considerations ниже.

    Это всего лишь один пример списка команд "все или ничего", предназначенного для минимизации потерь вычислительных ресурсов. Список команд задач и селекторы предоставляют большую гибкость в том, как будет выполняться ваш DAG. Вы можете захотеть спроектировать свой так, чтобы продолжать выполнение определенных моделей, если другие не удаются. Вы можете захотеть настроить несколько задач для обновления моделей с разной частотой. См. наш Job Creation Best Practices discourse для получения дополнительных предложений по проектированию задач.

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

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

    Добавление задачи CI

    CI/CD, или Непрерывная Интеграция и Непрерывное Развертывание/Доставка, стала стандартной практикой в разработке программного обеспечения для быстрого предоставления новых функций и исправлений ошибок при поддержании высокого качества и стабильности. dbt Cloud позволяет вам применять эти практики к вашим трансформациям данных.

    Шаги ниже показывают, как создать тест CI для вашего проекта dbt. CD в dbt Cloud не требует дополнительных шагов, так как ваши задачи автоматически подхватят последние изменения из ветки, назначенной среде, в которой выполняется ваша задача. Вы можете выбрать добавление шагов в зависимости от вашей стратегии развертывания. Если вы хотите углубиться в варианты CD, ознакомьтесь с этим блогом о внедрении CI/CD с dbt Cloud.

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

    1. Ежедневные запуски: Регулярное выполнение тестов на вашем конвейере данных помогает выявлять проблемы, вызванные плохими исходными данными, обеспечивая качество данных, которые достигают ваших пользователей.
    2. Разработка: Выполнение тестов во время разработки гарантирует, что изменения в вашем коде не нарушают существующие предположения, позволяя разработчикам быстрее итеративно работать, выявляя проблемы сразу после написания кода.
    3. Проверки CI: Автоматизированные задачи CI выполняют и тестируют ваш конвейер от начала до конца, когда создается запрос на слияние, обеспечивая уверенность разработчикам, рецензентам кода и конечным пользователям, что предлагаемые изменения надежны и не вызовут сбоев или проблем с качеством данных.

    Ваша задача CI будет гарантировать, что модели правильно строятся и проходят любые примененные к ним тесты. Мы рекомендуем создать отдельную тестовую среду и иметь выделенный сервисный принципал. Это обеспечит, что временные схемы, создаваемые во время тестов CI, находятся в своем собственном каталоге и не могут случайно раскрыть данные другим пользователям. Повторите шаги в Настройка вашего проекта dbt с Databricks для создания вашей prod среды, чтобы создать тестовую среду. После настройки у вас должно быть:

    • Каталог под названием test
    • Сервисный принципал под названием dbt_test_sp
    • Новая среда dbt Cloud под названием test, которая по умолчанию использует каталог test и использует токен dbt_test_sp в учетных данных развертывания

    Мы рекомендуем настроить задачу CI в dbt Cloud. Это уменьшит время выполнения задачи, выполняя и тестируя только измененные модели, что также снижает затраты на вычисления в lakehouse. Чтобы создать задачу CI, обратитесь к Настройка задач CI для получения подробной информации.

    С тестами dbt и SlimCI вы можете быть уверены, что ваши данные в продакшене будут своевременными и точными, даже при высокой скорости доставки.

    Мониторинг ваших задач

    Внимательное наблюдение за вашими задачами dbt Cloud имеет решающее значение для поддержания надежного и эффективного конвейера данных. Мониторинг производительности задач и быстрое выявление потенциальных проблем позволяют гарантировать, что ваши трансформации данных выполняются гладко. dbt Cloud предоставляет три точки входа для мониторинга состояния вашего проекта: история запусков, монитор развертывания и статусные плитки.

    Панель истории запусков в dbt Cloud предоставляет детальный обзор всех запусков задач вашего проекта, предлагая различные фильтры, чтобы помочь вам сосредоточиться на конкретных аспектах. Это отличный инструмент для разработчиков, которые хотят проверить недавние запуски, подтвердить результаты ночных запусков или отслеживать прогресс выполняющихся задач. Чтобы получить доступ, выберите Run History в меню Deploy.

    Монитор развертывания в dbt Cloud предлагает более высокий уровень обзора вашей истории запусков, позволяя вам оценить состояние вашего конвейера данных за длительный период времени. Эта функция включает информацию о продолжительности запусков и уровнях успеха, позволяя вам выявлять тенденции в производительности задач, такие как увеличение времени выполнения или более частые сбои. Монитор развертывания также выделяет задачи в процессе выполнения, в очереди и недавние сбои. Чтобы получить доступ к монитору развертывания, нажмите на логотип dbt в верхнем левом углу интерфейса dbt Cloud.

    Монитор развертывания показывает статус задач с течением времени в разных средахМонитор развертывания показывает статус задач с течением времени в разных средах

    Добавляя плитки состояния данных на ваши BI панели, вы можете предоставить заинтересованным сторонам видимость состояния вашего конвейера данных, не покидая их предпочтительный интерфейс. Плитки данных внушают уверенность в ваших данных и помогают предотвратить ненужные запросы или переключение контекста. Чтобы реализовать плитки состояния панели, вам нужно иметь dbt docs с определенными exposures.

    Настройка уведомлений

    Настройка уведомлений в dbt Cloud позволяет вам получать оповещения по электронной почте или в канале Slack каждый раз, когда запуск заканчивается. Это гарантирует, что соответствующие команды будут уведомлены и смогут быстро принять меры, когда задачи не удаются или отменяются. Чтобы настроить уведомления:

    1. Перейдите к настройкам вашего проекта dbt Cloud.
    2. Выберите вкладку Notifications.
    3. Выберите желаемый тип уведомления (Email или Slack) и настройте соответствующие параметры.

    Если вам требуются уведомления другими средствами, кроме электронной почты или Slack, вы можете использовать функцию исходящих вебхуков dbt Cloud для передачи событий задач в другие инструменты. Вебхуки позволяют интегрировать dbt Cloud с широким спектром SaaS приложений, расширяя автоматизацию вашего конвейера в другие системы.

    Устранение неполадок

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

    Пять ключевых шагов для устранения неполадок в dbt Cloud:

    1. Прочитайте сообщение об ошибке: сообщения об ошибках dbt обычно указывают тип ошибки и файл, в котором произошла проблема.
    2. Проверьте проблемный файл и найдите немедленное решение.
    3. Изолируйте проблему, выполняя одну модель за раз в IDE или отменяя код, вызвавший проблему.
    4. Проверьте проблемы в скомпилированных файлах и журналах.

    Обратитесь к документации по отладке ошибок для получения полного списка типов ошибок и методов диагностики.

    Чтобы устранить проблемы с задачей dbt Cloud, перейдите на вкладку "Deploy > Run History" в вашем проекте dbt Cloud и выберите неудавшийся запуск. Затем разверните шаги запуска, чтобы просмотреть консольные и отладочные журналы для изучения подробных сообщений журнала. Чтобы получить дополнительную информацию, откройте вкладку Артефакты и загрузите скомпилированные файлы, связанные с запуском.

    Если ваши задачи занимают больше времени, чем ожидалось, используйте панель времени выполнения модели для выявления узких мест в вашем конвейере. Анализ времени, затраченного на выполнение каждой модели, помогает вам определить самые медленные компоненты и оптимизировать их для повышения производительности. История запросов Databricks Query History позволяет вам изучать детальные сведения, такие как время, затраченное на каждую задачу, возвращенные строки, производительность ввода-вывода и план выполнения.

    Для получения дополнительной информации о настройке производительности ознакомьтесь с нашим руководством по Как оптимизировать и устранять неполадки моделей dbt на Databricks.

    Продвинутые соображения

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

    Обновление ваших данных с помощью Databricks Workflows

    Планировщик задач dbt Cloud предлагает несколько способов запуска ваших задач. Если ваши трансформации dbt являются всего лишь одним шагом в более крупном оркестрационном рабочем процессе, используйте API dbt Cloud для запуска вашей задачи из Databricks Workflows.

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

    API обеспечивает интеграцию между вашими задачами dbt Cloud и рабочим процессом Databricks, гарантируя, что ваши трансформации данных эффективно управляются в более широком контексте вашего конвейера обработки данных.

    Вставка задач dbt Cloud в Databricks Workflows позволяет вам связывать внешние задачи, при этом используя эти преимущества dbt Cloud:

    • Контекст UI: Интерфейс dbt Cloud позволяет вам определять задачу в контексте ваших сред dbt Cloud, упрощая создание и управление соответствующими конфигурациями.
    • Журналы и история запусков: Доступ к журналам и истории запусков становится более удобным при использовании dbt Cloud.
    • Функции мониторинга и уведомлений: dbt Cloud оснащен функциями мониторинга и уведомлений, как описано выше, которые могут помочь вам оставаться в курсе статуса и производительности ваших задач.

    Чтобы запустить вашу задачу dbt Cloud из Databricks, следуйте инструкциям в нашем руководстве по использованию Databricks Workflows для запуска задач dbt Cloud.

    Маскирование данных

    Наше руководство Лучшие практики для dbt и Unity Catalog рекомендует использовать отдельные каталоги dev и prod для сред разработки и развертывания, с Unity Catalog и dbt Cloud, управляющими конфигурациями и разрешениями для изоляции сред. Обеспечение безопасности при поддержании эффективности в ваших средах разработки и развертывания имеет решающее значение. Дополнительные меры безопасности могут быть необходимы для защиты конфиденциальных данных, таких как персонально идентифицируемая информация (PII).

    Databricks использует Динамические представления для включения маскирования данных на основе членства в группе. Поскольку представления в Unity Catalog используют Spark SQL, вы можете реализовать продвинутое маскирование данных, используя более сложные SQL выражения и регулярные выражения. Вы также можете применять более детализированные средства управления доступом, такие как фильтры строк в предварительном просмотре и маски столбцов в предварительном просмотре на таблицах в Databricks Unity Catalog, что будет рекомендованным подходом для защиты конфиденциальных данных, как только это станет общедоступным. В ближайшем будущем Databricks Unity Catalog также позволит нативно использовать управление доступом на основе атрибутов, что упростит защиту конфиденциальных данных в масштабе.

    Чтобы реализовать маскирование данных в модели dbt, убедитесь, что конфигурация материализации модели установлена на представление. Затем добавьте оператор case, используя функцию is_account_group_member для идентификации групп, которым разрешено просматривать значения в открытом виде. Затем используйте regex для маскирования данных для всех остальных пользователей. Например:

    CASE
    WHEN is_account_group_member('auditors') THEN email
    ELSE regexp_extract(email, '^.*@(.*)$', 1)
    END

    Рекомендуется не предоставлять пользователям возможность читать таблицы и представления, на которые ссылается динамическое представление. Вместо этого назначьте ваши источники dbt динамическим представлениям, а не сырым данным, позволяя разработчикам безопасно выполнять полные сборки и команды свежести источников.

    Использование одних и тех же источников для сред разработки и развертывания позволяет тестировать с теми же объемами и частотой, которые вы увидите в продакшене. Однако это может привести к тому, что запуски разработки будут занимать больше времени, чем необходимо. Чтобы решить эту проблему, рассмотрите возможность использования переменной Jinja target.name для ограничения данных при работе в среде разработки.

    Сочетание dbt Docs и Unity Catalog

    Хотя между dbt docs и Databricks Unity Catalog есть сходства, они в конечном итоге используются для разных целей и хорошо дополняют друг друга. Объединяя их сильные стороны, вы можете предоставить вашей организации надежную и удобную экосистему управления данными.

    dbt docs — это сайт документации, сгенерированный из вашего проекта dbt, который предоставляет интерфейс для разработчиков и нетехнических заинтересованных сторон, чтобы понять происхождение данных и бизнес-логику, применяемую к трансформациям, без необходимости полного доступа к dbt Cloud или Databricks. Это дает вам дополнительные возможности по организации и поиску ваших данных. Вы можете автоматически создавать и просматривать ваши dbt docs с помощью dbt Cloud, чтобы поддерживать документацию в актуальном состоянии.

    Unity Catalog — это единое решение для управления вашими lakehouse. Оно предоставляет исследователь данных, который можно использовать для обнаружения наборов данных, которые не были определены в dbt. Исследователь данных также фиксирует происхождение на уровне столбцов, когда вам нужно отследить происхождение конкретного столбца.

    Чтобы получить максимальную отдачу от обоих инструментов, вы можете использовать persist docs config для передачи описаний таблиц и столбцов, написанных в dbt, в Unity Catalog, делая информацию легко доступной для пользователей обоих инструментов. Сохранение описаний в dbt гарантирует, что они находятся под контролем версий и могут быть воспроизведены после удаления таблицы.

    Связанные документы

    0