Инжиниринг Данных
22.9K subscribers
1.76K photos
51 videos
181 files
3.04K links
Делюсь новостями из мира аналитики и карьерными советами.

15 лет в Аналитике и Инжиниринге Данных, 9 лет в FAANG

🛠️ dataengineer.ru | 🏄‍♂️ Surfalytics.com

№5017813306

Реклама:
https://almond-rule-130.notion.site/1199f595f76a8030ba1be1e607c9a8ce
Download Telegram
Раньше я рассказывал про gentle и hardcore инженера. Я всегда был gentle, больше любил решать задачи с low-code приложениями и фокусом на business impact. В целом такой подход работает на все 100%. Но становится немного скучновата "нажимать кнопки и кликать мышкой", поэтому фокус сместился на все тоже самое но с применением SDE, DevOps, отсюда и различные книги и воркшопы по этой теме. Согласно картинке выше, у меня куча начатых книг и курсов по этим тема, надеюсь за лето закрыть вопрос про terraform, ci/cd, python testing (для Spark), docker, open source аналитика (dbt, meltano).

В выходные посмотрел 2 тренинга. Про 1й я уже скидывал контент - Python Env best practices. Тренинг не понравился. Все примеры были на PyCharm, показывали уже готовые примеры, суть не рассказали. И самое неудобное было, что у лектора был ноутбук 13" и его расшарили, где все было в кучку и она безконца скролила в лево-право.

Зато другой воркшоп зашел на ура - Python for DevOps - Learn fiercely effective automation. На тренинге узнал много приятных мелочей про Make file, github build, action, pytest, linting и тп. Эти вещи все были знакомы, но всегда воспринимались как должное, а тут все решения было собрано с нуля, и стало все просто и понятно. У автора есть очень хорошая книга - Python for DevOps. Так же у него есть курсы по Data Engineering с AWS Lamda, Python for AIOps и тп. Лектор очень хорошо рассказывает по принципу от простого к сложному и вместе с вами строит решение с 0. Поэтому я записался на его другой курс - Pytest Tricks and Tips.

Для сравнения, я прохожу другой курс Docker Fundamentals in 4 Weeks—with Interactivity от автора Docker Up and Running. Дядька конечно мега умный, но там какой-то hardcore с готовыми решениями, больше вопросов, чем пониманию.

По terraform я решил задачку для Amazon Redshift. Следующая будет про AWS EMR + Spark + Zeppelin. К сожалению в Microsoft решили использовать Azure Bicep вместо Terraform, все там через одно место (майкрософтовское)🤪
https://towardsdatascience.com/scalable-efficient-big-data-analytics-machine-learning-pipeline-architecture-on-cloud-4d59efc092b5

A data pipeline has five stages grouped into three heads:

Data Engineering: collection, ingestion, preparation (~50% effort) - работа Data Engineer или ETL разработчика. Может быть и 70-80% если без DS.
Analytics / Machine Learning: computation (~25% effort) - работа Data Scientist, но только есть есть такие задачи в компании и уже готовый фундамент.
Delivery: presentation (~25% effort)
- работа аналитика или BI разработчика
Кстати один раз заказал Rolex жене в подарок на Aliexpress за 25 долларов, но так и не дошли, наверно на таможне подрезали роскошь такую
This is not so much an instructional manual, but rather notes, tables, and examples for Python syntax. It was created by the author as an additional resource during training, meant to be distributed as a physical notebook. Participants (who favor the physical characteristics of dead tree material) could add their own notes, thoughts, and have a valuable reference of curated examples.

Текст книги в гите автора.
А вот colab notebook с тренингом по Pandas.

The pandas library is very popular among data scientists, quants, Excel junkies, and Python developers because it allows you to perform data ingestion, exporting, transformation, and visualization with ease. But if you are only familiar with Python, pandas may present some challenges. Since pandas is inspired by Numpy, its syntax conventions can be confusing to Python developers.

У автора есть классное repo с датасетами.
На днях общался с CEO&Founder Meltano. Рассказал ему как использую его продукт и послушал про их планы.

Meltano это open source продукт, которые умеет из коробки делать E(extract) и L(load), отлично работает в связке с dbt.

Видение meltano - data platform, да и вообще аналитическое решение - это software product. Инфраструктура как код, CI/CD, и все в лучших традициях разработки ПО.

Например, если вам нужно сделать полностью Open Source решение, то вы можете использовать:
- Meltano/Airbyte для Ingestion
- dbt для трансформации данных внутри хранилища
- Airflow/Dagster/Prefect - для расписания ETL job
- Superset/Redash для BI (есть еще ряд технологий).

