Химические и амперные материалы; Materials Engineering
Использование шаблона строителя для конфигурируемых трубопроводов данных в области проектирования данных
Table of Contents
Модель строителя в области Data Engineering: основа гибкости
Современная технология обработки данных требует трубопроводов, которые могут обрабатывать постоянно меняющиеся источники данных, логику преобразования и места хранения. Жесткие монолитные конструкции трубопроводов часто приводят к хрупким системам, которые ломаются, когда требования сдвигаются даже незначительно. Структура строителя, хорошо зарекомендовавшая себя модель креационного проектирования, предлагает структурированный подход к построению сложных объектов шаг за шагом. Применяемый к конвейерам данных, он отделяет конфигурацию от выполнения, позволяя инженерам адаптировать трубопроводы без переписывания основной логики.
Понимание шаблона строителя
Происхождение и основная концепция
Структура строителя возникла в объектно-ориентированном программировании для решения проблемы построения объектов с множеством необязательных частей. Вместо использования большого конструктора с многочисленными параметрами или подклассом для обработки каждой комбинации, объект строитель предоставляет пошаговые методы для установки каждого компонента. Окончательный метод собирает полный объект. Это разделение проблем делает процесс строительства многоразовым в разных представлениях.
Оригинальное название: Ordering a Custom Pizza
Подумайте о шаблоне строителя, как заказ пиццы на заказ. Вы указываете корку, соус, сыр и начинки по одному за раз. Производитель пиццы (повар) знает, как объединить эти ингредиенты в готовую пиццу. Тот же строитель может производить пирог Маргериты, гавайца или любителя мяса. Аналогично, сборщик конвейера данных может собирать различные комбинации источников, преобразований и раковин из одного и того же набора методов строителя.
Почему трубопроводы данных нуждаются в конфигурируемом дизайне
Трубопроводы данных редко бывают статическими.Трубопровод, который проглатывает файлы CSV из ведра S3 и загружает их в хранилище данных, может быстро нуждаться в поддержке JSON, потоковых источников или дополнительных шагов обогащения. Без настраиваемого дизайна добавление таких изменений часто означает копирование и изменение больших частей кода - рецепт дублирования и ошибок.
- Изменение исходных систем: Переключение из пакетных файлов в потоки событий или переключение разъемов базы данных.
- Эволюционирующие преобразования: Добавление очистки данных, проектирование функций или присоединение к новым справочным таблицам.
- Несколько пунктов назначения: Запись результатов в несколько хранилищ данных (например, BigQuery, Snowflake и панель инструментов в реальном времени) для одного и того же конвейера.
- Варианты тестирования и постановки: Работа с идентичными логическими данными в отношении разработки и производства без изменений кода.
Структура сборщика напрямую решает эти потребности, позволяя инженерам декларативно составлять трубопроводы — определяя, какие компоненты включать и как они соединяются, в то время как базовая логика сборки остается неизменной.
Основные компоненты конфигурируемого трубопровода данных
Чтобы применить шаблон строителя, конвейер данных должен быть разбит на дискретные, композитные строительные блоки.
Источники данных
Каждый трубопровод начинается с одного или нескольких источников: файловых систем, баз данных, потоковых платформ (Kafka), API или озер данных. Каждый источник имеет свою собственную конфигурацию (путь, учетные данные, схема, интервал опроса). Строитель может поставлять методы, такие как , или .
Шаги трансформации
Трансформации манипулируют или обогащают данные.Общие примеры включают в себя фильтрующие строки, разбор вложенных JSON, агрегирование метрик и объединение наборов данных. Методы построения, такие как , и , позволяют инженерам свободно секвенировать преобразования.
Данные синхронизации
Зубцы — это места, где обрабатываются данные: реляционные базы данных, облачное хранилище, очереди сообщений или аналитические двигатели. Строитель может поддерживать несколько раковин с помощью и и даже позволять цепочке отправлять одни и те же данные в несколько пунктов назначения.
Коннекторы и Middleware
Помимо источников и поглотителей трубопроводы часто требуют обработчиков ошибок, ограничителей скорости, валидаторов схем и крючков мониторинга. Эти сквозные проблемы легко добавляются в качестве шагов строителя, таких как или .
Реализация шаблона строителя для трубопроводов
Типичная реализация включает в себя класс строителя трубопровода , который собирает параметры конфигурации и метод сборки , который проверяет и возвращает полностью построенный объект трубопровода.
class PipelineBuilder:
def __init__(self):
self._source = None
self._transformations = []
self._sinks = []
self._retry_policy = None
def with_source(self, source):
self._source = source
return self
def add_transform(self, transform):
self._transformations.append(transform)
return self
def add_sink(self, sink):
self._sinks.append(sink)
return self
def with_retry(self, retry_policy):
self._retry_policy = retry_policy
return self
def build(self):
if not self._source or not self._sinks:
raise ValueError("Source and at least one sink are required")
return Pipeline(self._source, self._transformations, self._sinks, self._retry_policy)
С помощью строителя создание трубопровода становится декларативным:
pipeline = (PipelineBuilder()
.with_source(S3CsvSource(bucket="data-landing", prefix="orders/"))
.add_transform(FilterTransform(condition="status == 'active'"))
.add_transform(AggregateTransform(group_by="customer_id", metrics=["sum(amount)"]))
.add_sink(DatabaseSink(connection="prod_db", table="customer_orders"))
.add_sink(ParquetSink(path="s3://analytics/orders/"))
.with_retry(RetryPolicy(max_attempts=3, backoff_seconds=5))
.build())
Такой подход централизует конфигурацию, что позволяет легко повторно использовать один и тот же конструктор с различными параметрами для постановки и производственной среды.
Реальное применение: построение гибкого трубопровода ETL
Рассмотрим компанию электронной коммерции, которая должна потреблять данные о ежедневных заказах из нескольких регионов, очищать и стандартизировать их, вычислять ежедневный доход по категориям и загружать результаты в базу данных отчетности и озеро данных. Используя шаблон сборщика, они создают многоразовый OrderETLBuilder .
- Определение исходных конфигураций: Заказы каждого региона поступают из разных баз данных (PostgreSQL, MySQL), но экспортируются в общий формат CSV.
- Добавить стандартные преобразования: Очистка данных (удалить идентификаторы нулевого заказа, проверить коды валют) и обогащение (объединиться с каталогом продуктов, чтобы получить категорию).
- Настройка агрегации: .
- Путь к нескольким раковинам: и .
- Строить и выполнить: Тот же строитель может сначала построить трубопровод, который считывает только регион ЕС для тестирования, а затем поменять на все регионы для производства.
Эта модель значительно снижает дублирование кода: компания теперь поддерживает один класс строителей вместо нескольких специальных скриптов в каждом регионе или среде.
Преимущества Recap
- Гибкость: Изменить поведение конвейера, не касаясь логики исполнения. Нужно добавить новую трансформацию? Просто позвоните с новым шагом.
- Устойчивость: Определения трубопровода читаются как рецепт высокого уровня. Конфигурация каждого компонента изолирована, что делает отладку и обзор кода простыми.
- Многоразовые: Строители могут быть упакованы в библиотеки. Команды повторно используют один и тот же конструктор в разных проектах, корректируя только входные параметры.
- Масштабируемость: Добавление нового типа компонента (например, потоковой мойки) требует только расширения сборщика, а не переписывания всей сборки трубопровода.
- Проверяемость: Строители могут создавать тестовые трубопроводы с искусственными источниками и поглотителями, что позволяет проводить изолированные единичные испытания для самой логики сборки трубопровода.
Лучшие практики использования шаблона строителя в области обработки данных
Держите конфигурацию строителя чистой
Строитель должен собирать и проверять только конфигурацию. Фактический процесс выполнения трубопровода должен быть ответственностью объекта Pipeline , построенного . Это разделение делает конструктор простым и проверяемым.
Проверить рано, провалить быстро
В методе убедитесь, что все необходимые компоненты присутствуют и что конфигурации являются согласованными (например, этапы преобразования ссылаются на существующие столбцы источника).
Неизменные конструкции Immutable Builds
После того, как назван, конструктор может быть сброшен или повторно использован для создания другого трубопровода с различными настройками. Избегайте состояния хранения, которое сохраняется на сборках, если это не преднамеренно.
Обеспечить разумные недостатки
Для дополнительных компонентов, таких как политика повторного использования или регистрация, установите разумные по умолчанию в конструкторе строителя. Это минимизирует шаблон, все еще позволяя переопределять.
Версия: Ваш строитель рядом с вашими трубопроводами
По мере развития вашей инфраструктуры данных API строителя также будет. Tag builder выпускает в управлении версиями, поэтому определения конвейера могут прикрепляться к конкретной версии строителя, предотвращая неожиданное распространение изменений.
Использование внешних ссылок для сложных компонентов
Для компонентов со многими внутренними деталями (например, конфигурация сеанса Spark или пользовательский UDF) рассматривайте их как предварительно построенные объекты, а не как построенные внутри строителя трубопровода. Рефакторинг.
Заключение
Модель сборщика дает командам разработчиков данных практический способ создания трубопроводов, которые являются одновременно мощными и адаптируемыми. Отделяя то, что (конфигурация) от как (исполнение), она уменьшает технический долг и ускоряет ответ на меняющиеся потребности бизнеса. По мере того, как экосистемы данных продолжают расти в сложности - с потоками в реальном времени, многооблачным хранилищем и конвейерами машинного обучения - шаблон сборщика остается надежным инструментом для управления этой сложностью, не жертвуя ясностью.
При проектировании вашего следующего конвейера данных рассмотрите возможность принятия подхода строителя. Сначала это может показаться дополнительным уровнем абстракции, но долгосрочные выгоды в гибкости и ремонтопригодности намного перевешивают первоначальные затраты. Для дальнейшего чтения о шаблонах проектирования в области проектирования данных Мартин Фаулер предлагает более широкую перспективу структурирования инфраструктуры данных.