ISPPO_HW_3
2 месяца назад
2 месяца назад
2 месяца назад
2 месяца назад
2 месяца назад
2 месяца назад
2 месяца назад
2 месяца назад
README.md
Проект конвейера данных
Гибкий, масштабируемый конвейер данных для извлечения, преобразования и загрузки данных о продажах из нескольких источников в несколько мест назначения.
Особенности
- Поддержка нескольких источников данных: JSON, CSV, REST API
- Поддержка нескольких приемников данных: SQLite, CSV
- Сопоставление полей и проверка данных
- Обработка ошибок и ведение журнала
- Конфигурация на основе окружения
- Включены модульные тесты
Требования
- Python 3.8+
- Зависимости перечислены в requirements.txt
Установка
- Клонируйте репозиторий
- Установите зависимости:
Использование
Запуск конвейера
Примеры:
Доступные параметры
: Тип источника (json, csv, api)--source: Тип приемника (sqlite, csv)--sink: Пользовательский путь к исходному файлу--source-path: Пользовательский путь к файлу/базе данных приемника--sink-path: Пользовательский URL API (для источника API)--api-url: Очистить существующие данные перед загрузкой--truncate
Тестирование источника API
Для тестирования с фиктивным сервером API:
Затем запустите конвейер:
Конфигурация
Переменные окружения можно задать в файле :.env
,DB_HOST,DB_PORT,DB_NAME,DB_USER- Настройки базы данныхDB_PASSWORD,API_URL- Настройки APIAPI_TIMEOUT,JSON_SOURCE_PATH- Пути к исходным файламCSV_SOURCE_PATH,OUTPUT_CSV_PATH- Выходные путиOUTPUT_DB_PATH,LOG_LEVEL- Настройки ведения журналаLOG_FILE
Архитектура
Проект следует модульной схеме:
: Реализации источников данныхextractors/: Логика преобразования данныхtransformers/: Реализации приемников данныхloaders/: Вспомогательные функции, такие как ведение журналаutils/: Модульные тестыtests/: Вспомогательные скрипты, такие как фиктивный сервер APIscripts/
Схема данных
Структура целевой таблицы ():fact_sales
| Поле | Тип | Описание |
|---|---|---|
| id | INTEGER | Автоинкремент (PK) |
| transaction_uid | VARCHAR | transaction_id |
| sale_date | DATE | date |
| product_id | VARCHAR | product.id |
| product_name | VARCHAR | product.name |
| product_category | VARCHAR | product.category |
| sale_amount | DECIMAL(10,2) | amount |
| customer_email | VARCHAR | customer.email |
| customer_tier | VARCHAR | customer.loyalty_tier |
| loaded_at | TIMESTAMP | Время загрузки (новое поле) |