Полный цикл аналитической разработки за пару минут

от автора

Сталкивались ли вы в вашей компании с проблемами?

  1. Невозможностью по-быстрому создать таблицу. Вместо этого нужно катить миграцию, получать апрувы от DWH, следить за тем чтобы таблица была производительна и тд

  2. Вам не нравится BI вашей компании или нравится но но хотелось бы делать визуализацию быстрее.

Если да, то эта статья для вас!

*Эта статья написана аналитиком для аналитиков! Если вы разработчик, DevOps или не дай бог DBA — уходите!
**Вообще эта статья может быть интересной людям двух категорий. Первая это те кто работают в крупных компаниях где уже выстроены процессы. Разработка идет медленно, а введение чего-то нового это та еще бюрократия. И нам нужно хакнуть эти замечательные процессы которые так долго строили.
Вторая — это голый стартап где еще нету ничего.
Есть наверное и третья это джуны. Если вы на собесе шарив экран как бы случайно покажите то чему научитесь тут — можете произвести хорошее впечатление:D

Прочитав эту статью вы научитесь разворачивать локально свою субд ( postgresql ) и BI (metabase). Это правда очень быстро. Это будет ваша маленькая анархия, вы сможете творить там все что угодно, у вас будут полные права которых вы бы никогда не увидели на прод решениях в компаниях.

Доцкер

Разворачивать мы все будем в докере, это самый простой у быстрый способ, поэтому дадим краткое объяснение что это такое ( можно пропустить без вреда на итоговый результат ).

Представьте, что вы пишете программу на языке Python. Эта программа работает на вашем компьютере, но для её успешного выполнения нужны определённые зависимости: версия языка, библиотеки и т.д. Если вы отправите свою программу другу, который запускает её на своём компьютере, существует вероятность, что она не сработает. Это связано с тем, что у него могут быть другие версии языка или библиотек.

Чтобы решить эту проблему, разработчики используют виртуальные окружения. Это пакеты, которые содержат вашу программу и все её зависимости, включая версии языка и библиотек. Однако, если вы разрабатываете программу на Mac, а ваш друг использует Windows 98, вам нужно будет упаковать не только язык и библиотеки, но и операционную систему.

И здесь на помощь приходит Docker. Docker позволяет создать «образ» — пакет, который включает вашу программу, язык, библиотеки и операционную систему. Docker — это программа, которая может запустить этот образ на любом компьютере, обеспечивая тем самым стабильную работу вашей программы независимо от окружения.

Установить его на свою тачку можно скачав файл выбрав свою ОС, я буду делать все на Mac OS.

Я же предпочитаю более простой способ установки, выполнить: brew install docker в терминале.

Отлично! У нас появился докер!

Создаем свой локальный postgresql

Всюду ниже я буду работать в PyCharm.
Для упорядоченности создаем отдельный проект в PyCharm ( на самом деле просто папка ), назовем его пусть my-postgres
В проекте создаем файл docker-compose.yml

И в сам файл закидываем образ нашей субд :

version: '3.8'  # Версия Docker Compose  services:   postgres:     image: postgres:latest  # Используем последний образ PostgreSQL     container_name: my-postgres  # Имя контейнера     environment:       POSTGRES_USER: myuser  # Имя пользователя для базы данных       POSTGRES_PASSWORD: mypassword  # Пароль для пользователя       POSTGRES_DB: my-postgres  # Имя создаваемой базы данных     ports:       - "5432:5432"  # Проброс порта 5432 для доступа к базе данных     volumes:       - pgdata:/var/lib/postgresql/data  # Создание тома для хранения данных  volumes:   pgdata:  # Определяем volume для хранения данных

Далее открываем терминал в докере который мы ранее установили и поднимаем бд:
docker-compose -f /< Абсолютный путь к файлу>/docker-compose.yml up -d

Должно появится такое:

Так выглядит успех

Так выглядит успех

Пробуем подключится из под DataGrip ( или любой другой клиент )

Приятное

Приятное

Создадим таблицу для примера:

CREATE TABLE employees (     id SERIAL PRIMARY KEY,     name VARCHAR(100),     age INT );