Звучит просто, но на деле это сложно, вам нужно знать:
- язык программирования
- основы DevOps
- bash/shell
- командную строку
- Docker
и, наверно еще чего-то.

Если у вас есть профильное образование по Computer Science, то вам будет все очень просто, а вот если вы инженер конструктор или специалист по маркетингу ваш Learning Curve займет не один год. Поэтому вам проще начать с low-code/no-code приложения, и потом уже при стабильном доходе развиваться дальше.

Кстати, этот товарищ из Нидерландов и живет в Mexico City (Мексика) и ему там нравится, так что может быть Мексика не плохой вариант, люди там явно попроще и более открытые.

Их видение продукта создать аналитическое решение (ETL, BI, DW), которое будет полностью описано как код. Уже сейчас Meltano это платформа, которая умеет запускать dbt и дружит с Airflow.

Они начинали создавать Meltano Academy, но потом подзабили. Очень заинтересованы, чтобы я на русском сделал такой проектик для datalearn.
Прошел очередной workshop на O'Reilly - Bash Shell Scripting in 4 Hours. Хороший обзор команд bash. Я их часто видел, но не понимал зачем они, просто делал COPY-PASTE. Могу точно сказать, что после 4х часов, могу теперь читать и понимать Shell скрипты намного лучше. По материалам:
- Презентация
- Гит с примерами

Хотелось бы так же ответить на важный вопрос для новичков, особенно кто начинает Data Learn. У нас в требованиях есть "bash/shell". Мне всегда казалась, что это очень confusing.

Во-первых, из книги THE LINUX COMMAND LINE:

When we speak of the command line, we are really referring to the shell. The shell is a program that takes keyboard commands and passes them to the operating system to carry out. Almost all Linux distributions supply a shell program from the GNU Project called bash. The name is an acronym for bourne-again shell, a reference to the fact that bash is an enhanced replacement for sh, the original Unix shell program written by Steve Bourne.

Когда мы запускаем на компьютере terminal, как правило это ZSH на Mac или PowerShell на Windows. И это называется terminal emulator.

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

С помощью bash shell мы можем создавать программы, почти как в питоне, с циклами, переменными и функциями, но это не нужно на начальном уровне.

Самое сложное, что мне приходилось делать, это использовать bash shell скрипт, чтобы подключиться к менеджеру паролей, выгрузить секреты с использованием FOR оператора и загрузить их в Environment Variables, чтобы я смог передать их в Docker Compose.

Уверен кейсов много, но не стоит сильно заморачиваться, если не понимаете. Вам точно нужно:
- создание папки mkdir
- увидеть содержимое файла cat file
- простой редактор текста nano my_file.txt
- изменение прав доступа к папке файлу chmod
- список файлов и папок ls (ls -la)
- перемещение по папкам cd (cd .. - обратно)
- запускать скрипт ./script.sh или командой source
- скачивать git repo - git clone <URL> и ряд команд для создание branch, commit, push.
- иногда нужно работать с Environment Variables, например на mac os и linux они обозначаются $MY_VAR

Если это умеете, считайте вы знаете командную строку на должном уровне!🐒

PS когда много работаешь с командной строкой, понимаешь насколько неудобно все на Windows, лучше уж Mac OS или Linux для работы с данными.

Кстати, недавно открыл для себя плагин - OH MY ZSH, есть такой же и для Power Shell. Теперь одно удовольствие смотреть на командную строку и работать в ней.
Новости аналитики

Welcome to the world PyScript - недавно были новости про Python в HTML, и вот Anaconda уже рассказывает про PyScript - PyScript is a framework that allows users to run Python and create rich applications in the browser by simply using special HTML tags provided by the framework itself.


Choosing a Data Catalog - дата каталог, business glossary и data lineage - все это элементы data governance. У меня уже есть неудачный опыт использования Azure Purview, поэтому стал смотреть в сторону Open Source решений. Пока мне понравился OpenMetadata от Uber. В статье автор рассматривает разные решения и подходы для документации аналитического решения - Documentation coming from analytics teams must enable anyone to quickly find and understand any data asset they’re looking for to deliver value.

Data Vault Techniques on Snowflake: Immutable Store, Virtual End Dates - Snowflake готовит серию постов про Best Practices построения data vault.

What Is Well-Modeled Data for Analysis? - автор рассматривает важность моделирования данных в хранилище данных.

Data for Product Managers (Part 1/2) - я часто говорил, что data команде нужен не начальник аналитики, а product manager, который будет управлять data продуктами. В статье рассматривают чем же занимается product manager в контексте аналитики.

