Настройка вашего dbt проекта с Databricks
Введение
Databricks и dbt Labs сотрудничают, чтобы помочь командам по работе с данными мыслить как команды разработчиков программного обеспечения и быстрее предоставлять надежные данные. Адаптер dbt-databricks позволяет пользователям dbt использовать последние функции Databricks в своем dbt проекте. Сотни клиентов уже используют dbt и Databricks для создания выразительных и надежных конвейеров данных на Lakehouse, создавая активы данных, которые позволяют использовать аналитику, ML и AI в бизнесе.
В этом руководстве мы обсудим, как настроить ваш dbt проект на платформе Databricks Lakehouse, чтобы он масштабировался от небольшой команды до крупной организации.
Настройка окружений Databricks
Для начала мы будем использовать Unity Catalog от Databricks. Без него мы не смогли бы создать отдельные окружения для разработки и производства в соответствии с нашими лучшими практиками. Это также позволяет нам гарантировать, что правильные контрольные доступы были применены с использованием SQL. Вам нужно будет использовать адаптер dbt-databricks для его использования (в отличие от адаптера dbt-spark).
Мы создадим два разных каталога в Unity Catalog: dev и prod. Каталог — это контейнер верхнего уровня для схем (ранее известных как базы данных в Databricks), которые, в свою очередь, содержат таблицы и представления.
Наш dev каталог будет средой разработки, с которой аналитические инженеры взаимодействуют через свои IDE. Разработчики должны иметь свою собственную песочницу для создания и тестирования объектов без опасения перезаписать или удалить работу коллеги; мы рекомендуем создавать личные схемы для этой цели. С точки зрения разрешений, они должны иметь доступ только к каталогу dev.
Только производственные запуски будут иметь доступ к данным в каталоге prod. В будущем руководстве мы обсуд им каталог test, где наша система непрерывной интеграции/непрерывного развертывания (CI/CD) сможет запускать dbt test
.
Пока давайте упростим и создадим два каталога либо с помощью Data Explorer, либо в SQL редакторе с помощью этих команд:
create catalog if not exists dev;
create catalog if not exists prod;
Пока вашему разработчику предоставлен доступ на запись в каталог данных dev, нет необходимости заранее создавать песочницы-схемы.
Настройка сервисных принципалов
Когда аналитический инженер запускает dbt проект из своей IDE, вполне нормально, что полученные запросы выполняются с идентичностью этого пользователя. Однако мы хотим, чтобы производственные запуски выполнялись с идентичностью сервисного принципала. Напомним, что сервисный принципал — это учетная запись без привязки к конкретному человеку.
Сервисные принципалы используются для исключения людей из процесса развертывания в производственной среде для удобства и безопасности. Личные идентичности не должны использоваться для создания производственных конвейеров, так как они могут сломаться, если пользователь покинет компанию или изменит свои учетные данные. Также не должно быть произвольных команд, изменяющих производственные данные. Только запланированные задания и код, прошедший тесты CI и код-ревью, должны иметь возможность изменять производственные данные. Если что-то ломается, есть аудируемый след изменений, чтобы найти коренную причину, легко вернуться к последней рабочей версии кода и минимизировать влияние на конечных пользователей.
Давайте создадим сервисный принципал в Databricks:
- Попросите администратора вашего аккаунта Databricks добавить сервисный принципал в ваш аккаунт. Имя сервисного принципала должно отличаться от идентификатора пользователя и четко указывать на его назначение (например, dbt_prod_sp).
- Добавьте сервисный принципал в любые группы, членом которых он должен быть на данный момент. Более подробная информация о разрешениях содержится в нашем руководстве "Лучшие практики Unity Catalog".
- Добавьте сервисный принципал в ваше рабочее пространство и примените все необходимые права, такие как доступ к Databricks SQL и доступ к рабочему пространству.
Настройка вычислительных ресурсов Databricks
Когда вы запускаете dbt проект, он генерирует SQL, который может выполняться на кластерах общего назначения или SQL складах. Мы настоятельно рекомендуем запускать SQL, сгенерированный dbt, на SQL складе Databricks. Поскольку SQL склады оптимизированы для выполнения SQL запросов, вы можете сэкономить на стоимости за счет меньшего времени работы кластера, необходимого для выполнения запросов. Если вам нужно отладить, у вас также будет доступ к профилю запроса. Мы рекомендуем использовать безсерверный кластер, если вы хотите минимизировать время, затрачиваемое на запуск кластера, и устранить необходимость изменения размеров кластера в зависимости от рабочих процессов.
Давайте создадим SQL склад Databricks:
- Нажмите SQL Warehouses в боковой панели.
- Нажмите Create SQL Warehouse.
- Введите имя для склада.
- Примите настройки склада по умолчанию или измените их.
- Нажмите Create.
- Настройте разрешения склада, чтобы гарантировать, что наш сервисный принципал и разработчик имеют правильный доступ.
Мы не рассматриваем Python в этом посте, но если вы хотите узнать больше, ознакомьтесь с этими документами. В зависимости от вашей рабочей нагрузки, вы можете создать более крупный SQL склад для производственных рабочих процессов, имея при этом меньший склад для разработки (если вы не используете безсерверные SQL склады). По мере роста вашего проекта вы можете применить конфигурации вычислений для моделей.
Настройка вашего dbt проекта
Теперь, когда компоненты Databricks настро ены, мы можем настроить наш dbt проект. Это включает в себя подключение dbt к нашему SQL складу Databricks для выполнения SQL запросов и использование системы контроля версий, такой как GitHub, для хранения нашего кода трансформации.
Если вы мигрируете существующий dbt проект с адаптера dbt-spark на dbt-databricks, следуйте этому руководству по миграции, чтобы переключить адаптеры без необходимости обновления учетных данных разработчика и других существующих конфигураций.
Если вы начинаете новый dbt проект, следуйте приведенным ниже шагам. Для более подробного процесса настройки ознакомьтесь с нашим руководством по быстрому старту.
Подключение dbt к Databricks
Сначала вам нужно подключить ваш dbt проект к Databricks, чтобы он мог отправлять инструкции по трансформации и создавать объекты в Unity Catalog. Следуйте инструкциям для dbt Cloud или Core, чтобы настроить учетные данные подключения вашего проекта.
Каждый разработчик должен сгенерировать свой Databricks PAT и использовать токен в своих учетных данных для разработки. Они также укажут уникальную схему разработчика, которая будет хранить таблицы и представления, сгенерированные dbt запусками из их IDE. Это обеспечивает изолированные среды разработчиков и гарантирует, что доступ к данным соответствует назначению.
Давайте сгенерируем персональный токен доступа Databricks (PAT) для разработки:
- В Databricks нажмите на ваше имя пользователя в верхней панели и выберите User Settings в выпадающем меню.
- На вкладке Access token нажмите Generate new token.
- Нажмите Generate.
- Скопируйте отображаемый токен и нажмите Done. (не потеряйте его!)
Для ваших учетных данных разработки/profiles.yml:
- Установите ваш каталог по умолчанию на dev.
- Ваша схема разработчика должна быть названа в честь вас. Мы рекомендуем dbt_<первая_буква_имени><фамилия>.
Во время первого вызова dbt run
, dbt создаст схему разработчика, если она еще не существует в каталоге dev.
Определение среды развертывания dbt
Нам нужно дать dbt способ развертывания кода вне сред разработки. Для этого мы будем использовать окружения dbt, чтобы определить производственные цели, с которыми будут взаимодействовать конечные пользователи.
Core проекты могут использовать цели в профилях для разделения окружений. Окружения dbt Cloud позволяют вам определять окружения через интерфейс и планировать задания для конкретных окружений.
Давайте настроим нашу среду развертывания:
- Следуйте инструкциям Databricks, чтобы настроить токен вашего сервисного принципала. Обратите внимание, что
lifetime_seconds
определит, как долго эти учетные данные будут оставаться действительными. Вы должны использовать большое число здесь, чтобы избежать частого регенерирования токенов и сбоев производственных заданий. - Теперь давайте вернемся к dbt Cloud, чтобы заполнить поля окружения. Нажмите на окружения в интерфейсе dbt Cloud или определите новую цель в вашем profiles.yml.
- Установите каталог производственной среды на prod каталог, созданный выше. Предоставьте сервисный токен для вашего prod сервисного принципала и установите его как токен в учетных данных развертывания вашей производственной среды.
- Установите схему по умолчанию для вашей prod среды. Это может быть переопределено пользовательскими схемами, если вам нужно использовать более одной.
- Предоставьте токен вашего сервисного принципала.
Подключение dbt к вашему git репозиторию
Далее вам понадобится место для хранения и контроля версий вашего кода, которое позволит вам сотрудничать с коллегами. Подключите ваш dbt проект к git репозиторию с помощью dbt Cloud. Core проекты будут использовать git CLI.
Следующие шаги
Теперь, когда ваш проект настроен, вы можете начать трансформировать ваши данные в Databricks с помощью dbt. Чтобы помочь вам масштабироваться эффективно, мы рекомендуем следовать нашим лучшим практикам, начиная с лучших практик Unity Catalog, затем вы можете оптимизировать модели dbt на Databricks.