Parquet — это колоночный (columnar) формат файлов, специально разработанный для обработки и анализа больших данных. Эффективность Parquet достигается за счёт ряда ключевых особенностей и оптимизаций.


📌 1. Колоночное хранение (Columnar Storage)

Parquet хранит данные по колонкам, а не по строкам.

Преимущества:

  • Чтение только нужных данных
    При аналитике часто используются лишь несколько колонок, и Parquet позволяет не читать ненужные данные, ускоряя запросы.

  • Эффективность сжатия
    Данные одной колонки обычно похожи, поэтому сжимаются лучше.

Пример:

Строковый (CSV) форматКолоночный (Parquet) формат
id,name,age
1,Анна,25
2,Олег,30
[id]: [1,2]
[name]: ["Анна","Олег"]
[age]: [25,30]

Итог: Минимальный объём чтения, максимальная производительность.


📌 2. Эффективное сжатие данных

Parquet поддерживает различные алгоритмы сжатия, такие как:

  • Snappy (быстрый) — компромисс между скоростью и степенью сжатия
  • Gzip (медленный) — высокая степень сжатия, ниже производительность
  • ZSTD (баланс) — эффективный современный алгоритм

Почему сжатие в Parquet эффективно?

  • Данные одной колонки обычно похожи друг на друга и лучше сжимаются.
  • Колоночная структура сама по себе позволяет достичь высокой степени сжатия.

Итог: Снижение стоимости хранения и ускорение чтения за счёт меньшего объёма данных.


📌 3. Использование статистик и метаданных

Parquet хранит статистики и метаданные внутри файла для каждой колонки и блока данных:

  • Минимальное и максимальное значение в колонке
  • Количество записей (row count)
  • Размер блока данных (data pages)

Это позволяет:

  • Отбрасывать ненужные блоки данных (predicate pushdown) при чтении.
  • Существенно ускорить фильтрацию и запросы с условиями (WHERE).

Итог: Запросы читают только релевантные данные.


📌 4. Структура файла Parquet

Parquet разделяет данные на:

  • Row Groups: большие блоки строк (по 128 MB и больше).
  • Column Chunks: отдельные блоки колонок внутри Row Group.
  • Data Pages: маленькие блоки данных внутри Column Chunks.

Это позволяет:

  • Параллельно и эффективно считывать данные.
  • Максимально использовать возможности многопроцессорной обработки.
Parquet File
├── Row Group 1
│   ├── Column Chunk (id)
│   │   ├── Data Page
│   ├── Column Chunk (name)
│   │   ├── Data Page
│   └── Column Chunk (age)
│       ├── Data Page
└── Row Group 2
    └── ...
 

Итог: Параллельная и быстрая обработка данных.


📌 5. Schema Evolution (эволюция схемы)

Parquet хранит метаданные о схеме внутри файла:

  • Добавление и удаление колонок происходит легко, без необходимости менять старые данные.
  • Возможность читать файлы разных версий схемы в едином запросе.

Итог: Простота поддержки изменения схемы в больших Data Lakes.


📌 6. Интеграция с экосистемой Big Data

Parquet поддерживается практически всеми инструментами и платформами Big Data:

  • Apache Spark, Apache Hadoop, Apache Hive, Presto (Trino), Dremio, Apache Drill.
  • Облачные платформы: Amazon S3, Azure Data Lake, Google Cloud Storage, Snowflake.

Итог: Универсальность и совместимость с различными инструментами обработки.


📌 7. Оптимизированные типы данных и вложенные структуры

Parquet оптимизирован для:

  • Стандартных типов (числа, строки, даты)
  • Сложных вложенных структур (JSON, Avro, структуры и массивы)

Итог: Гибкость хранения и производительность чтения вложенных данных.


🔥 Итоговая таблица: Почему Parquet эффективен?

Особенность ParquetЭффект
Колоночное хранениеБыстрое чтение, хорошее сжатие
Эффективное сжатиеСнижение объёма хранения
Статистики и метаданныеУскорение запросов и фильтрации
Row Groups и Column ChunksВысокая параллельность обработки
Schema EvolutionПростота изменений схемы
Интеграция с экосистемой Big DataСовместимость, лёгкость использования
Оптимизация типов данныхГибкость и производительность