Tuning Whatnot’s Data Platform for Speed and Scale - компания Whatnot рассказывает про свое аналитическое решение, технологии и принципы data engineering.
From Junior Software Engineer to Engineering Manager: a 10-year career path review. - статья про карьерный путь инженера. Несмотря на то, что он iOS разработчик, его опыт применим для карьеры любого инженера.

"Do I want to switch to a more Senior or Principle Engineer position or to an Engineering Management one?"
"How could the Engineering Management role be a great opportunity for me, my team, and my skills?"
"Why is Engineering Management difficult for your confidence?"
"Why do I feel lonely as a manager?"
Data Engineering is about making data usable - отличный вариант и вообще не важно как мы это делаем, на SQL, Python или еще чего.

Правда автор умолчал про момент один - кто ему этот Jupyter Hub установил, если без инфраструктуры, то это уже для меня analytics engineer, а если мы сами сделали end to end решение, которое собирает данные, хранит и трансформирует, чтобы “making data usable”, то уже data engineer.
Как все быстро меняется, совсем недавно акции Амазон стоили 3500US$ за штуку, а теперь 2200. И в такой же пропорции упал весь tech. Акции Tesla и Microsoft просели. Amazon вообще показал квартал с отрицательной прибылью. Сегодня, Netflix уволил 150 человек, хотя они были образцом успешной компании с максимальной оплатой инженерного труда. Facebook тоже не ice. Крипта упала. Если раньше все акции любой технологической компании росли вверх, то теперь пузырь стал сдуваться💨 Так то весь мир трещит по швам.

Зато вот Microsoft, наоборот сообщил, что надо всем поднять зарплату в 2 раза! Это неожиданно, так как Microsoft платит меньше всех из всех компаний. Как раз в мае в Microsoft будет Performance review, вот и проверим.
Для всех фанатов Tableau, сейчас идет конференция по Tableau и вчера была презентация новых фич, если кратко, то можно ознакомиться здесь - Power your analytics advantage—new product innovations from Tableau Conference 2022

Запись Dev on Stage вы можете найти здесь.
Давно хотел рассказать забавный момент.

Когда я работал инженером в Amazon Alexa в Бостоне, точнее в Кембридж (их разделяет река), я был единственным инженером. Я работал с несколькими BI инженерами, которые строили все дашборды "на лету", то есть без хранилища данных. Вся логика была на SQL, никакой историчности, очень медленно и сложно. Так же, данные тянулись из трех регионов AWS, и где-то потом склеивались в файлах и SQL😱

Для меня сразу стало очевидно, что нужно хранилище данных, интегрировать данные вместе, из SQL запросов сделать data pipelines и все автоматизировать, что я и сделал на базе Redshift. Можно сказать, что это было мини хранилище для конкретных кейсов и одним из источников был папа Redshift (центральное хранилище данных для бизнес метрик Alexa).

В то время LakeHouse был еще в зародыше, а GDPR требования нужно было соблюдать (удаление клиентских данных). Мы могли легко удалить данные из базы данных и практически нереально удалить customer_id из озера данных на S3. Поэтому папа (а может мама) Redshift работал из последних сил на максималках - 128 нод dc2 (compute optimized). Явно не справляясь с нагрузкой.

Однажды меня попросили пересчитать все данные в нашем локальном Redshift за 2 года. То есть мне нужно выполнить 730 циклов наших запросов (один день за раз, иначе запрос не справляется). Я решил не заморачиваться и через API сервис внутреннего ETL инструмента запусти 730 джобов параллельно.

Главный недостаток Redshift - concurrency (кол-во одновременных запросов). Оказалось мои 730 запросов заняли очередь этого редшифта и больше никто не мог им пользоваться несколько дней. Команда поддержки тоже не понимала, что не так, так как "редшифт же работает". Потом они нашли виновных😊

Но это не самое главное. Стало очевидно, что нужно копировать логику к себе и строить независимую платформу. Для этого я потратил пару месяцев на создание Press Release, в котором написал, почему мы это делаем, сколько стоит, какие преимущества и тп.

Самый приятный момент в этой истории - выбор кодового названия платформы. Идея была простая, есть основное файловое хранилище данных Alexa, а я создаю платформу, которая как бы рядом, что напомнило мне Землю и Луну (луна в данном случае спутник земли). Да еще русские запустили первый спутник в космос - "Спутник -1". 🛰

Это был в конце 2018. Название платформы "Sputnik" всем понравилось и плотно вошло в обиход за пределами нашей команды вверх по вертикали. Советская космонавтика тоже всем понравилась.

Ну а дальше вы знаете, первая вакцина от Covid - Спутник и далее по списку.

