Skip to content

Latest commit

 

History

34 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CSV Processor

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

Файл должен быть валидным 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.4

Примеры запуска

Фильтрация

python 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.
  • Допустима работа только с предусмотренными схемами таблиц.
  • Возможно непредвиденное поведение при составлении неправильных запросов.

Примеры вывода

image

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages