- создаем проект в pycharm
- создаем
python -m venv .venv
или автоматически - активируем окружение
source .venv/bin/activate
- грузим библиотеки
pip install dbt
pip install markupsafe==2.0.1
- проверяем версию
dbt --version
- инициализируем проект
dbt init [имя проекта]
создастся одноименная папка с костяком ососбое внимание к файлу dbt-project.yml - создем docker-compose.yml там пропишем:
- версию postgres
- логин пароль с postgres
- путь к папке с РАСПАКОВАННЫМ бэкапом.zip или .tar с базой postgres типа - ./dvdrental:/dvdrental
- путь к папке с базой типа - .db/:/var/lib/postgresql/data
- прописываем порты типа [любой]:5432
- комментируем в файле build и context
docker-compose up --build
- должен запуститься контейнер
- переходим в контейнер
docker exec -it [id container] bash
- там восстанавливаем базу
pg_restore -U postgres -d dvdrental /dvdrental
где:
- -U это пользователь
- -d это имя базы
- /папка с разархивированным бэкапом
- либо эта база будет исходной сырой базой, которую будем транформировать в витрины
- создаем профиль в корневой папке компа .dbt файл profile.yml
- название профиля должно совпадать с названием проекта и названием profile: 'имя проекта=профиля' в файле dbt-project.yml из пункта 6.
- транформации=модели=задачки находятся в папке models в которой есть подпапки
- в папке с моделями создаем файл и описанием источника sourcr.yml
- перед запуском помпилируем модели
dbt compile
- модели запускаются
dbt run
. Если профиль прописан нормально, то запустятся абсолютно все - запустить конкрктную модель
dbt run -m [имя модели без .sql]
- чтобы результирующие сущности материализовывались в таблицы или вьюхи проиписываем это в файле dbt-project.yml в разделе models: либо в самом файле с моделью типа {{ config(materialized='table') }}
- снапшоты задаем в папке snapshots как файлы.sql
- там прописываем целевую схему со снапшотами столбуц с ключом и и временной меткой
- Запускаем командой
dbt snapshot
- в результате в снапшотной схеме появится таблица похожая на исходную со спец полями по стандарту SCD2
- использует добавление новой строки и дополнительных столбцов. Такой подход позволяет сохранить историчность.
- для запуска вебинтерфрейса
dbt docs generate
для создания документа с документацией без него не будет работать - потом
dbt docs serve --port 8001
обычно порт занят под airflow так что принудительно задаем иной порт - как писал ранее все преобразования прописаны в sql файлах в моделях
- лучше все делать по принципу ELT т.е. простыми селектами переносить из
исходной схемы в стэйджинговую нужные таблицы а потом дугими моделями делать
более слежные штуки с джойнами и проч хуйней через конструкции типа
select *, from {{ref("tab1")}} t1 join {{ref("tab2")}} t2 on t1.id = t2.id
- эти цепочки отделных задачак будут видны в ДАГах в UI
- тэги задаются в файле dbt-project.yml в разделе с моделями
- удобно будет запускать
dbt run -m tag:[имя тэга]
чтоб не хуярить все подряд - тесты пишем как запросы в sql файлах в папке tests. Если тест что-то вернул значит он провалился
т.е. если нам нужно отловить пропуск мы пишем
select * from {{ref ("таблица")}} where поле is null
если пропуск в этой таблице этом поле есть вернется что-то значит тест провалился так можно записывать любую хуйню. типа:
- дата конца меньше чем дата начала,
- сумма > какого-то порога
- количество < 0
- и т.д.
- Устанавливаем расширения добавлением в папку проекта файл
pakages.yml