Содержание
  1. Определение озера данных и schema-on-read
  2. Отличие lake, DWH и lakehouse
  3. Ограничения: governance, каталог, доступ, retention
  4. Учебный маршрут raw → validated → curated
  5. Ручной эталон результата
  6. Проверка карантина вместо нуля
  7. Сохранность raw и приватность заметок
  8. Частые вопросы
Справочник

Data Lake: что это, отличие от DWH и пример

5 ноября 2026 · 9 минут чтения

Data Lake: что это, отличие от DWH и пример — озеро данных хранит информацию в исходном формате и применяет структуру в момент чтения. В документации Microsoft Learn этот подход назван schema-on-read: преобразование выполняется тогда, когда данные понадобились. Хранилище данных (DWH) устроено иначе — оно задаёт структуру на входе, schema-on-write. Ниже — сравнение, ограничения и заполненный учебный маршрут записей с карантином и lineage.

Определение озера данных и schema-on-read

В материалах AWS озеро данных описано как централизованное хранилище, которое принимает структурированные и неструктурированные данные любого масштаба. Данные кладутся как есть, без предварительного структурирования, а аналитика — от дашбордов до машинного обучения — запускается поверх них. Databricks добавляет важную деталь: озеро использует плоскую архитектуру и объектное хранилище, где объект получает метаданные и уникальный идентификатор. Это упрощает поиск и извлечение данных.

Schema-on-read — это подход, при котором схема применяется в момент чтения. Microsoft Learn прямо противопоставляет его schema-on-write: хранилище задаёт структуру и преобразует данные при загрузке, а озеро хранит всё в исходном виде и трансформирует по необходимости. Ключевое уточнение: schema-on-read остаётся подходом к обработке. Он задаёт момент применения схемы и не отменяет саму схему, проверки качества и правила доступа. Озеро без описанных схем чтения и валидации превращается в свалку — AWS называет это состояние data swamp.

Практический смысл подхода: команда сначала собирает данные, а структуру и правила описывает позже, когда понятны вопросы к ним. Microsoft Learn относит к типовым сценариям озера приём и перемещение данных, обработку больших объёмов, аналитику и машинное обучение, BI-отчётность, а также архивное хранение для аудита и соответствия требованиям.

Отличие lake, DWH и lakehouse

Различие удобно смотреть по четырём осям: типы данных, стоимость, надёжность и круг пользователей. По данным Databricks, озеро и lakehouse принимают все типы — структурированные, полуструктурированные и необработанные, — тогда как хранилище работает только со структурированными данными. По стоимости озеро и lakehouse опираются на дешёвое объектное хранилище, а хранилище дорожает при масштабировании из-за вендорских издержек. По надёжности Databricks описывает традиционное озеро как источник низкого качества с риском data swamp, а lakehouse — как надёжные данные высокого качества. По пользователям озеро исторически тяготеет к дата-сайентистам, lakehouse объединяет аналитиков, дата-сайентистов и ML-инженеров, хранилище ориентировано на аналитиков.

Критерий Data Lake DWH Lakehouse
Типы данных Все типы, включая необработанные Только структурированные Все типы
Стоимость Низкая, объектное хранилище Выше при росте объёма Низкая
Надёжность Риск низкого качества Высокое качество Высокое качество
Пользователи Дата-сайентисты Аналитики Аналитики, дата-сайентисты, ML-инженеры
Формат Открытый Закрытый, проприетарный Открытый

Microsoft Learn описывает lakehouse как сосуществование озера и хранилища: сырое хранение сочетается со структурированной производительностью запросов. Databricks формулирует это как транзакционный слой поверх озера, который добавляет управление данными, похожее на хранилище, и сохраняет открытый формат. AWS замечает, что типичная организация использует и хранилище, и озеро, поскольку у них разные задачи.

Ограничения: governance, каталог, доступ, retention

