Хабр, привет! Меня зовут Саша Сайков, я дата-инженер в PepsiCo и старший ревьюер на курсах «Инженер данных» и «Инженер машинного обучения» в Яндекс Практикуме. Я хочу рассказать, чем занимаются дата-инженеры, в каких компаниях мы работаем и чем отличается наша работа от работы других специалистов по данным.

Немного о моём опыте

Я работаю в этой сфере больше трёх лет, причём только на позиции дата-инженера. Начинал карьеру в IT-интеграторе «Синимекс» и работал как аутстафф-сотрудник Сбера. В основном выполнял задания по написанию витрин.

Потом около года работал в американском стартапе — мы строили модель, которая может предсказывать исход суда по патентным делам в США. А затем провёл полгода в компании Mars, которая делает всем известные шоколадки и корм для животных, например Royal Canin.

С февраля этого года я работаю в PepsiCo в отделе, который занимается продажами в Яндекс Маркете, Яндекс Лавке, Ozon, «Самокате» и других доставках.

Кто такой дата-инженер

Дата-инженер (или инженер данных) — это разработчик, который отвечает за надёжное и стабильное поступление данных, за обеспечение их качества, их обработку и то, чтобы эти данные в подходящем виде попадали к конечным пользователям — людям, которые будут принимать так называемые data-driven-решения по бизнесу. То есть использовать данные от дата-инженера, чтобы увеличить продажи, сократить расходы или что-то в этом роде.

Для этого дата-инженер представляет информацию для витрин данных — интерактивных дашбордов, на которые смотрят менеджеры, аналитики, дата-сайентисты. И не только смотрят, а ещё и преобразуют, пересохраняют, совмещают с другими данными и так далее.

В каких компаниях работают дата-инженеры

Для начала стоит разделить: есть дата-аналитики — люди, которые понимают статистику и строят гипотезы. Есть дата-сайентисты, которые строят и совершенствуют модели работы с данными. А есть дата-инженеры, которые непосредственно работают с источниками, обрабатывают, хранят и доставляют информацию. 

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

Как только данных будет становиться больше, потребуются более сложные модели и новые инструменты — один человек с этим уже не справится. Понадобятся люди, которые работают в своих узких областях. Будут и дата-сайентисты, и ML-инженеры, и, возможно, даже специалист, который отвечает только за архитектуру хранения данных. В больших отделах могут быть дата-журналисты, дата-стюарды, дата-чемпионы — ролей в этой работе много.

Чем больше данных, тем больше узконаправленных специалистов. Чем данных меньше, тем меньше людей — и шире их экспертиза

Количество данных и занятых в этой сфере людей не всегда зависит от размера компании. Небольшой штат широкопрофильных специалистов может быть и в корпорации. А маленькая компания, наоборот, может думать наперёд, закладывать перспективу масштабирования и сразу нанимать нужных сотрудников. Например, в американском стартапе, где я работал, было всего десять человек, и четыре из них — дата-инженеры.

Какое место дата-инженеры занимают в команде

Я упомянул, что четверо из десяти сотрудников стартапа, в котором мы предсказывали исходы судов по патентным делам в США, были дата-инженерами. Всё потому, что данных было много и от нашей работы зависело то, как другие специалисты их обработают и к каким выводам придут.

Дата-инженер закладывает фундамент — делает данные такими, чтобы с ними могли работать аналитики, дата-сайентисты и другие специалисты. Если строить процессы наоборот (например, начиная с анализа), можно допустить ошибки, которые будет трудно исправить

В организации работы команды бывают две крайности. Первая — это когда все отвечают за всё. Дата-инженер в такой системе не ждёт продакт-оунера или менеджера, который придёт к нему с задачей, а сам себе её ставит и доводит до результата.

Вторая крайность — это забюрократизированные и даже закостенелые структуры, где есть чёткая иерархия и строгий порядок постановки задач. У дата-инженера в такой команде есть условный начальник. Дата-инженер может пойти за помощью к аналитику или дата-сайентисту, который инициировал выполнение задачи, но в любом случае через руководителя.

Сейчас я работаю в PepsiCo, и мы стараемся не уходить ни в одну, ни в другую сторону. То есть стараемся делать так, чтобы инженеры были погружены в бизнес-процессы, участвовали в разработке технических заданий, общались с пользователями — в общем, не были винтиками в механизме и понимали, что и зачем они делают. Но при этом мы поддерживаем регламенты в работе и стремимся уберечь инженеров от хаоса, часто свойственного стартапам.

Так, ко мне может прийти менеджер с просьбой перевести «эксельку» в Power BI (программу для анализа данных). Или аналитик — с просьбой провести какое-нибудь небольшое исследование или помочь оптимизировать запросы в базу данных, чтобы всё работало быстрее.

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

Какие задачи выполняют дата-инженеры

Их можно разделить на несколько групп. Задачи зависят от компании, поэтому расскажу о тех, которыми занимаюсь сам.

Поддержание выгрузок. В работе с данными используются пайплайны — последовательности действий, которые позволяют направить информацию должного качества конечному пользователю. К сожалению, в этих пайплайнах всегда что-то случается — изменился тип данных от поставщика, появилась ошибка соединения или ошибка обнаружилась в коде. В итоге данные не поступают или поступают не в том качестве. В некоторых компаниях даже бывают дежурства у дата-инженеров — чтобы «поднять» «упавший» пайплайн можно было в любое время суток.

Рассмотрим пример пайплайна.

Пример пайплайна по загрузке и трансформации данных. Такая модель называется ETL (Extract — извлечь, Transform — трансформировать, Load — загрузить)
Пример пайплайна по загрузке и трансформации данных. Такая модель называется
ETL (Extract — извлечь, Transform — трансформировать, Load — загрузить)

Этот пайплайн состоит из следующих этапов:

  1. Загрузка данных из двух источников.

  2. Фильтрация данных.

  3. Соединение таблиц.

  4. Агрегация данных. Например, подсчёт суммы заказов за день.

  5. Запись данных в базу.

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

Такой пайплайн может «упасть» с ошибкой. Причин может быть много:

  • ошибка соединения с базами данных;

  • данные могут быть некачественными, с пропусками, дубликатами, лишними значениями;

  • данные могли не предоставить к определённому времени, и наш пайплайн ничего не записал;

  • могли измениться названия колонок или тип данных. Например, мы ожидали увидеть число, а пришло строковое значение.

Некоторые ошибки исправляются путём редактирования кода, другие — общением с другими командами. Поэтому дата-инженер должен уметь не только писать корректный и легко поддерживаемый код, но и проводить встречи, на которых разные команды приходят к единому решению проблемы.

Если работа выстроена правильно, то таких задач у дата-инженера будет мало, но полностью избежать их нельзя.

Создание витрин данных. Менеджеры и аналитики работают с данными на витринах в Power BI или другой программе для анализа. В больших компаниях за создание витрин отвечает отдельный разработчик, но дата-инженер готовит для него данные.

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

Даны три таблицы.

«Продажи» (sales) с данными:

  • sale_id (integer) — идентификатор продажи

  • store_id (integer) — идентификатор магазина

  • product_id (integer) — идентификатор товара

  • sale_date (date) — дата продажи

  • quantity_sold (integer) — количество проданных единиц товара

  • sale_amount (decimal) — сумма продажи

«Магазины» (stores):

  • store_id (integer) — идентификатор магазина

  • store_name (string) — название магазина

  • store_location (string) — местоположение магазина (город)

  • opening_date (date) — дата открытия магазина

И «Товары» (products):

  • product_id (integer) — идентификатор товара

  • product_name (string) — название товара

  • category (string) — категория товара

  • price (decimal) — цена товара

Задача — создать витрину данных для анализа продаж, которая будет включать следующие показатели:

  • общая сумма продаж по каждому магазину за каждый месяц;

  • объём продаж (в количестве проданных единиц) по каждому товару за каждый месяц;

  • средний чек (средняя сумма продажи) по каждому магазину;

  • доля продаж по категориям товаров в общем объёме продаж;

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

Также витрина должна быть оптимизирована для быстрого выполнения запросов аналитиками, обновляться автоматически при появлении данных в исходных таблицах и учитывать возможные ошибки в данных, например пропуски или некорректные значения. Есть и другие требования (использование SQL, подготовка описаний витрины и так далее), но не будем заострять на них внимание — они могут занять ещё не один лист А4.

Как видно, исходные данные представляют собой разные таблицы. Для выполнения задания необходимо соединить таблицы по ключу. Например, таблица Sales может быть соединена с таблицей Stores через store_id. А после этого необходимо провести агрегацию данных.

Итоговая витрина может представлять собой простую таблицу. Но чаще всего итоговый результат визуализируют для наглядности. Этим занимаются BI-разработчики. Задача инженера данных в таком случае — предоставить данные BI-разработчику.

Так может выглядеть витрина данных
Так может выглядеть витрина данных

Если в наших таблицах 50–100 строчек, то вам хватит мощностей вашего компьютера и простого программного обеспечения. Но если вместо 100 строчек — 100 миллиардов строчек, понадобится специальное программное обеспечение, например Spark. Работа с таким ПО требует специальных навыков и знаний. Например, дата-инженер должен хорошо знать язык программирования Python и уметь писать запросы на SQL. 

Работа с архитектурой данных. Например, прямо сейчас я занимаюсь изменением архитектуры нашей выгрузки данных в процессе перехода с одной службы аналитики (Synapse) на другую (Databricks). Совершенствование архитектуры помогает сделать работу с данными дешевле и быстрее.

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

Встречи. Чтобы быть погружённым в бизнес-процессы, дата-инженеры посещают встречи с менеджерами и пользователями — например, аналитиками данных.

Чем дата-инженер отличается от других дата-специалистов

Между анализом данных, дата-инжинирингом, ML-инжинирингом и Data Science нет чёткого водораздела. Скорее, есть градиент — и сказать, где заканчивается одна профессия и начинается другая, иногда тяжело. Это связано с тем, что все эти специальности появились относительно недавно, и область всё ещё активно развивается. Я не исключаю, что через пять-шесть лет направления будут совсем другими.

Они уже сейчас могут сильно отличаться. Например, в Европе есть разделение на Data Engineer и Analytics Engineer. И грань между ними размыта и может быть своей у каждой отдельно взятой компании. Часто специалисты сами не могут ответить, в чём отличие одной специальности от другой. Поэтому, если вы идёте на собеседование, вам всегда важно выяснить, чем именно придётся заниматься и какие скилы вам понадобятся.

У этой градиентности есть плюс для дата-специалиста — он может легко сменить свою профессию на другую внутри области. У всех специалистов по данным есть пересекающиеся скилы, например Python или SQL. Кроме того, дата-инженеры обычно уже на курсах погружаются в статистику или машинное обучение, чтобы лучше взаимодействовать с аналитиками и ML-инженерами — то есть их профессия предусматривает, что они на каком-то уровне осваивают и смежные специальности.

К чему стоит быть готовым

Хардскилы важны, но их можно найти в любом описании профессии или программе любого курса, поэтому я остановлюсь на трёх особенностях работы дата-инженера, которые не так очевидны.

Много рутинных задач. Есть мнение, что ML-инженеры много экспериментируют и строят гипотезы, аналитики занимаются интересными исследованиями, а дата-инженеры — решают скучные и рутинные задачи. Я уверен, что это не скучно. Но рутинных задач бывает действительно много.

Работа требует внимательности и ответственности. Качество данных, которые предоставляет дата-инженер, влияет на последующие решения, принимаемые другими специалистами в компании. Поэтому инженер должен глубоко разбираться как в технических аспектах, так и в бизнес-процессах, чтобы обеспечивать достоверность данных и оперативно выявлять аномалии (например, цена Snickers не может быть 1 000 рублей!). Это требует усидчивости и навыков работы со сложными структурами данных.

Нужно постоянно учиться. Например, мы используем платформу для аналитики Databricks. А Databricks сейчас чуть ли не каждую неделю выкатывает новые фичи, выпускает видеоролики, постит новости на LinkedIn. Дата-инженеру нужно быть в курсе и разбираться со всеми этими функциями.

Многие большие компании используют свои инструменты для работы с данными. Значит, дата-инженеру придётся изучать их на каждом новом месте работы, а ещё помогать дорабатывать их в процессе.

Сфера работы с данными активно развивается, постоянно проходят конференции, люди делятся опытом и помогают друг другу совершенствовать подходы. Изменения в области трудно назвать революционными, но что-то происходит всегда — и дата-инженеру всегда приходится за этим следить и учиться новому.

Комментарии (0)