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 | Совместимость, лёгкость использования |
Оптимизация типов данных | Гибкость и производительность |