AWS называет главной сложностью озера то, что сырые данные лежат без надзора за содержимым. Чтобы озеро стало пригодным, нужны механизмы каталогизации и защиты: без них данные не найти и им нельзя доверять. Для широкой аудитории требуются governance, семантическая согласованность и контроль доступа.

Microsoft Learn перечисляет свой набор ограничений. Масштаб и сложность: петабайты сырых данных требуют инфраструктуры, распределённой обработки и управления затратами. Узкие места обработки: рост объёма и разнообразия добавляет задержку. Риски целостности: без валидации и мониторинга ошибки и неполные загрузки подрывают надёжность содержимого. Качество и governance: разнородные источники усложняют единые стандарты, а управление метаданными, каталогизация и фреймворки governance становятся критичными. Безопасность и доступ: нужны продуманные права и аудит по разнородным наборам. Обнаружимость: без каталогизации озеро вырождается в data swamp, где ценная информация присутствует, но недоступна или понята неверно.

Databricks добавляет три практические проблемы: отсутствие поддержки транзакций, слабое принуждение к качеству и governance, плохая оптимизация производительности. Отдельно названы проблемы надёжности при смешивании пакетных и потоковых данных, замедление запросов при росте объёма из-за управления метаданными и неудачного партиционирования, а также сложности защиты и удаления данных для соответствия требованиям регуляторов. Ownership и retention здесь связаны напрямую: пока не назначен владелец набора и не задан срок хранения, удаление и обновление записей остаются неопределёнными.

Учебный маршрут raw → validated → curated

Ниже — условный учебный набор, который показывает путь записей по слоям. Значения взяты как пример для разбора.

Входные объекты:

ТЕКСТ6 строк
raw/orders/2026-11-01.jsonl
{"order_id":"R-31","amount":"900","currency":"RUB"}
{"order_id":"R-32","amount":"bad","currency":"RUB"}

raw/support/notes.txt
R-31: просит доставку после 18:00

Правила слоя validated для этого учебного набора: поле amount приводится к decimal, единственная допустимая валюта — RUB. Запись R-31 проходит проверку и попадает в validated/orders с amount=900.00 RUB. Запись R-32 не проходит: значение «bad» не приводится к числу, поэтому запись уходит в quarantine/orders с reason=invalid_amount.

Объект Формат Проверка Выход Lineage
raw/orders/2026-11-01.jsonl JSONL amount → decimal, currency в списке R-31 → validated/orders (900.00 RUB); R-32 → quarantine/orders (invalid_amount) validated/orders/R-31 ← raw/orders/2026-11-01.jsonl#R-31; quarantine/orders/R-32 ← raw/orders/2026-11-01.jsonl#R-32
raw/support/notes.txt TXT текст не парсится, доступ ограничен остаётся в raw/support с меткой restricted curated/daily не ссылается на объект
curated/daily_total таблица агрегат только по validated daily_total RUB = 900.00, count = 1 curated/daily_total ← validated/orders/R-31

Слой curated собирает агрегат по validated. Итог: daily_total RUB = 900.00, count = 1. Каждая строка витрины хранит ссылку на исходный объект, поэтому происхождение числа проверяемо.

Ручной эталон результата

Эталон задаёт, что должно получиться после прогона учебного набора. Он нужен, чтобы сверять автоматический результат с ожидаемым вручную.

Ожидаемые значения: daily_total RUB = 900.00, count = 1. Запись R-32 отсутствует в validated и присутствует в quarantine с reason=invalid_amount. Исходные raw-объекты сохраняют исходное содержимое. Персональная заметка из raw/support/notes.txt не публикуется в общей витрине.

Порядок сверки:

  1. Открыть curated/daily_total и сравнить сумму и счётчик с эталоном.
  2. Проверить, что в validated/orders ровно одна запись — R-31.
  3. Найти R-32 в quarantine/orders и убедиться, что причина указана как invalid_amount.
  4. Сопоставить lineage витрины с исходным объектом raw/orders/2026-11-01.jsonl.
  5. Убедиться, что notes.txt остался в raw/support с меткой restricted.

