Форматы Flashcards
(6 cards)
Какие есть форматы файлов? #wildberries
- Текстовые форматы:
- CSV (Comma-Separated Values), TSV (Tab-Separated Values):
o Простая строчно-ориентированная структура, легко читается человеком.
o Нет встроенной схемы (типы данных не указаны), приходится определять их отдельно.
o При больших объёмах данных плохо сжимаются (как правило, сжатие происходит «целиком файлом» без особой эффективности по колонкам). - JSON (JavaScript Object Notation), XML:
o Текстовые форматы для хранения структурированных (часто иерархических) данных.
o JSON более компактен, чем XML, и проще в обработке. XML имеет гибкие возможности по описанию структуры (XSD), но его парсинг более тяжёлый.
o Подходят для обмена данными между сервисами, логов или конфигураций, но на больших объёмах могут быть избыточны по размеру и не так эффективны для аналитики. - Бинарные форматы:
- Avro:
o Бинарный формат с явной схемой, которая обычно хранится в отдельном месте или в заголовке файла.
o Удобен для потоковой передачи (Kafka) и RPC (например, Confluent Schema Registry).
o Объём данных меньше, чем в JSON (так как используется бинарное кодирование). - Parquet:
o Колоночный бинарный формат.
o Очень эффективное сжатие и оптимизация выборки по столбцам (считываются только нужные колонки).
o Идеально подходит для аналитических систем (Hive, Spark, ClickHouse, Presto и т. п.). - ORC (Optimized Row Columnar):
o Также колоночный формат (похож на Parquet).
o Высокая степень сжатия, хранит статистику по колонкам, что ускоряет аналитические запросы. - Protocol Buffers (Protobuf), Thrift:
o Бинарные форматы сериализации с жёстко заданной схемой (описание в .proto или .thrift).
o Используются в RPC, могут сохраняться в файлах, но чаще — для передачи сообщений между сервисами. - ORC vs AVRO vs Parquet #wildberries
- ORC (Optimized Row Columnar):
o Разработан в основном для экосистемы Hadoop/Hive, колоночная структура.
o Поддерживает высокую степень компрессии и возможность «вычитывать» только нужные колонки.
o Хорош для аналитических запросов в Hive, Spark, Presto. - Avro:
o Формат с гибкой схемой (схема хранится отдельно или в заголовке файла).
o «Строчно-ориентирован» (row-based) в сравнении с Parquet/ORC (хотя внутри использует бинарное представление).
o Очень удобен для стриминга и RPC, где важна эволюция схемы (Schema Evolution).
o Размер файлов меньше, чем у JSON, но не настолько эффективен для сложных аналитических запросов, как колоночные форматы. - Parquet:
o Тоже колоночный формат, очень популярен в экосистеме Big Data (Spark, Hive, Druid и т. д.).
o Высокая степень сжатия, возможность чтения только нужных колонок.
o Хорошо работает с аналитическими нагрузками и SQL-запросами, где нужно сканировать гигантские таблицы, но не все столбцы сразу.
Чем отличается формат Parquet от CSV? #Билайн
- Parquet:
o Колоночный, бинарный формат.
o В файле хранятся метаданные о типах колонок, сжатие тоже идёт по колонкам (col-based compression), что даёт высокий коэффициент сжатия и быстрые запросы.
o При чтении можно «пропустить» ненужные колонки, улучшая производительность анализа больших датасетов.
o Часто используется в современных системах Big Data (Spark, Hive, Impala, Presto). - CSV:
o Текстовый, строчно-ориентированный (каждая строка файла соответствует одной «записи», столбцы разделены запятой/точкой с запятой/табуляцией и т. п.).
o Нет встроенной схемы: типы данных и структура нужно определять отдельно.
o Неэффективен для сложных аналитических запросов (нет «skip» столбцов, придётся парсить каждую строчку).
o Хорош для простых переносов данных между системами, когда нет строгих требований к эффективности хранения.
Вывод: Parquet существенно выигрывает в эффективности хранения и чтения в аналитических сценариях, тогда как CSV проще и более универсален для обмена, но хуже масштабируется на больших объёмах.
Чем формат Avro от JSON отличается? #Билайн
- Avro:
o Бинарный формат сериализации.
o Схема (schema) хранится в отдельном файле или в заголовке, позволяя однозначно трактовать типы и структуру данных.
o Из-за бинарной природы размер обычно заметно меньше, чем у текстового JSON.
o Поддерживает «evolution» схемы: если схема меняется, можно работать со старыми данными, аккуратно подгоняя поля или используя настройки совместимости. - JSON:
o Текстовый формат, человекочитаемый.
o Нет явного описания «схемы» внутри (можно использовать схемы JSON Schema, но это опционально).
o Легко проверять и отлаживать «на глаз», отправлять по HTTP и т.д.
o Менее эффективен по объёму и скорости парсинга на больших объёмах.
Вывод: Avro — лучше при больших потоках, требующих минимального места и чёткого контроля версий. JSON — проще для чтения и «ad-hoc» сценариев, но больше «весит» и не так строг со схемой.
С какими бинарными форматами работал? #wildberries
- Avro: использовал для стриминга через Kafka (с Schema Registry), легко изменять схему при добавлении/удалении полей.
- Parquet: применял в Spark/Databricks для аналитических задач, оптимизация select и агрегаций.
- ORC: похожая сфера использования, чаще в Hive.
- Protocol Buffers (Protobuf): при разработке микросервисов (gRPC), для быстрой коммуникации сервис-сервис.
- Thrift: аналогично Protobuf, бинарный RPC протокол
Какие плюсы от Parquet | ORC? Почему не в CSV все храним? #wildberries
Плюсы Parquet/ORC:
1. Колоночная структура: можно читать только нужные столбцы, в больших таблицах это экономит массу времени и IO.
2. Эффективное сжатие: колоночные данные обычно однотипны, сжимать их проще и лучше, чем разрозненные строки.
3. Статистика в файлах (мин/макс значения колонок), что позволяет «пропускать» ненужные блоки при запросах (predicate pushdown).
4. Чёткая схема: типы столбцов хранятся в метаданных, нет путаницы при чтении.
* Почему не CSV:
1. CSV — это простой текст, неэффективен по размеру (нет умной компрессии по столбцам).
2. При чтении нужно парсить каждую строку и разбивать на колонки, что дорого на больших объёмах.
3. Нет встроенной информации о типах данных — нужны отдельные преобразования/документация.
CSV vs JSON разница #Ярослав
- CSV:
o Строго табличная структура. Каждая строка — одна запись, поля разделены запятыми/табуляцией.
o Не годится для вложенных структур (например, массивов, объектов внутри поля) без нестандартных ухищрений.
o Очень простой и лёгкий для импорта/экспорта в Excel, PostgreSQL, и т. д. - JSON:
o Иерархическая/структурированная модель: можно передавать объекты, массивы, вложенные документы.
o Текстовый формат, но более объёмный, чем CSV (так как содержит теги/ключи, скобки и т. д.).
o Удобен для REST API, хранения логов, обмена сложными сообщениями.
Вывод: CSV хорош для простой табличной структуры (без вложений), JSON — для более сложных объектов и иерархий. По размеру JSON чаще всего больше, а CSV проще в парсинге при «прямолинейных» данных.