Хабр, привет! Меня зовут Саша Сайков, я дата-инженер в PepsiCo и старший ревьюер на курсах «Инженер данных» и «Инженер машинного обучения» в Яндекс Практикуме. Я хочу рассказать, чем занимаются дата-инженеры, в каких компаниях мы работаем и чем отличается наша работа от работы других специалистов по данным.
Немного о моём опыте
Я работаю в этой сфере больше трёх лет, причём только на позиции дата-инженера. Начинал карьеру в IT-интеграторе «Синимекс» и работал как аутстафф-сотрудник Сбера. В основном выполнял задания по написанию витрин.
Потом около года работал в американском стартапе — мы строили модель, которая может предсказывать исход суда по патентным делам в США. А затем провёл полгода в компании Mars, которая делает всем известные шоколадки и корм для животных, например Royal Canin.
С февраля этого года я работаю в PepsiCo в отделе, который занимается продажами в Яндекс Маркете, Яндекс Лавке, Ozon, «Самокате» и других доставках.
Кто такой дата-инженер
Дата-инженер (или инженер данных) — это разработчик, который отвечает за надёжное и стабильное поступление данных, за обеспечение их качества, их обработку и то, чтобы эти данные в подходящем виде попадали к конечным пользователям — людям, которые будут принимать так называемые data-driven-решения по бизнесу. То есть использовать данные от дата-инженера, чтобы увеличить продажи, сократить расходы или что-то в этом роде.
Для этого дата-инженер представляет информацию для витрин данных — интерактивных дашбордов, на которые смотрят менеджеры, аналитики, дата-сайентисты. И не только смотрят, а ещё и преобразуют, пересохраняют, совмещают с другими данными и так далее.
В каких компаниях работают дата-инженеры
Для начала стоит разделить: есть дата-аналитики — люди, которые понимают статистику и строят гипотезы. Есть дата-сайентисты, которые строят и совершенствуют модели работы с данными. А есть дата-инженеры, которые непосредственно работают с источниками, обрабатывают, хранят и доставляют информацию.
Если компания работает с небольшим количеством данных, не исключён вариант, что один человек выполняет все эти роли. Он сам подключает источники, сохраняет данные, обрабатывает, настраивает еженедельную выгрузку и проводит анализ.
Как только данных будет становиться больше, потребуются более сложные модели и новые инструменты — один человек с этим уже не справится. Понадобятся люди, которые работают в своих узких областях. Будут и дата-сайентисты, и ML-инженеры, и, возможно, даже специалист, который отвечает только за архитектуру хранения данных. В больших отделах могут быть дата-журналисты, дата-стюарды, дата-чемпионы — ролей в этой работе много.
Чем больше данных, тем больше узконаправленных специалистов. Чем данных меньше, тем меньше людей — и шире их экспертиза
Количество данных и занятых в этой сфере людей не всегда зависит от размера компании. Небольшой штат широкопрофильных специалистов может быть и в корпорации. А маленькая компания, наоборот, может думать наперёд, закладывать перспективу масштабирования и сразу нанимать нужных сотрудников. Например, в американском стартапе, где я работал, было всего десять человек, и четыре из них — дата-инженеры.
Какое место дата-инженеры занимают в команде
Я упомянул, что четверо из десяти сотрудников стартапа, в котором мы предсказывали исходы судов по патентным делам в США, были дата-инженерами. Всё потому, что данных было много и от нашей работы зависело то, как другие специалисты их обработают и к каким выводам придут.
Дата-инженер закладывает фундамент — делает данные такими, чтобы с ними могли работать аналитики, дата-сайентисты и другие специалисты. Если строить процессы наоборот (например, начиная с анализа), можно допустить ошибки, которые будет трудно исправить
В организации работы команды бывают две крайности. Первая — это когда все отвечают за всё. Дата-инженер в такой системе не ждёт продакт-оунера или менеджера, который придёт к нему с задачей, а сам себе её ставит и доводит до результата.
Вторая крайность — это забюрократизированные и даже закостенелые структуры, где есть чёткая иерархия и строгий порядок постановки задач. У дата-инженера в такой команде есть условный начальник. Дата-инженер может пойти за помощью к аналитику или дата-сайентисту, который инициировал выполнение задачи, но в любом случае через руководителя.
Сейчас я работаю в PepsiCo, и мы стараемся не уходить ни в одну, ни в другую сторону. То есть стараемся делать так, чтобы инженеры были погружены в бизнес-процессы, участвовали в разработке технических заданий, общались с пользователями — в общем, не были винтиками в механизме и понимали, что и зачем они делают. Но при этом мы поддерживаем регламенты в работе и стремимся уберечь инженеров от хаоса, часто свойственного стартапам.
Так, ко мне может прийти менеджер с просьбой перевести «эксельку» в Power BI (программу для анализа данных). Или аналитик — с просьбой провести какое-нибудь небольшое исследование или помочь оптимизировать запросы в базу данных, чтобы всё работало быстрее.
Во многих прогрессивных командах принято работать так же — в горизонтальной структуре и не проводя каждое действие через узкое горлышко руководителя.
Какие задачи выполняют дата-инженеры
Их можно разделить на несколько групп. Задачи зависят от компании, поэтому расскажу о тех, которыми занимаюсь сам.
Поддержание выгрузок. В работе с данными используются пайплайны — последовательности действий, которые позволяют направить информацию должного качества конечному пользователю. К сожалению, в этих пайплайнах всегда что-то случается — изменился тип данных от поставщика, появилась ошибка соединения или ошибка обнаружилась в коде. В итоге данные не поступают или поступают не в том качестве. В некоторых компаниях даже бывают дежурства у дата-инженеров — чтобы «поднять» «упавший» пайплайн можно было в любое время суток.
Рассмотрим пример пайплайна.
Этот пайплайн состоит из следующих этапов:
Загрузка данных из двух источников.
Фильтрация данных.
Соединение таблиц.
Агрегация данных. Например, подсчёт суммы заказов за день.
Запись данных в базу.
У нас есть источники данных. Часто бывает, что эти данные поступают от других команд или даже от другой компании. Допустим, пайплайн запускается каждый день в 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. Дата-инженеру нужно быть в курсе и разбираться со всеми этими функциями.
Многие большие компании используют свои инструменты для работы с данными. Значит, дата-инженеру придётся изучать их на каждом новом месте работы, а ещё помогать дорабатывать их в процессе.
Сфера работы с данными активно развивается, постоянно проходят конференции, люди делятся опытом и помогают друг другу совершенствовать подходы. Изменения в области трудно назвать революционными, но что-то происходит всегда — и дата-инженеру всегда приходится за этим следить и учиться новому.