Skip to content
IRC-CodingIRC-Coding
форматы данныхCSVParquetJSONAvroORCSQLAzure

Форматы данных для SQL и Azure

Полный обзор форматов данных: CSV, Parquet, JSON, Avro, ORC для баз данных и Azure.

S

schutzgeist

10 min read
Форматы данных для SQL и Azure

Форматы данных для SQL: Avro, TXT, ORC, CSV, JSON, PARQUET

Почему форматы данных так важны?

Выбор формата данных напрямую влияет на эффективность и производительность систем обработки и хранения информации. Если вы готовитесь к сертификации Microsoft DP-203 или работаете с данными из разных источников, то вам не обойтись без понимания этой темы.

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

В этом материале мы рассмотрим основные форматы, упомянем OLTP и OLAP системы, но главный упор сделаем именно на форматы. В конце приведём примеры для закрепления знаний.

Обзор форматов: достоинства и недостатки

ФорматТипДостоинстваНедостаткиОптимален дляЗаменяет БДСкриптовая обработкаПрименение в AI
CSVСтрочный✓ Универсален<br/>✓ Легко читать/писать<br/>✓ Текстовый<br/>✓ Компактен для малых объёмов✗ Нет сжатия<br/>✗ Нет информации о схеме<br/>✗ Медленен на больших данных<br/>✗ Без типизацииМалые наборы, экспорт/импорт, ручная работа❌ Нет✓ Хорошо⚠️ Ограниченно
JSONСтрочный✓ Структурированные данные<br/>✓ Текстовый<br/>✓ Поддержка схемы<br/>✓ Веб-совместимость✗ Объёмнее CSV<br/>✗ Медленен на больших данных<br/>✗ Сложен для табличных данных<br/>✗ ДублированиеAPI, конфигурации, веб-сервисы, NoSQL⚠️ Частично✓ Хорошо✓ Очень хорошо
ParquetСтолбцовый✓ Высокое сжатие<br/>✓ Быстрый доступ по столбцам<br/>✓ Эволюция схемы<br/>✓ Оптимален для аналитики✗ Не читаемый для человека<br/>✗ Сложная настройка<br/>✗ Медленен при доступе по строкам<br/>✗ Лишняя память для малых данныхBig Data, аналитика, хранилища данных✓ Да⚠️ Специализированно✓ Очень хорошо
AvroСтрочный✓ Эволюция схемы<br/>✓ Хорошее сжатие<br/>✓ Быстрая запись<br/>✓ Потоковая обработка✗ Не читаемый для человека<br/>✗ Медленен при доступе по столбцам<br/>✗ Сложен для новичков<br/>✗ Ориентирован на JavaПотоки, события, микросервисы✓ Да✓ Хорошо✓ Хорошо
ORCСтолбцовый✓ Лучшее сжатие<br/>✓ Быстрая аналитика<br/>✓ Совместимость с Hive<br/>✓ Поддержка ACID✗ Сложный<br/>✗ Не читаемый для человека<br/>✗ Зависимость от Hive<br/>✗ Медленен при записиHadoop, Hive, Big Data аналитика✓ Да⚠️ Специализированно✓ Хорошо
XMLСтрочный✓ Структурированные данные<br/>✓ Валидация (XSD)<br/>✓ Пространства имён<br/>✓ Самоописываемость✗ Очень объёмный<br/>✗ Сложный<br/>✗ Медленен<br/>✗ УстаревшийЛегаси-системы, конфигурации, SOAP❌ Нет⚠️ Сложно⚠️ Редко
YAMLСтрочный✓ Очень читаемый<br/>✓ Удобен для конфигов<br/>✓ Поддержка комментариев<br/>✓ Структурированный✗ Медленен<br/>✗ Сложен для больших данных<br/>✗ Чувствителен к ошибкам<br/>✗ Слабое сжатиеКонфигурационные файлы, DevOps, Docker❌ Нет✓ Хорошо⚠️ Редко

Пояснения к шкалам оценки:

  • Заменяет БД: может ли формат служить хранилищем данных?
  • Скриптовая обработка: удобен ли для автоматизированной обработки?
  • Применение в AI: подходит ли для машинного обучения и AI?

Основные причины, почему выбор формата критичен:

  • Производительность и эффективность Разные форматы оптимизированы под разные сценарии. Правильный выбор существенно ускоряет запросы, чтение и запись.

  • Экономия дискового пространства Некоторые форматы обеспечивают лучшую компрессию, что снижает потребление памяти. Это особенно важно при работе с большими объёмами данных.

  • Совместимость Формат влияет на возможность интеграции с разными системами и инструментами. Одни форматы лучше работают с конкретными технологиями.

  • Целостность данных и эволюция схемы Форматы вроде Avro и Parquet хранят информацию о схеме вместе с данными, что упрощает эволюцию и валидацию.

  • Специфические требования Разные задачи требуют разной структуры и разных способов доступа к данным. Формат выбирается под конкретные нужды.

Разница между строчным и столбцовым хранением

Упрощённо: хотя таблица состоит из строк и столбцов, разница в том, как данные физически организованы на диске и как их обрабатывает система. Это сильно влияет на скорость операций.

Вот подробное объяснение:

Строчное хранение (Row-based Storage)

Определение При строчном хранении все значения одной строки сохраняются подряд. Каждая строка это полный набор данных.

Пример: Таблица с информацией о клиентах:

КлиентIDИмяВозрастГород
1Alice30Bochum
2Bob25Essen
3Charlie35Dortmund

В строчном хранении каждая строка сохраняется как единое целое.

Достоинства:

  • Эффективность транзакций Идеально для OLTP систем, где часто читают и пишут целые строки. Это обеспечивает быстрые операции вставки, обновления и удаления.

  • Простота управления Интуитивная модель данных, отражающая естественную структуру большинства приложений.

Недостатки:

Неэффективно для аналитических запросов, которые работают с отдельными столбцами. При этом приходится читать ненужные данные.

Столбцовое хранение (Column-based Storage)

Определение При столбцовом хранении все значения одного столбца сохраняются подряд. Каждый столбец содержит все значения атрибута для множества строк.

Пример Та же таблица в столбцовом формате:

КлиентID: [1, 2, 3] Имя: [Alice, Bob, Charlie] Возраст: [30, 25, 35] Город: [Berlin, München, Hamburg]

Каждый столбец хранится отдельно.

Достоинства:

  • Производительность запросов Идеально для OLAP систем, где аналитические запросы часто касаются только конкретных столбцов. Это даёт более быстрые запросы и меньшую нагрузку на ввод-вывод.

  • Лучшая компрессия Похожие значения хранятся рядом, что улучшает сжимаемость и экономит место.

  • Эффективные агрегации Функции типа SUM, AVG, COUNT выполняются быстрее.

Недостатки:

Неэффективно для транзакций, когда нужно читать или писать целые записи. При этом требуется доступ к нескольким столбцам.

Краткий итог

Строчное хранение (Row-based Storage)

  • Оптимально для: OLTP систем с частыми транзакциями.
  • Достоинства: быстрое чтение и запись полных записей.
  • Форматы: CSV, JSON, Avro.

Столбцовое хранение (Column-based Storage)

  • Оптимально для: OLAP систем с аналитическими запросами.
  • Достоинства: быстрые запросы и эффективное сжатие.
  • Форматы: Parquet, ORC.

Выбор между строчным и столбцовым хранением зависит от конкретных задач. OLTP системы выигрывают от строчного формата, OLAP системы от столбцового.

OLTP и OLAP системы

Напоминаем основные определения:

OLTP системы (Online Transaction Processing) Системы для управления и обработки большого количества коротких онлайн-транзакций с частыми операциями чтения и записи. Типичны для e-commerce, банков и бухгалтерии, где критичны скорость и целостность данных.

OLAP системы (Online Analytical Processing) Системы для анализа больших объёмов данных с целью создания сложных отчётов и срезов. Типичны для хранилищ данных и Business Intelligence, где необходимы быстрые и эффективные запросы и агрегации.

Строчное против столбцового хранения в контексте OLTP и OLAP

Для полного понимания различий между этими подходами важно рассмотреть специфику OLTP и OLAP систем.

Строчное хранение (Row-based Storage)

Определение Данные сохраняются построчно, все значения одной строки хранятся подряд. Каждая строка это полный набор данных.

Типичное применение:

OLTP системы (Online Transaction Processing) Приложения на основе транзакций, например e-commerce, банкинг, учёт.

Достоинства:

  • Быстрая запись: полные записи сохраняются в одном месте, поэтому вставки и обновления выполняются быстро.
  • Эффективные транзакции: OLTP системы получают выгоду от быстрой обработки транзакций, так как целые строки читаются и пишутся быстро.
  • Простое управление: строчные базы проще проектировать и администрировать, так как структура обычно соответствует естественной организации данных.

Примеры форматов:

CSV: простой текстовый формат, широко распространённый и легко читаемый. JSON: текстовый формат, хорош для иерархических и вложенных данных. Avro: двоичный формат, оптимизирован для быстрой сериализации и десериализации.

Столбцовое хранение (Column-based Storage)

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

Типичное применение:

OLAP системы (Online Analytical Processing) Хранилища данных, Big Data аналитика, приложения Business Intelligence.

Достоинства:

  • Быстрые запросы: запросы, касающиеся только конкретных столбцов, выполняются очень быстро, так как нужно прочитать только релевантные столбцы.
  • Высокая компрессия: похожие значения хранятся рядом, поэтому столбцовые форматы достигают высокой степени сжатия и снижают потребление памяти.
  • Эффективные агрегации: функции вроде SUM, AVG, COUNT, MIN, MAX работают быстрее, так как данные обрабатываются по столбцам.

Примеры форматов:

Parquet: столбцовый формат, оптимизирован для высокой компрессии и эффективных запросов в среде Big Data. ORC: также столбцовый, особенно оптимизирован для окружения Hadoop с высокой степенью сжатия и быстрыми запросами.

Сравнение строчного и столбцового хранения

ХарактеристикаСтрочное (OLTP)Столбцовое (OLAP)
Стратегия храненияСтроки целикомСтолбцы целиком
Типичные приложенияСистемы с транзакциями (e-commerce, банки)Системы аналитики (хранилища данных)
Преимущества производительностиБыстрые транзакции и записьБыстрые запросы и агрегации
КомпрессияБолее низкие коэффициентыБолее высокие коэффициенты
ПримерыCSV, JSON, AvroParquet, ORC

Резюме

Строчное хранение (OLTP):

Идеально для систем, где часто читают и пишут полные записи. Типично для приложений, требующих быстрых операций вставки, обновления, удаления. Поддерживается форматами CSV, JSON и Avro.

Столбцовое хранение (OLAP):

Идеально для систем, обрабатывающих и агрегирующих большие наборы данных. Типично для хранилищ данных и Big Data аналитики, где производительность запросов и сжатие критичны. Поддерживается форматами Parquet и ORC.

Переходим к конкретным форматам

Чтобы получить полное представление о различных форматах данных в контексте SQL и Azure, рассмотрим Avro, TXT, ORC, CSV, JSON и Parquet, их достоинства и недостатки, а также различия между строчным и столбцовым подходом.

Форматы данных и их использование

1. Avro

Описание Строчный формат хранения, разработанный Apache. Специально спроектирован для эффективной обработки Big Data.

Достоинства Avro

  • Поддержка богатых типов данных и сложных структур.
  • Встроенная схема, упрощающая переносимость данных.
  • Отличен для сериализации и десериализации.
  • Использование: идеален для сохранения и передачи данных между различными Big Data инструментами.

2. TXT

Описание Один из самых простых и известных форматов: простой неструктурированный текстовый формат.

Достоинства:

  • Легко читать и писать.
  • Поддерживается везде.
  • Использование: подходит для простого логирования данных или передачи, когда структура не критична.

3. ORC (Optimized Row Columnar)

Описание Столбцовый формат хранения, оптимизированный для работы в Hadoop.

Достоинства

  • Высокая степень сжатия и низкое потребление памяти.
  • Оптимизированная производительность запросов благодаря столбцовому доступу.
  • Поддержка сложных типов данных и индексов.
  • Использование: идеален для хранилищ данных и Big Data аналитики, особенно при запросах на больших объёмах данных.

4. CSV (Comma-Separated Values)

Описание: Простой текстовый формат, где значения разделены запятыми.

Достоинства CSV

  • Легко создавать и читать.
  • Широко поддерживается базами данных и приложениями.
  • Использование: хорош для обмена данными между разными системами и простыми наборами данных.

5. JSON (JavaScript Object Notation)

Описание Текстовый формат для представления структурированных данных на основе синтаксиса JavaScript.

Достоинства JSON:

  • Читаемый для человека и легко отлаживаемый.
  • Поддерживает иерархические и вложенные структуры.
  • Широко распространён в веб-приложениях и API.
  • Использование: идеален для сохранения и передачи данных в веб-приложениях и API.

6. Parquet

Описание: Столбцовый формат хранения, оптимизированный для работы в Hadoop и других фреймворках обработки Big Data.

Достоинства: Эффективная компрессия данных и экономия пространства. Оптимизированная производительность благодаря столбцовому доступу. Поддержка сложных типов данных.

Использование

Идеален для аналитических запросов в хранилищах данных и Big Data аналитике.

Различия между построчным и постолбцовым хранением

Построчное (Row-based):

  • Данные хранятся построчно.

Подходит для транзакционных систем, где целые строки часто читаются и записываются. Примеры: Avro, TXT, CSV, JSON.

Постолбцовое (Column-based):

Данные хранятся постолбцово. Подходит для аналитических запросов, которые обращаются только к определённым столбцам и требуют меньше операций ввода-вывода. Примеры: ORC, Parquet.

Небольшой FAQ с примерами для разграничения:

Вопрос: Когда использовать Parquet вместо CSV?

Ответ: Parquet идеален для Big Data Analytics, так как он постолбцовый и обеспечивает лучшую производительность при запросах к конкретным столбцам. CSV лучше подходит для простого обмена данными и случаев, когда важна читаемость человеком.

Вопрос: Какие преимущества JSON имеет перед Avro для передачи данных в веб-приложениях?

Ответ: JSON читаем для человека и широко распространён в веб-приложениях и API. Хорошо подходит для иерархических структур данных. Avro в свою очередь обеспечивает лучшее сжатие и эффективность при передаче больших объёмов данных между инструментами Big Data.

Вопрос: В каком сценарии выбрать ORC вместо Parquet?

Ответ: Оба формата постолбцовые и оптимизированы для аналитических запросов. ORC может быть предпочтительнее, если на первый план выходит интеграция с экосистемой Hadoop или требуется особо высокая степень сжатия и поддержка сложных типов данных.

Резюме

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

Вот несколько общих рекомендаций:

  • Используйте Avro для сериализации и передачи Big Data.
  • Используйте TXT для простых неструктурированных данных.
  • Выбирайте ORC или Parquet для постолбцовых аналитических запросов.
  • Используйте CSV для простого обмена данными.
  • Выбирайте JSON для структурированных данных в веб-приложениях и API.

Что такое сериализация и десериализация

Часто встречается термин “сериализация”, но что он означает?

Сериализация

Процесс преобразования объекта данных в формат, который можно сохранить или передать. Это включает преобразование в такие форматы как JSON, Avro или Parquet.

Пример: объект Java преобразуется в JSON-строку для отправки по сети.

Десериализация

Обратный процесс сериализации, при котором сохранённый или переданный формат преобразуется обратно в объект данных.

Пример: JSON-строка преобразуется обратно в объект Java для дальнейшей обработки в программе.

Практические примеры использования форматов данных - SQL: Avro, txt, ORC, CSV, JSON, PARQUET

15 практических вопросов и ответов по форматам данных и их применению

Вопрос 1: Логи веб-сервера

Ситуация: Нужно хранить логи веб-сервера, состоящие в основном из текста, которые должны быть легко читаемы.

Ответ: TXT

Пояснение: TXT-файлы просто читаются и записываются, идеальны для простых неструктурированных текстовых данных вроде логов.


Вопрос 2: Большие аналитические данные

Ситуация: Работаете над анализом Big Data и нужно хранить большие объёмы данных постолбцово для оптимизации запросов.

Ответ: Parquet

Пояснение: Parquet - постолбцовый формат хранения, обеспечивающий эффективное сжатие и быстрые запросы при работе со столбцами.


Вопрос 3: Сложные структуры данных

Ситуация: Передаёте сложные, вложенные структуры данных между различными приложениями Big Data.

Ответ: Avro

Пояснение: Avro поддерживает сложные и вложенные типы данных, схема сохраняется вместе с данными, что облегчает взаимодействие между системами.


Вопрос 4: Передача данных через Web-API

Ситуация: Нужно передать данные из веб-приложения на сервер в формате, понятном человеку.

Ответ: JSON

Пояснение: JSON легко читается и широко распространён в веб-приложениях, идеален для передачи структурированных данных.


Вопрос 5: Универсальный обмен данными

Ситуация: Требуется обменяться табличными данными между различными базами данных и инструментами, поддерживающими один простой формат.

Ответ: CSV

Пояснение: CSV - широко распространённый формат табличных данных, поддерживается практически всеми БД и инструментами.


Вопрос 6: Аналитика в Hadoop

Ситуация: Сохраняете большие объёмы аналитических данных в кластере Hadoop и нуждаетесь в высокой степени сжатия.

Ответ: ORC

Пояснение: ORC обеспечивает высокую степень сжатия и оптимизирован для окружений Hadoop.


Вопрос 7: Табличные процессоры

Ситуация: Хотите быстро и просто сохранить небольшой объём данных в табличном процессоре и редактировать их.

Ответ: CSV

Пояснение: CSV просто создавать, легко открывать и редактировать в программах вроде Excel.


Вопрос 8: Логи в Data Warehouse

Ситуация: Передаёте большой объём логов в Data Warehouse и хотите эффективного хранения и обработки.

Ответ: Parquet

Пояснение: Parquet идеален для хранения и обработки больших объёмов данных в Data Warehouses благодаря постолбцовой структуре.


Вопрос 9: Сериализация Big Data

Ситуация: Нужно сериализовать большое количество записей и передать их между различными инструментами Big Data.

Ответ: Avro

Пояснение: Avro специально оптимизирован для сериализации больших объёмов данных и поддерживает передачу между разными инструментами Big Data.


Вопрос 10: Разработка Web-API

Ситуация: Создаёте Web-API, которая должна отдавать структурированные данные различным клиентам.

Ответ: JSON

Пояснение: JSON - стандартный формат для Web-API, обеспечивает простую передачу и обработку структурированных данных.


Вопрос 11: Аналитика Data Lake

Ситуация: Сохраняете и анализируете данные в Data Lake, при этом нужна высокая эффективность хранения и запросов.

Ответ: Parquet или ORC

Пояснение: Оба формата предоставляют постолбцовое хранилище и высокую эффективность при работе с большими объёмами данных.


Вопрос 12: Оптимизация CSV

Ситуация: Есть CSV-файл с миллионами строк, нужно улучшить эффективность хранения и обработки.

Ответ: Parquet

Пояснение: Parquet обеспечивает лучшее сжатие и производительность запросов на больших объёмах данных по сравнению с CSV.


Вопрос 13: Экспорт из базы данных

Ситуация: Нужно экспортировать данные из реляционной БД в Big Data систему, сохраняя структуру.

Ответ: Avro

Пояснение: Avro поддерживает сложные и вложенные типы данных и хорошо отображает структуру реляционной БД.

Вопрос 14: Azure Data Factory

Ситуация: Нужно сохранить данные в pipeline Azure Data Factory и обработать их дальше.

Ответ: Parquet или JSON

Пояснение: Оба формата хорошо подходят для обработки в Data Pipelines, обеспечивают эффективное хранение и позволяют быстро выполнять запросы.


Вопрос 15: Обработка IoT-данных

Ситуация: Есть данные от IoT-устройств, которые часто нужно обновлять и быстро обрабатывать.

Ответ: Avro

Пояснение: Avro идеален для потоковых данных от IoT-устройств благодаря быстрой сериализации/десериализации и поддержке эволюции схемы.


Назад к блогу
Share:

Nächster Artikel in Программирование

Weiterlesen
Low Code и No Code разработчики 2026

Похожие статьи