Открыть сервис

Parquet

Parquet — это формат хранения данных в столбцовом (колоночном) представлении, разработанный для эффективного сжатия, кодирования и обработки больших объёмов структурированных и полуструктурированных данных. Parquet относится к классу открытых форматов файлов, оптимизированных для аналитических нагрузок в экосистеме больших данных (Big Data). Основные характеристики: высокая степень сжатия, поддержка сложных вложенных структур, совместимость с большинством фреймворков обработки данных (Apache Hadoop, Apache Spark, Apache Hive, Apache Impala, Apache Flink, Pandas, Dask) и облачных хранилищ (Amazon S3, Google Cloud Storage, Azure Blob Storage).

История

Формат Parquet был создан совместными усилиями компаний Twitter и Cloudera в 2013 году как проект с открытым исходным кодом. Разработка велась в рамках сообщества Apache Software Foundation. Первая стабильная версия (1.0) была выпущена в марте 2013 года. Основная мотивация создания Parquet — преодоление ограничений строковых форматов (CSV, JSON, Avro) при выполнении аналитических запросов, где требуется чтение только отдельных колонок. В 2015 году проект стал частью инкубатора Apache, а в 2017 году получил статус «Top-Level Project» Фонда Apache. С тех пор Parquet является одним из стандартов де-факто в области хранения данных для аналитики.

Архитектура и принципы работы

Parquet использует колоночное хранение: данные упорядочены не по строкам, а по столбцам. Это позволяет при выполнении запроса считывать только необходимые колонки, а не все поля записи, что существенно сокращает объём ввода-вывода (I/O). Формат поддерживает несколько уровней организации:

Физическая структура файла

Метаданные и схема

В Parquet метаданные хранятся в конце файла (footer). Метаданные содержат:

Кодирование и сжатие

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

Сжатие выполняется на уровне страниц по выбору пользователя. Поддерживаются алгоритмы: Snappy, Gzip, LZO, Brotli, LZ4, Zstd. Наиболее распространён — Snappy как компромисс между скоростью и степенью сжатия.

Вложенные структуры

Parquet поддерживает сложные типы данных (массивы, структуры, карты) с помощью модели «Dremel», разработанной в Google. Модель основана на концепции повторения (repetition) и определения (definition) уровней для каждого поля. Это позволяет хранить произвольно вложенные JSON-подобные объекты без потери информации и без избыточности.

Сравнение с другими форматами

ХарактеристикаParquet (колоночный)Avro (строковый)ORC (колоночный)CSV/JSON (строковый)
Оптимизация для чтенияТолько нужные колонкиВсе строки целикомТолько нужные колонкиВсе строки целиком
СжатиеВысокое за счёт словарей и страницУмеренное (по записям)Очень высокое (встроенные индексы)Низкое (текстовый)
Скорость записиСредняя (требуется статистика)ВысокаяСредняяВысокая
Поддержка вложенных структурПолная (модель Dremel)Полная (схема JSON)Частичная (сложные типы доступны)Ограниченная (JSON — строки)
ЭкосистемаШирокая (Spark, Hive, Impala, Flink)Широкая (Kafka, Hadoop)В основном Hadoop/HiveУниверсальная (любые инструменты)
Совместимость с языкамиJava, Python, C++, R, Go, RustJava, Python, C++, C#, RubyJava, C++, PythonВсе

Parquet и ORC (Optimized Row Columnar) являются основными конкурирующими колоночными форматами. ORC чаще используется в экосистеме Hive и обладает более продвинутыми встроенными индексами (Bloom filter, статистика), тогда как Parquet получил более широкую поддержку за пределами Hadoop (Spark, Pandas, AWS Glue, Google BigQuery).

Применение

Аналитика и Big Data

Parquet является основным форматом хранения данных в современных аналитических платформах:

Облачные хранилища

Файлы Parquet часто размещаются в объектных хранилищах (S3, GCS, ADLS) и используются в архитектурах типа Data Lake (озеро данных). Сочетание малого размера файла (благодаря сжатию) и колоночного доступа позволяет выполнять запросы напрямую к десяткам терабайт данных с минимальными затратами.

Python и Data Science

Библиотека pandas поддерживает чтение/запись Parquet через модуль pyarrow или fastparquet. Это даёт возможность сохранять на диск подготовленные датафреймы в компактном формате, ускоряя загрузку по сравнению с CSV или Pickle. Parquet также используется в Apache Arrow как нативный формат обмена данными.

Инструменты и экосистема

Ограничения

Интересные факты

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →