![](https://habrastorage.org/getpro/habr/upload_files/cef/f92/7ad/ceff927ad6c845385ea0887cc6b18e8d.png)
Привет, username! Меня зовут Иван Васенков и я джуниор дата-инженер в дирекции данных и аналитики Lamoda. Но к этой профессии я пришел не сразу: окончив университет, я начал работать аналитиком данных, затем стал BI-разработчиком, а уже после этого — дата-инженером.
На моем пути были простые и сложные участки: где-то помогал опыт предыдущей работы, а где-то приходилось доучиваться практически на ходу. Именно поэтому я хочу поделиться советами из своего опыта, которые помогут начинающим специалистам быть максимально готовыми к вступлению в мир дата-инжиниринга.
Небольшая предыстория
Я стал аналитиком, потому что не знал, чем хочу заниматься. Устроиться на эту должность с высшим техническим образованием и без опыта работы было проще всего. Как правило, за вакансией аналитика может скрываться широкий спектр обязанностей, но при этом от кандидата требуются минимальные технические навыки.
В целом, я не прогадал: именно на этой должности я смог применить свои знания на практике, а также начал понемногу писать на Python, используя его для работы с API, библиотеками Pandas и Selenium.
Спустя некоторое время я стал заниматься BI (Business intelligence). Я познакомился с ETL-процессами и архитектурой аналитических хранилищ данных. И в процессе получения новых знаний и опыта начало формироваться представление о «большой» аналитике. А в нее входил data engineering, который целиком состоял из интересных для меня задач.
Без лишних отступлений скажу, что мне удалось осуществить задуманное и устроиться на позицию младшего разработчика Big Data. Мне помог опыт работы с данными в качестве BI-разработчика, дополненный знанием остальных основ. И вот об этом мы сейчас и поговорим.
Итак, вы хотите стать дата-инженером…
Как и обещал, расскажу поподробнее, как выстроить процесс подготовки и обучения, если у вас все же появилось желание стать дата-инженером. Все необходимые для старта знания можно получить бесплатно и из разных источников.
Три дата-кита: Linux, Python и SQL
Linux. Это база, без которой не обойтись человеку, который собирается работать с данными, будь то дата-инженер, аналитик или сайентист. Да и в целом любому начинающему IT-специалисту.
В ходе работы дата-инженер будет проводить значительную часть времени, работая с командной строкой Linux для доступа к серверам с базами данных и взаимодействуя с кластером и другими системами. Именно поэтому необходимо владеть базовыми командами для перемещения по директориям, создания и редактирования файлов, уметь настраивать авторизацию по ssh-ключу, знать, как заходить на удаленный сервер по ssh и как выйти из vim.
Чтобы освоить навыки работы с командной строкой и познакомиться с языком программирования bash, рекомендую эти ресурсы:
Курс на русском языке на сайте Stepik.
Интерактивный учебник по программированию на Bash на английском.
Видеокурс «Linux для начинающих» на Ютубе на русском языке.
SQL. Это язык для обработки и извлечения данных, которые хранятся в базе данных. Он считается стандартом для большинства СУБД (систем управления базами данных). Обязательно стоит изучить основные понятия реляционной модели, запросы для фильтрации, группировки данных, виды объединения таблиц и порядок выполнения операторов запроса. В качестве задачи со звездочкой можно попробовать познакомиться с оконными функциями.
SQL на первый взгляд не такой уж сложный, но иногда заставляет усердно гуглить, чтобы составить тот или иной запрос. При этом, решая практические задачки, можно довольно легко достичь базового уровня знания языка. В интернете есть много ресурсов для обучения:
Тренажер SQL-ex на русском языке.
Учебник SQLBolt на английском.
Сборник обучающих видео и задач Khan Academy. Intro to SQL.
Python. Python — стандартный язык программирования для инжиниринга данных с минималистичным синтаксисом. Также на нем написан популярный оркестратор Airflow и его используют для работы с не менее популярным Apache Spark через питонячий интерфейс PySpark.
Мой совет: закреплять изучение языка практикой. А если конкретнее, то сделать небольшой учебный проект, на котором можно будет испытывать что-то новое. Если сложно придумать проект самостоятельно, то можно погуглить «проекты на python для начинающих».
Нелишним будет порешать алгоритмические задачи на Leetcode. Они помогут набить руку и разобраться со структурами данных и с алгоритмами в целом. А ещё они разбиты на уровни сложности и есть возможность посмотреть, как эту задачу решали другие люди (но это стоит делать только после самостоятельного решения задачи).
Здесь можно погрузиться в Python:
Видеокурс «Практика программирования на Python 3» на Ютубе на русском языке.
Базы данных и хранилища данных
Освоив азы и научившись выполнять отдельные манипуляции с данными с помощью SQL, пора приниматься за популярные модели хранилищ данных. Эти знания не столько пригодятся для использования в работе, сколько нужны на собеседованиях и для общей подкованности в вопросах реализаций систем хранения данных.
Изучите подходы основателей технологий построения хранилищ — Билла Инмона и Ральфа Кимбалла. По ходу изучения у вас должно сформироваться первое впечатление о нормализации и связи таблиц в хранилище, а также о том, какие есть сложности в организации хранения данных и почему существует несколько моделей построения хранилищ данных.
Полученные знания желательно применить на практике хотя бы на одной из реляционных СУБД: например, PostgreSQL или MySQL. В качестве тренировки можно продумать структуру хранилища данных какой-либо организации и воспроизвести ее при помощи СУБД. Заранее можно поискать подходящий датасет и наполнить созданное хранилище на основе его данных — это будет хорошим дополнением к тренировке.
С хранилищами данных тесно связаны системы обработки транзакций и аналитических запросов — OLTP/OLAP. Транзакционные системы заточены на выполнение большого количества относительно простых операций (вставка, удаление, обновление строк) за как можно меньший период времени. А аналитические решения направлены на извлечение данных для генерации решений или идей на их основе. Понимание основных различий в модели хранимых данных, принципах обработки информации и места каждой системы в архитектуре хранилищ полезно для изучения возможных подходов к обработке данных.
Нелишним будет посмотреть на нереляционные СУБД. Разобраться в их многообразии довольно сложно, но они широко распространены в мире инжиниринга данных, и в идеале будет полезно познакомиться с одной СУБД каждого типа:
Тип | Пример БД |
Документоориентированные | mongoDB |
Ключ – значение | Aerospike, Redis |
Семейство столбцов | HBase, Cassandra |
В целом по базам данных полезно знать основные концепции, которые применяются при их использовании. Так вы быстрее разберетесь, какие есть слабые и сильные стороны у разных подходов и решений для хранения данных.
И еще несколько ссылок на тему баз данных:
Курс «Введение в базы данных» на сайте Stepik на русском языке.
Видеокурс «Database Design Course».
ETL и ELT
Понимание принципов трансформации данных — это связующий элемент, понимание которого делает из вас не просто человека, знающего перечисленные выше технологии, а специалиста, способного подготовить необходимые данные.
Если вы умеете работать с БД и делать трансформации, например, переливая данные из одной базы в другую по определенному алгоритму, то вы можете честно называть себя дата-инженером.
Оптимальный способ познакомится с ETL и ELT — сделать проект своими руками. У него должна быть такая задача: автоматизировать преобразование и загрузку данных из одного или нескольких источников куда-либо еще. В дополнение можно поставить этот процесс на выполнение по расписанию. В качестве источников и конечных точек могут выступать файлы, базы данных, API. Обладания навыками, упомянутыми выше, должно хватить для решения этой задачи.
Здесь можно найти дополнительную информацию по ETL и ELT:
Модуль, посвященный ETL и ELT, курса Введение в аналитику и инжиниринг данных от DataLearn.
Туториал «Building ETL Pipelines - For Beginners» на Медиуме.
И еще несколько полезных советов
Станьте участником сообщества. Кажется, что сейчас для каждой технологии можно найти тематический чат в Телеграме, форумы и образовательные порталы. Это простой способ попасть в среду, которая будет снабжать вас полезной и актуальной информацией: что сейчас в тренде, что почитать или посмотреть, где найти нужные материалы или курсы.
Вот небольшая подборка каналов, которые я рекомендую:
Канал Дмитрия Аношина из команды DataLearn, посвященный инжинирингу данных.
Чат в телеграме, где можно обсудить вопросы и проблемы по теме дата-инжиниринга.
Канал, где публикуются вакансии на позицию инженера данных и не только.
И конференции:
SmartData — конференция для инженеров данных.
HighLoad++ — конференция для разработчиков высоконагруженных систем.
Составьте хорошее резюме. Помочь разобраться с составлением резюме могут первые несколько ссылок по запросу в Гугле. Помните, что оно должно быть небольшим: максимум пара страниц, а лучше одна.
Но, пожалуй, самое важное: описывайте достижения, а не только умения и навыки. Если ты прошел курс, что-то посмотрел, где-то поучаствовал — это хорошо. Но работодателя будет интересовать, как повлияла твоя работа на проект или бизнес в целом. Как ты смог улучшить производительность, сэкономить время или деньги компании, увеличить надежность приложений и прочее в этом духе.
Но если у вас нет релевантного опыта работы, хорошим подспорьем могут стать пет-проекты, в которых используются подходящие технологии. Здесь тоже желательно показать, как вы работали и какие были результаты.
Не учите все и сразу. Пытаться подобрать набор технологий для дальнейшего подробного изучения с целью дорасти на этом стеке до старших уровней — гиблое дело. В первую очередь дата-инженеру необходимо понимать основные различия технологий, как их выбирать и применять, чтобы решить основную задачу — предоставить бизнесу данные для извлечения из них пользы.
Куда двигаться дальше, будет во многом зависеть от вашей команды, потому что вы будете расти на технологиях, которые в ней используются. Кто-то использует облака, хранит данные в S3 и работает с Redshift и Snowflake. А кто-то использует Hadoop, Vertica, Greenplum или ClickHouse. Ещё есть различные вычислительные движки, которые только обрабатывают данные, не занимаясь их хранением, например, Spark, Hive, Presto/Trino, Amazon Athena и другие.
Главное, не останавливайтесь в поисках новой информации и совершенствуйте свои навыки. Таков путь любого специалиста.