CSV Processor — это консольное приложение на Python для выполнения базовых SQL-подобных операций над CSV-файлами. Поддерживается простая фильтрация (WHERE) по одной колонке, агрегатные функции (AVG, MIN, MAX, COUNT) и выражения GROUP BY.
Этот проект вдохновлён архитектурой BusTub и PostgreSQL, а также некоторыми идеями из книги "Database System Concepts" авторов Abraham Silberschatz, Henry F. Korth, S. Sudarshan. За основы были взяты подходы к разделению ответсвенности, реализации Executors (Chain of Responsibility), а также полиморфные значения Value, и некоторые другие.
- Загрузка и обработка CSV-файлов.
- Фильтрация строк по значению в колонке с использованием операторов
=,<,>. - Агрегация по колонкам с использованием функций
count,avg,min,max. - Архитектура, допускающая расширение набора операций, типов агрегаций и типов.
- Покрытие 98% кода тестами с использованием
pytest. - Вывод результатов в виде таблицы с помощью библиотеки
tabulate. - Поддержка параметров командной строки через
argparse.
Установка зависимостей:
pip install -r requirements.txt.env файл должен содержать
PYTHONPATH=srcФайл должен быть валидным CSV с заголовком. Пример:
name,brand,price,rating
iphone 15 pro,apple,999,4.9
galaxy s23 ultra,samsung,1199,4.8
redmi note 12,xiaomi,199,4.6
poco x5 pro,xiaomi,299,4.4python main.py --file data/phones.csv --where "brand=xiaomi"python main.py --file data/phones.csv --aggregate "price=avg"
python main.py --file data/phones.csv --aggregate "rating=max"| Аргумент | Описание |
|---|---|
--file |
Имя CSV-таблицы. Обязательно в папке data/ |
--table |
Alias к --file |
--where |
Условие фильтрации в формате column=value |
--aggregate |
Операция агрегации в формате column=operation |
--group-by |
Операция группировки в формате column=operation |
--sort |
Операция сортировки по колонке (только asc) |
--order-by |
Alias к --sort |
--offset |
Отсутуп от начала вывода |
--limit |
Ограничение количества строк на вывод |
Запуск тестов:
pytestЗапуск с проверкой покрытия:
pytest --covКлючевые компоненты:
Expression: абстракция для выражений: константы, операций (=,<,>) и колонки.AggregationExecutor: реализация агрегатных операций (avg,min,max).TableReader: слой чтения таблицы, абстрагированный от формата хранения.QueryPlanner: планировщик выполнения запроса.Executor: исполняет план, возвращая результат выборки или агрегации.
Архитектура позволяет добавлять новые типы, агрегацию и операторов без изменения существующего кода (OCP).
- Поддерживается фильтрация по одной колонке.
- Не реализованы составные условия (
AND,OR). - Поддерживается только сортировка
ascending. - Допустима работа только с предусмотренными схемами таблиц.
- Возможно непредвиденное поведение при составлении неправильных запросов.