Если хотя бы один пункт расходится с эталоном, разбор останавливают и правят правило.

Проверка карантина вместо нуля

Отдельная проверка касается некорректного значения. Ошибка, которую ловит эта проверка, — молчаливая подмена: сломанное значение превращается в 0 и попадает в витрину как настоящая сумма.

Правильное поведение: значение «bad» не приводится к числу, запись R-32 уходит в quarantine/orders с reason=invalid_amount. В validated/orders остаётся только R-31. Витрина curated/daily_total считает агрегат по validated, поэтому daily_total RUB = 900.00, count = 1 — без учёта битой записи.

Как проверить на своих данных:

  1. Добавить в raw-набор запись с заведомо некорректным числовым полем.
  2. Прогнать маршрут и открыть quarantine: запись должна быть там с указанной причиной.
  3. Проверить, что в validated этой записи нет.
  4. Сравнить агрегат витрины с ручным эталоном: сумма и счётчик не должны измениться от битой записи.
  5. Убедиться, что в витрине нет нулевых подстановок вместо отброшенных значений.

В этом наборе подмена «bad» нулём сохранит сумму 900.00 RUB, но увеличит count до 2. Проверка счётчика и карантина обнаружит такую подмену.

Сохранность raw и приватность заметок

Вторая проверка касается двух вещей сразу: исходные объекты остаются неизменными, а персональные данные не попадают в общую витрину.

Сохранность raw: файл raw/orders/2026-11-01.jsonl сохраняет исходное содержимое после прогона. Маршрут читает его и создаёт производные объекты в validated и quarantine, а исходник не перезаписывается. Это позволяет вернуться к сырым данным и пересобрать слои заново.

Приватность заметок: raw/support/notes.txt содержит персональную просьбу и остаётся в raw/support с меткой restricted. Витрина curated/daily на этот объект не ссылается. Databricks в рекомендациях по lakehouse прямо указывает маскировать данные с приватной информацией до попадания в озеро и псевдонимизировать персональные данные для соответствия требованиям.

Порядок проверки:

  1. Сравнить контрольную сумму raw-файла до и после прогона.
  2. Убедиться, что в validated и curated нет объектов, производных от notes.txt.
  3. Проверить метку restricted на объекте заметки.
  4. Просмотреть lineage витрины: в нём должен быть только raw/orders/2026-11-01.jsonl.

Частые вопросы

Что такое data lake простыми словами?
Это централизованное хранилище, которое принимает данные в исходном формате и любого масштаба. Структура применяется в момент чтения, когда данные понадобились для анализа. AWS описывает его как репозиторий для структурированных и неструктурированных данных, поверх которого запускают аналитику и машинное обучение.

Чем data lake отличается от DWH?
Хранилище данных задаёт структуру на входе и работает со структурированными данными, а озеро хранит всё как есть и применяет схему при чтении. Microsoft Learn называет эти подходы schema-on-write и schema-on-read. Хранилище даёт высокое качество и низкую задержку, озеро — гибкость и низкую стоимость хранения.

Что такое lakehouse и зачем он нужен?
Lakehouse добавляет транзакционный слой поверх озера и совмещает сырое хранение со структурированной производительностью запросов. Databricks описывает его как систему, где аналитика, data science и машинное обучение работают вместе в открытом формате. Он снижает риск data swamp за счёт управления данными.

Почему озеро данных превращается в data swamp?
Причина — сырые данные без надзора, каталога и правил доступа. AWS указывает, что без каталогизации и защиты данные не найти и им нельзя доверять. Microsoft Learn добавляет, что без каталогизации ценная информация остаётся недоступной или понятой неверно.

Как проверить, что битая запись не попала в витрину?
Нужно найти запись в quarantine с указанной причиной и убедиться, что в validated её нет. Затем сравнить агрегат витрины с ручным эталоном: сумма и счётчик не должны измениться от битой записи. В учебном наборе R-32 уходит в quarantine с reason=invalid_amount, а daily_total RUB = 900.00, count = 1.

Читайте также

3 материала