Skip to content

Ascorbinushka/dbt_tutorial

Repository files navigation

dbt_tutorial

Ссылки:

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

Описание проекта

Создание схем и таблиц в бд

src

Создание и активация виртуального окружения

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

dbt --version

Создание dbt проекта

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

Установка packages

dbt deps

Создаться файлик package-lock.yml

Запуск моделей

Для примера запускаем определенную модель.

dbt run --select dim_customers

Настройка pre-commit

Важно: Работает только локально. Необходимо настроить github, для работы на удаленной машине github

Можно попробовать настроить https://sqlfluff.com/

После настройки .pre-commit-config.yaml устанавливаем - pre-commit install -> pre-commit installed at .git\hooks\pre-commit

Можно сделать описание изменений в файлике pull_request_template.md

Push проекта

  1. Добавляем в git git add .
  2. Делаем git commit -m "comm"
  3. После проверки повторяем 1 и 2 действия
  4. Делаем git push (если есть ошибки, можно почистить кеш см. ниже)

Pull request

Если все сделано верно, то можно делать запрос на слияние. Обязательно делаем описание изменений. Pull Request (PR) — Запрос на слияние:

Pull Request (иногда также называемый Merge Request) — это механизм в системах контроля версий (таких как Git, GitHub, GitLab, Bitbucket), который позволяет разработчику запросить слияние изменений, сделанных в отдельной ветке (branch), в основную ветку (например, main, master или develop).

Merge Pull Request

Merge Pull Request (Слияние Пул Реквеста): Это действие, которое происходит после того, как Pull Request (PR), также иногда называемый Merge Request (MR), прошел проверку (ревью) и утвержден. Оно означает, что изменения, предложенные в Pull Request, будут интегрированы в целевую ветку (обычно это основная ветка проекта, например, main или develop).

Настройка Actions GITHUB на проверки CI перед commit

Настройка происходит в 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

Настройка dbt-checkpoint

Проверка качества проекта

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

Работа dbt из github

Необходимо перенести файл 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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages