Форматы Flashcards

(6 cards)

1
Q

Какие есть форматы файлов? #wildberries

A
  • Текстовые форматы:
  • 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-запросами, где нужно сканировать гигантские таблицы, но не все столбцы сразу.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Чем отличается формат Parquet от CSV? #Билайн

A
  • Parquet:
    o Колоночный, бинарный формат.
    o В файле хранятся метаданные о типах колонок, сжатие тоже идёт по колонкам (col-based compression), что даёт высокий коэффициент сжатия и быстрые запросы.
    o При чтении можно «пропустить» ненужные колонки, улучшая производительность анализа больших датасетов.
    o Часто используется в современных системах Big Data (Spark, Hive, Impala, Presto).
  • CSV:
    o Текстовый, строчно-ориентированный (каждая строка файла соответствует одной «записи», столбцы разделены запятой/точкой с запятой/табуляцией и т. п.).
    o Нет встроенной схемы: типы данных и структура нужно определять отдельно.
    o Неэффективен для сложных аналитических запросов (нет «skip» столбцов, придётся парсить каждую строчку).
    o Хорош для простых переносов данных между системами, когда нет строгих требований к эффективности хранения.
    Вывод: Parquet существенно выигрывает в эффективности хранения и чтения в аналитических сценариях, тогда как CSV проще и более универсален для обмена, но хуже масштабируется на больших объёмах.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Чем формат Avro от JSON отличается? #Билайн

A
  • Avro:
    o Бинарный формат сериализации.
    o Схема (schema) хранится в отдельном файле или в заголовке, позволяя однозначно трактовать типы и структуру данных.
    o Из-за бинарной природы размер обычно заметно меньше, чем у текстового JSON.
    o Поддерживает «evolution» схемы: если схема меняется, можно работать со старыми данными, аккуратно подгоняя поля или используя настройки совместимости.
  • JSON:
    o Текстовый формат, человекочитаемый.
    o Нет явного описания «схемы» внутри (можно использовать схемы JSON Schema, но это опционально).
    o Легко проверять и отлаживать «на глаз», отправлять по HTTP и т.д.
    o Менее эффективен по объёму и скорости парсинга на больших объёмах.
    Вывод: Avro — лучше при больших потоках, требующих минимального места и чёткого контроля версий. JSON — проще для чтения и «ad-hoc» сценариев, но больше «весит» и не так строг со схемой.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

С какими бинарными форматами работал? #wildberries

A
  • Avro: использовал для стриминга через Kafka (с Schema Registry), легко изменять схему при добавлении/удалении полей.
  • Parquet: применял в Spark/Databricks для аналитических задач, оптимизация select и агрегаций.
  • ORC: похожая сфера использования, чаще в Hive.
  • Protocol Buffers (Protobuf): при разработке микросервисов (gRPC), для быстрой коммуникации сервис-сервис.
  • Thrift: аналогично Protobuf, бинарный RPC протокол
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Какие плюсы от Parquet | ORC? Почему не в CSV все храним? #wildberries

A

Плюсы Parquet/ORC:
1. Колоночная структура: можно читать только нужные столбцы, в больших таблицах это экономит массу времени и IO.
2. Эффективное сжатие: колоночные данные обычно однотипны, сжимать их проще и лучше, чем разрозненные строки.
3. Статистика в файлах (мин/макс значения колонок), что позволяет «пропускать» ненужные блоки при запросах (predicate pushdown).
4. Чёткая схема: типы столбцов хранятся в метаданных, нет путаницы при чтении.
* Почему не CSV:
1. CSV — это простой текст, неэффективен по размеру (нет умной компрессии по столбцам).
2. При чтении нужно парсить каждую строку и разбивать на колонки, что дорого на больших объёмах.
3. Нет встроенной информации о типах данных — нужны отдельные преобразования/документация.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

CSV vs JSON разница #Ярослав

A
  • CSV:
    o Строго табличная структура. Каждая строка — одна запись, поля разделены запятыми/табуляцией.
    o Не годится для вложенных структур (например, массивов, объектов внутри поля) без нестандартных ухищрений.
    o Очень простой и лёгкий для импорта/экспорта в Excel, PostgreSQL, и т. д.
  • JSON:
    o Иерархическая/структурированная модель: можно передавать объекты, массивы, вложенные документы.
    o Текстовый формат, но более объёмный, чем CSV (так как содержит теги/ключи, скобки и т. д.).
    o Удобен для REST API, хранения логов, обмена сложными сообщениями.
    Вывод: CSV хорош для простой табличной структуры (без вложений), JSON — для более сложных объектов и иерархий. По размеру JSON чаще всего больше, а CSV проще в парсинге при «прямолинейных» данных.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly