Это два принципиально разных подхода к работе с данными в хранилищах и системах обработки:

  • Schema-on-Write (схема при записи)
  • Schema-on-Read (схема при чтении)

Эти подходы определяют, на каком этапе определяется структура данных (схема) и как данные хранятся и обрабатываются.


🟢 1. Schema-on-Write (схема при записи)

Schema-on-Write подразумевает, что схема данных должна быть заранее определена и строго соблюдаться при записи данных в хранилище.

Основные особенности:

  • Структура данных задаётся заранее
  • Данные очищаются, валидируются и преобразуются при записи (ETL: Extract-Transform-Load)
  • Хранилище сразу содержит только структурированные и проверенные данные

Преимущества schema-on-write:

  • Высокая скорость выполнения аналитических запросов
  • Высокое качество и согласованность данных
  • Удобно для аналитики и отчетности (бизнес-интеллект, KPI)

⚠️ Недостатки schema-on-write:

  • Низкая гибкость (тяжело менять схему после загрузки)
  • Медленнее процесс добавления новых источников данных (из-за строгой схемы)

Типичные технологии:

  • Традиционные Data Warehouses (Oracle, PostgreSQL, Redshift, Snowflake)
  • Колончатые аналитические базы (ClickHouse, Vertica)

Пример использования schema-on-write (SQL):

-- Сначала задаем структуру данных
CREATE TABLE customers (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    email VARCHAR(100)
);
 
-- Затем вставляем данные в соответствии с этой схемой
INSERT INTO customers VALUES (1, 'Alice', 'alice@example.com');
 

🔵 2. Schema-on-Read (схема при чтении)

Schema-on-Read означает, что схема не определяется заранее, и данные хранятся в исходном (сыром) формате. Структура определяется только в момент чтения или анализа.

Основные особенности:

  • Данные сохраняются в любом формате (JSON, CSV, Parquet, ORC и т.д.)
  • Схема задаётся только при чтении и обработке данных
  • Поддерживается хранение структурированных, полуструктурированных и неструктурированных данных

Преимущества schema-on-read:

  • Гибкость при работе с данными (легко изменять структуру)
  • Высокая скорость загрузки новых данных (не требуется предварительная очистка)
  • Удобно для Data Science, исследований и машинного обучения

⚠️ Недостатки schema-on-read:

  • Запросы и обработка могут быть медленнее (требуется больше ресурсов)
  • Сложнее обеспечить качество данных (требуется дополнительная обработка)

Типичные технологии:

  • Data Lake: Amazon S3, Azure Data Lake Storage, Hadoop (HDFS)
  • Форматы файлов: Parquet, ORC, Avro, JSON
  • Платформы обработки: Apache Spark, Apache Flink, Apache Hive

Пример использования schema-on-read (Apache Spark):

// Данные хранятся в Parquet (сырые, schema-on-read)
val df = spark.read.parquet("s3://my-data-lake/raw/customer-data/")
 
// Схема применяется при чтении и обработке данных
df.select("id", "name", "email").filter("email is not null").show()
 

📊 3. Сравнительная таблица

Параметр🟢 Schema-on-Read🔵 Schema-on-Write
Этап определения схемыПри чтении данныхПри записи данных
Гибкость структуры данныхВысокаяНизкая
Типы данныхЛюбые (структурированные, неструктурированные, полуструктурированные)Только структурированные
Качество и целостность данныхСреднее (требует доп. обработки)Высокое (предварительная очистка)
Скорость записиВысокаяСредняя или низкая
Скорость выполнения запросовСредняя или низкаяВысокая
Идеальные сценарииData Science, ML, Big DataБизнес-аналитика, отчёты, KPI
Примеры технологийData Lake, Spark, Hadoop, Delta Lake, IcebergRedshift, Snowflake, PostgreSQL

🚀 Короткий итог

  • Schema-on-Write: сначала схема → потом данные → аналитика
    (быстро, строго, качественно, но не гибко)

  • Schema-on-Read: сначала данные → потом схема → аналитика
    (гибко, быстрое добавление новых данных, удобно для Data Science)

Лучше всего оба подхода использовать совместно, в зависимости от ваших целей и задач.