Ссылки:
Jinja and macros - https://docs.getdbt.com/docs/build/jinja-macros
dbt_project.yml - https://docs.getdbt.com/reference/dbt_project.yml
profiles.yml - https://docs.getdbt.com/docs/core/connect-data-platform/profiles.yml
Как запускать в проде (запускает только то что изменилось) - https://docs.getdbt.com/docs/deploy/ci-jobs#set-up-semantic-validations-in-your-ci-job
MacOS
python3 -m venv venv
source venv/bin/activate
Windows
python3 -m venv venv
source venv/bin/Activate.ps1
pip install -r requirements.txt
dbt --version
dbt init
Вводим название проекта: dbt_tutorial
Вводим какую бд вводим: [1] postgres
Вводим host: host_db
Вводим port: port_db
Вводим user: user_db
Вводим pass: pass_db
Вводим dbname: dbname
Вводим scheme: schema
Вводим threads: threads (кол-во параллельных подключений)
После данных действий должен создаться файлик profiles.yml. Где он лежит можно посмотреть с помощью команды dbt debug
Можно все созданные dbt папки перенести в корень проекта и удалить пустую папку(имеет название проекта, которое указывали ранее)
Папки для моделей models
Удобно разграничивать ХД по разным папкам
staging - источники данных
mart - таблица фактов
Примечание:
- для каждого слоя прописываем в .yml описание схемы и подключение к бд
- для каждого sql запроса прописываем настройки, тесты и тд.
- тесты generic data tests - тут прописываются для конкретных колонок, таблиц и т. д. https://docs.getdbt.com/best-practices/writing-custom-generic-tests
- singular test (кастомные тесты) - прописываются в паке tests)
- freshness test - тест, который проверяет свежесть данных (есть отдельная команда). Их используют для Source прежде чем строить дашборды и рассчитывать витрины https://docs.getdbt.com/docs/deploy/source-freshness, но можно попробовать и для других витрин. В проекте такая проверка идет для _jaffle_shop_sources.yml
- Для параметра description можно сделать централизованную доку https://docs.getdbt.com/reference/resource-properties/description#use-some-markdown-in-a-description
- Хорошая практика, когда каждая модель имеет уникальный ключ. В fct_orders.yml прописан data_tests: - dbt_utils.unique_combination_of_columns:
- Также можно назначить суррогатные ключи из нескольких колонок прямо в запросе. Но для этого необходимо установить packages. Прописываются в packages.yml
dbt deps
Создаться файлик package-lock.yml
Для примера запускаем определенную модель.
dbt run --select dim_customers
Важно: Работает только локально. Необходимо настроить github, для работы на удаленной машине github
Можно попробовать настроить https://sqlfluff.com/
После настройки .pre-commit-config.yaml устанавливаем - pre-commit install -> pre-commit installed at .git\hooks\pre-commit
Можно сделать описание изменений в файлике pull_request_template.md
- Добавляем в git
git add . - Делаем
git commit -m "comm" - После проверки повторяем 1 и 2 действия
- Делаем git push (если есть ошибки, можно почистить кеш см. ниже)
Если все сделано верно, то можно делать запрос на слияние. Обязательно делаем описание изменений. Pull Request (PR) — Запрос на слияние:
Pull Request (иногда также называемый Merge Request) — это механизм в системах контроля версий (таких как Git, GitHub, GitLab, Bitbucket), который позволяет разработчику запросить слияние изменений, сделанных в отдельной ветке (branch), в основную ветку (например, main, master или develop).
Merge Pull Request (Слияние Пул Реквеста): Это действие, которое происходит после того, как Pull Request (PR), также иногда называемый Merge Request (MR), прошел проверку (ревью) и утвержден. Оно означает, что изменения, предложенные в Pull Request, будут интегрированы в целевую ветку (обычно это основная ветка проекта, например, main или develop).
Настройка происходит в workflows
При пуше происходит запуск jobs в контейнере на ubuntu-latest.
uses: actions/checkout@v2 - копирует мой код на машину
python-version: 3.12 - устанавливает питон
name: Install dependencies - установка библиотек и создаем новое виртуальное окружение на удаленной машине
name: Run pre-commit on all changed files - выполняется pre-commit на удаленной машине
Далее аналогично как и с pre-commit
Проверка качества проекта
https://github.com/dbt-checkpoint/dbt-checkpoint
Добавляется в .pre-commit-config.yaml
check-model-has-description - проверка на наличие описания к каждому запросу модели
check-model-has-tests-by-group - проверка на наличие тестов к каждой модели (not_null, unique)
check-macro-has-description - проверка на наличие описания к каждому макросу
dbt docs generate
dbt docs serve --host localhost --port 8091
Необходимо перенести файл profiles.yml в репозиторий и прописать переменные окружения. В папке .github нужно прописать jobs для компиляции dbt проекта, а для github прописать секреты (подключение к базе). Также там прописываем копирование profiles.yml
Пояснения к созданным файлам:
dbt_project.yml - конфигурация проекта. В основном для редакции моделей. Там же хранится описание моделей -schema.yml
models - тут хранятся sql запросы
target - тут отображается все, что происходит. Там также хранятся скомпилированные sql запросы - compiled (можно удалять (dbt сам пересоздаст))
manifest.json - хранит описание проекта ДОБАВИТЬ КАТАЛОГ JSON - чуть позже добавится - dbt артефакты. При запуске dbt docs generate - источники файлов, которые служат дня наполнения веб страницы
logs - логи
_jaffle_shop_sources.yml - описание того, что есть в бд
tests - папка для кастомных тестов (singular test)
macros - макросы для последующего использования в моделях
Пометки:
pre-commit - инструмент, который позволяет автоматизировать проверку кода перед коммитом в репозиторий Git.
Необходимо создать .pre-commit-config.yaml
source - то просто ссылка на объект в БД
ref - это ссылка на объект внутри dbt-проекта
Пояснения к командам:
dbt run - запуск всех dbt models
dbt run --select models - запуск определенных моделей
dbt run --select tag:+tags - запуск определенных моделей по тегу
dbt test - запуск тестов (аналогично можно запускать как и run)
dbt build - запуск моделей и тестов (аналогично можно запускать как и run)
dbt build --select tag:mart --target dev --profiles-dir ~/.dbt/
--target dev - это параметр команды dbt build, который указывает dbt на то, какой профиль (конфигурацию) нужно использовать для подключения к базе данных.
dev - это имя целевого профиля, которое определено в profiles.yml файле.
profiles.yml. - Это профиль конфигурации, который содержит информацию для подключения к базе данных для разработки (development).
dbt debug - выводит информацию о вашей текущей dbt-среде, включая пути к конфигурационным файлам
dbt source freshness - запуск проверки свежести данных
git add . - добавление в git
git rm --cached -r . - очистка кеша
git push --set-upstream origin feature/new-dbt-model
--set-upstream - Этот флаг указывает Git на то, что нужно не только отправить изменения, но и настроить отслеживание (upstream tracking) между локальной и удаленной ветками.
origin - это имя удаленного репозитория, который обычно создается автоматически при клонировании репозитория.
feature/new-dbt-model - Это имя локальной ветки, которую отправляем на удаленный репозиторий.
git remote -v - список удаленных репозиториев в проекте.
git commit --no-verify -m "Ваше сообщение коммита" - коммит без pre-commit