Многие полезные нагрузки данных имеют схему, такую как табличные и полуструктурированные данные. Как уже упоминалось в этой книге, схема описывает поля и типы данных в этих полях. Другие данные, такие как неструктурированный текст, изображения и аудио, не будут иметь явной схемы или типов данных. Однако они могут сопровождаться техническими описаниями файлов о форме, формате данных и файла, кодировке, размере и т.д.
Хотя вы можете подключаться к базам данных различными способами (например, экспорт файлов, CDC, JDBC/ODBC), подключение само по себе простое. Основная инженерная задача — понимание базовой схемы. Приложения организуют данные по-разному, и инженерам необходимо хорошо знать организацию данных и соответствующие шаблоны обновлений, чтобы понять их. Проблема усугубляется популярностью объектно-реляционного отображения (ORM), которое автоматически генерирует схемы на основе структуры объектов в языках, таких как Java или Python. Естественные структуры в объектно-ориентированном языке часто сопоставляются с чем-то сложным в операционной базе данных. Инженерам данных может потребоваться ознакомиться с классовой структурой кода приложения.
Схема не только для баз данных. Как мы обсуждали, API также имеют свои сложности со схемами. Многие API вендоров имеют удобные методы отчётности, которые подготавливают данные для аналитики. В других случаях инженерам не так везёт. API является тонкой обёрткой вокруг базовых систем, требующей от инженеров понимания внутренних механизмов приложения для использования данных.
Большая часть работы, связанной с поглощением данных из исходных схем, происходит на этапе трансформации жизненного цикла инженерии данных, который мы обсудим в главе 8. Мы разместили это обсуждение здесь, потому что инженерам данных необходимо начинать изучать исходные схемы сразу, как только они планируют поглощать данные из нового источника.
Связь критически важна для понимания исходных данных, и инженеры также имеют возможность обратить поток связи и помочь инженерам программного обеспечения улучшить данные там, где они производятся. Позже в этой главе мы вернёмся к этой теме в разделе «С кем вы будете работать».
Обнаружение и обработка изменений схемы вверх и вниз по цепочке. Изменения схемы часто происходят в исходных системах и обычно находятся вне контроля инженеров данных. Примеры изменений схемы включают:
■ Добавление нового столбца
■ Изменение типа столбца
■ Создание новой таблицы
■ Переименование столбца
Всё чаще инструменты поглощения автоматизируют обнаружение изменений схемы и даже автоматически обновляют целевые таблицы. В конечном итоге, это является своего рода смешанным благословением. Изменения схемы всё равно могут нарушить конвейеры ниже по цепочке после стадии поглощения.
Инженерам всё равно нужно внедрять стратегии для автоматического реагирования на изменения и оповещения о тех изменениях, которые не могут быть учтены автоматически. Автоматизация отлична, но аналитики и специалисты по данным, которые полагаются на эти данные, должны быть проинформированы об изменениях схемы, которые нарушают существующие предположения. Даже если автоматизация может учесть изменение, новая схема может негативно повлиять на производительность отчётов и моделей. Связь между теми, кто вносит изменения в схему, и теми, кто затронут этими изменениями, так же важна, как и надёжная автоматизация, которая проверяет изменения схемы.
Реестры схем. В потоковых данных каждое сообщение имеет схему, и эти схемы могут эволюционировать между производителями и потребителями. Реестр схем — это хранилище метаданных, используемое для поддержания целостности схемы и типов данных в условиях постоянно изменяющихся схем. Реестры схем также могут отслеживать версии схем и их историю. Они описывают модель данных для сообщений, обеспечивая последовательную сериализацию и десериализацию между производителями и потребителями. Реестры схем используются в большинстве крупных инструментов для работы с данными и облачных сервисов.