*Код выполняю в DataGrip, на забывайте смотреть и читать логи что возвращает субд на ваш запрос

И давайте сделаем то ради чего это затевалось, создадим DataFrame и запишем его в таблицу:

import pandas as pd from sqlalchemy import create_engine  # Подключение к базе данных PostgreSQL db_host = 'localhost' db_port = '5432' db_name = 'postgres'  # Имя создаваемой базы данных db_user = 'myuser'      # Имя пользователя для базы данных db_password = 'mypassword'  # Пароль для пользователя  # Создание подключения с использованием SQLAlchemy engine = create_engine(f'postgresql+psycopg2://{db_user}:{db_password}@{db_host}:{db_port}/{db_name}')  # Создание DataFrame с данными data = {     'name': ['Alice', 'Bob', 'Charlie'],     'age': [30, 25, 35] } df = pd.DataFrame(data)  # Запись данных в таблицу employees df.to_sql('employees', engine, if_exists='append', index=False)  print('Data inserted into PostgreSQL successfully')

После лога об успешном инсерте делаем select * from employees и получаем желаемое!

Кстати в реальных задачах я обычно беру df который мне нужно записать.
Делаю df.dtypes и отдаю это чат гпт, прошу создать create table.
Это сильно ускоряет и избавляет от однотипной рутины.

Пункт со звездочкой. Если вы хотите работать с большими данными и чтобы у вас не тупило на таблицы нужно навешивать индексы. Но часто на это можно забить.

Разворачиваем свой BI

Для тех кто уже работал с metabase ранее этот кусок будет лютая имба.
Создаем также новый проект ( опционально )
В нем также создаем файл docker-compose.yml ( если создаете в старом проекте то этот ямлик называйте иначе )
Пишем образ metabase:

version: '3' services:   metabase:     image: metabase/metabase:latest     ports:       - "3000:3000"     environment:       MB_DB_TYPE: "postgres" # Используем PostgreSQL       MB_DB_HOST: "postgres_metabase" # имя сервиса базы данных       MB_DB_USER: "metabase"       MB_DB_PASS: "password"       MB_DB_NAME: "metabase"       ports: "5433:5432"     volumes:       - metabase-data:/metabase.db    postgres_metabase:     image: postgres:latest     environment:       POSTGRES_DB: "metabase"       POSTGRES_USER: "metabase"       POSTGRES_PASSWORD: "password"       ports: "5433:5432"     volumes:       - postgres-data:/var/lib/postgresql/data  volumes:   metabase-data:   postgres-data:

И в терминале докера стартуем приложение:

docker-compose -f /< Абсолютный путь к файлу>/docker-compose.yml up -d

*Не забывайте пожалуйста что это новый образ, у него другой путь.
И дальше ждем.
Приложение тяжелое и разворачивается долго ( это окей если до 15 минут ).
Периодически можно поглядывать логи контейнеров.
Как поднимется заходим сюда: http://localhost:3000/
Пройдя базовые настройки попадаем на главную.

Далее можем подключить базы через интуитивный веб интерфейс ( управление -> базы данных ).

CH не будет из под коробки, но не пугайтесь там просто нужно будет добавить JDBC драйвер.


А что по итогу?

Теперь у меня есть своя бд и bi где я могу делать что угодно, супер быстро и с правами которых никогда не было.

Но что если мне нужно что-то показать менеджеру? Я скачиваю картинку из metabase и только так могу пошерить результат.

Могу ли сделать так чтобы мои отчеты были доступны другим? Если вы достаточно безумны то это реально.

По сути там нужно повторить весь флоу, предварительно создав виртуалку.
К примеру создаем ЯО, накатываем туда все необходимое ( в том числе и корпоративный vpn если доступ к вашим бд под только из под впн ).

С последним кстати могут быть проблемы так как Firewall не обойти и возможно нужно будет просить чтобы добавили в white list.

Виртуалка будет точно платная, в ЯО пожалуй самая дорогая но не так чтобы очень много, около 2к в месяц. Статичный IP будет дороже, а с динамичным замучаетесь если не дай бог вы действительно будете использовать это в прод:D


ссылка на оригинал статьи https://habr.com/ru/articles/873462/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *