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

Лучшие практики для dbt и Unity Catalog

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

Изолируйте ваши данные уровня Bronze (также известные как исходные данные)

Мы рекомендуем использовать Unity Catalog, так как он позволяет ссылаться на данные по всей вашей организации из любого другого каталога, устаревшего Hive метахранилища, внешнего метахранилища или выходных данных из Delta Live Table. Кроме того, Databricks предлагает возможность взаимодействовать с внешними данными и поддерживает федерацию запросов ко многим решениям баз данных. Это означает, что ваши среды разработки и производства будут иметь доступ к вашим исходным данным, даже если они определены в другом каталоге или внешнем источнике данных.

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

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

Если для исходных данных используются разные каталоги/схемы данных в зависимости от среды, вы можете использовать target.name, чтобы изменять каталог/схему, из которой вы читаете данные, в зависимости от среды.

Если вы используете несколько рабочих пространств Databricks для изоляции разработки от продакшена, вы можете использовать переменные окружения dbt в строках конфигурации подключения, чтобы ссылаться на несколько рабочих пространств из одного проекта dbt. Аналогичным образом можно настроить и SQL warehouse, чтобы использовать разные размеры в зависимости от среды.

Для этого используйте синтаксис переменных окружения dbt для Server Hostname (URL рабочего пространства Databricks) и HTTP Path (SQL warehouse) в настройках подключения. Обратите внимание, что Server Hostname всё равно должен выглядеть как валидное доменное имя, чтобы пройти проверки валидации, поэтому вам потребуется жёстко задать доменный суффикс в URL, например {{env_var('DBT_HOSTNAME')}}.cloud.databricks.com, а также префикс пути для ваших warehouse, например /sql/1.0/warehouses/{{env_var('DBT_HTTP_PATH')}}.

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

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

Контроль доступа

Для предоставления доступа потребителям данных используйте конфигурацию грантов dbt для применения разрешений к объектам базы данных, созданным моделями dbt. Это позволяет вам настраивать гранты как структурированный словарь, а не писать весь SQL самостоятельно, и позволяет dbt выбрать наиболее эффективный путь для применения этих грантов.

Для предоставления доступа потребителям данных используйте конфигурацию dbt grants config, чтобы применять права доступа к объектам базы данных, создаваемым моделями dbt. Это позволяет настраивать grants в виде структурированного словаря, а не писать весь SQL вручную, и даёт dbt возможность выбрать наиболее эффективный способ применения этих прав.

Сервисный принципал prod должен иметь доступ на "чтение" к сырым исходным данным и доступ на "запись" в каталоге prod. Если вы добавите каталог test и связанную среду dbt, вы должны создать выделенный сервисный принципал. Сервисный принципал теста должен иметь чтение на сырые исходные данные и запись в каталоге test, но не иметь разрешений в каталогах prod или dev. Выделенная тестовая среда должна использоваться только для тестирования CI.

Гранты на уровне таблицы:

Исходные данныеКаталог разработкиКаталог производстваКаталог тестирования
разработчикиselectselect & modifyselect или nonenone
сервисный принципал производстваselectnoneselect & modifynone
Сервисный принципал тестаselectnonenoneselect & modify
Loading table...

Гранты на уровне схемы:

Исходные данныеКаталог разработкиКаталог производстваКаталог тестирования
разработчикиuseuse, create schema, table, & viewuse или nonenone
сервисный принципал производстваusenoneuse, create schema, table & viewnone
Сервисный принципал тестаusenonenoneuse, create schema, table & view
Loading table...

Следующие шаги

Готовы начать преобразование ваших наборов данных Unity Catalog с помощью dbt?

Ознакомьтесь с ресурсами ниже для руководств, советов и лучших практик:

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

0
Loading