lab8
Описание
Лабораторная работа 8: Тестирование ETL пайплайна
Языки
- Python100%
Лабораторная работа 8: Тестирование ETL пайплайна
Описание проекта
Этот проект демонстрирует тестирование ETL (Extract, Transform, Load) пайплайна для обработки данных о сотрудниках.
Структура проекта
lab8/
├── data/
│ └── raw_data.csv # Исходные данные
├── tests/
│ └── test_etl.py # Базовые тесты ETL пайплайна
├── etl_pipeline.py # Основной ETL пайплайн
├── test_data_quality.py # Тесты качества данных (Great Expectations)
├── test_performance.py # Тесты производительности
├── run_all_tests.py # Скрипт для запуска всех тестов
├── requirements.txt # Зависимости проекта
└── employees.db # База данных SQLite (создается автоматически)
Установка
- Установите зависимости:
Или установите пакеты напрямую:
Запуск проекта
1. Запуск ETL пайплайна
Это создаст базу данных с обработанными данными.
2. Запуск всех тестов
Или запустите тесты по отдельности:
Описание тестов
Базовые тесты (tests/test_etl.py)
- проверяет корректность извлечения данных из CSVtest_extract()- проверяет преобразование данных (добавление новых полей, категоризация)test_transform()- проверяет загрузку данных в базу данныхtest_load()- проверяет базовое качество данных (отсутствие пустых значений, валидность диапазонов)test_data_quality()
Тесты качества данных (test_data_quality.py)
Проверяет качество данных с помощью pandas и стандартных проверок:
- Наличия всех необходимых колонок
- Уникальности идентификаторов
- Отсутствия пустых значений
- Валидности диапазонов значений (возраст, зарплата)
- Допустимых значений департаментов
Примечание: Изначально планировалось использовать Great Expectations, но из-за изменений в API новой версии (1.9.2) тесты были упрощены для использования стандартных методов pandas, что делает их более надежными и простыми в поддержке.
Тесты производительности (test_performance.py)
- проверяет время выполнения ETL процессаtest_performance()- проверяет использование памятиtest_memory_usage()
Проблемы и решения
Проблема 1: Совместимость pandas с Python 3.13
Проблема: Изначально использовалась версия pandas 2.0.3, которая не компилируется с Python 3.13 из-за проблем с компиляцией C-расширений.
Решение: Обновлены версии пакетов до более новых, которые поддерживают Python 3.13:
- pandas 2.3.3 (вместо 2.0.3)
- pytest 9.0.1 (вместо 7.4.0)
- great-expectations 1.9.2 (вместо 0.17.0)
Проблема 2: Изменение API Great Expectations
Проблема: В новых версиях Great Expectations (1.9.2) изменился API. Метод больше не доступен, а модуль был удален.
Решение: Упрощены тесты качества данных, используя прямые проверки pandas DataFrame вместо устаревшего API Great Expectations. Все проверки качества данных выполняются через стандартные методы pandas.
Проблема 3: Использование python vs python3
Проблема: На macOS команда может быть недоступна, нужно использовать .
Решение: В README указано использовать для запуска скриптов. Все команды в проекте используют .
Проблема 4: Импорт модулей
Проблема: При запуске тестов возникали ошибки импорта модулей.
Решение: Убедились, что все файлы находятся в правильной структуре директорий и используются относительные импорты. Добавлен файл для правильной работы pytest.
Результаты тестирования
После успешного запуска всех тестов вы должны увидеть:
- ✅ Все тесты пройдены
- ✅ База данных
созданаemployees.db - ✅ Все проверки качества данных выполнены успешно
Технологии
- Python - основной язык программирования
- Pandas - для работы с табличными данными
- SQLite - база данных для хранения результатов
- pytest - фреймворк для тестирования
- Great Expectations - библиотека для проверки качества данных