Недавно разговаривал с коллегой, кто пришел на мое место, он доложил, что Спутник еще живет, хотят его название confusing.😎
Вышла новая книга - Data Algorithms with Spark. Я ее еще давно приметил.

In each chapter, author Mahmoud Parsian shows you how to solve a data problem with a set of Spark transformations and algorithms. You'll learn how to tackle problems involving ETL, design patterns, machine learning algorithms, data partitioning, and genomics analysis. Each detailed recipe includes PySpark algorithms using the PySpark driver and shell script.

1. Introduction To Spark And PySpark
2. Transformations In Action
3. Mapper Transformations
4. Reductions In Spark
5. Partitioning Data
6. Graph Algorithms
7. Interacting With External Data Sources
8. Ranking Algorithms
9. Classic Data Design Patterns
10. Practical Data Design Patterns
dbt известны своей относительной простотой, так как дает возможность создавать все трансформации данных на SQL. Согласно их roadmap на 2022 год, они добавляют поддержку Python - Python-language dbt models
Готовлю загадки для дня рождения дочки. Загадки почему-то напомнили собеседования FAANG и другие компании с замороченными вопросами😂

Примеры:
• Что было «завтра», а будет «вчера»? (сегодня)
• Что принадлежит вам, но другие используют это чаще? (ваше имя)
• У броненосца две передние ноги, две задние, да еще две левые и две правые. Сколько ног всего? (четыре)
• Каких камней нет ни в одном море? (Сухих)
• Какая птица из яйца родится, а яйца не несёт? (петух)
• Как далеко в глубь леса может забежать заяц? (до середины, дальше уже выбегает из леса)
• Может ли страус назвать себя птицей? (нет, страусы не разговаривают)
• Что не вместится даже в самую большую кастрюлю? (крышка от этой кастрюли)

Можете добавить к себе в список вопросов для кандидатов🦧
Инфраструктура как Код (Infrastructure as Code) - Модель «Инфраструктура как код (IaC)», которую иногда называют «программируемой инфраструктурой», — это модель, по которой процесс настройки инфраструктуры аналогичен процессу программирования ПО. По сути, она положила начало устранению границ между написанием приложений и созданием сред для этих приложений. Приложения могут содержать скрипты, которые создают свои собственные виртуальные машины и управляют ими. Это основа облачных вычислений и неотъемлемая часть DevOps. (Источник - Инфраструктура как код, выигрываем на масштабе)

Есть еще такое определение (нужна же практика иностранного языка) - Infrastructure as Code provides a way to describe or declare what infrastructure looks like using code. The declarative nature of Infrastructure as Code is sometimes referred to as the desired state. In the code, you describe the result of the infrastructure and how it should look after the code runs. The code then builds out the infrastructure as described. Any deviation from this declared state can be remediated using the description of the infrastructure as code.

IaC - часть DevOps. Уже многие из вас попробовали создавать ресурсы в AWS, Azure, GCP или даже в Яндекс облаке. Когда мы создаем 1-3 ресурса, потыкать мышкой нам не западло, а вот если надо сделать 50 виртуальных машин, да еще дополнительные сервисы к ним, и потом все продублировать на среду разработки, тестирования и в продакшн, то можно приуныть.

Поэтому ленивые умные люди изобрели возможность описывать инфраструктуру как код.

Лидер тут безусловно - Terraform (ждем когда можно будет в яндексе создавать ресурсы в терраформ).

Terraform allows writing descriptions of infrastructure using very human-readable and intuitive descriptions of resources using blocks, arguments, and expressions. These descriptions of infrastructure in code allow quickly building, changing, modifying, and versioning infrastructure.

Я уже пробовал Terraform в Azure и AWS, это крутая штука. Если вы в западном облаке, было бы неплохо изучить азы.

у Microsoft все всегда по-своему, и у них есть Azure Bicep - Fundamentally it is a transpiler, taking a new language and translating that into ARM templates like you can do any other time to deploy on Azure. If you have multiple different languages, you could have a situation where something is supported in one language but not the other.

Если вы уже работали в Azure, то возможно заметили, каждый раз как создаете новый ресурс, у вас в конце есть ARM template - это JSON файл, который описывает конфигурацию Azure ресурса(ов). А bicep - это user-friendly интерфейс, чтобы уйти подальше от практически non human readable json и к более практичному подходу, почти как у terraform.

Мне "повезло" в двойне, с одной стороны мне надо описать всю инфраструктуру на Azure, которую я так долго и усердно кликал мышкой, с помощью Azure Bicep, а с другой стороны мне нужно создать Terraform template для EMR, SageMaker, Glue, Redshift и кучи других AWS сервисов.