дата инженеретта – Telegram
дата инженеретта
2.99K subscribers
242 photos
28 videos
4 files
102 links
мелкое — крупно,
в глубоком разговоре
мудрость приходит

по вопросам сюда: @aigul_sea
Download Telegram
Привет! o/

Меня зовут Айгуль, и я работаю дата инженером в крупной компании👩‍💻

Кратко о себе:
🐦 окончила вуз по направлениям "Бизнес-информатика" и "Программная инженерия"
🐦 посвятила время фронтенд- и бэкенд-разработке, но основную часть – работе с данными
🐦 сейчас использую технологический стек: Spark, Hadoop, Hive, Python, Scala, Airflow, dbt, ClickHouse, Superset

В этом канале я буду:
🐤 рассказывать о своем пути: с чего начинала, чего достигла и как я оказалась в этой точке
🐤 рассказывать о настоящем: чем занимаюсь сейчас, какие курсы прохожу, какие проекты поделываю для души
🐤 рекомендовать подборки материалов и полезных ресурсов
🐤 постить интересные задачки и лайфхаки на тему данных (и не только!)
🐤 помогать прокачиваться быстрее, чем это делала я

В общем, впереди много всего крутого😎

На вас смотрит серьезное личико, потому что мы будем серьезно говорить о несерьезных вещах. Ну, или наоборот)

Добро пожаловать!🤗
133👍11🔥7🤡1
Мой путь в сфере данных начался в 2019 году, когда я пошла на день открытых дверей в PwC - аудиторскую компанию из "большой четверки". Там я узнала про летние академии, зарегалась и прошла отбор. По результатам участия в этом двухнедельном мероприятии должны были выбрать особо активных студентов, чтобы потом пригласить на собес. Я не знаю, каким образом я туда попала, потому что вот эта аудиторская тематика, анализ деятельности компаний, проведение инвентаризаций - все было мимо меня))

Ну ладно, на собесе (вдруг!) спрашивали про sql и просили писать запросы. Я не готовилась, с базами данных перестала контактировать года 2 как до этого, предмет был, но я все равно не до конца его понимала и даже забыла, как правильно написать order by😂

Но меня взяли🥳 и спустя 4 месяца я пришла на предрабочие тренинги. Такие правила игры🤷‍♀️ больше рабочих рук требовалось в бизи сизон с января по март в пик отчетностей. Когда меня спросили: "В какую команду ты устраиваешься?", я вообще понятия не имела) Предположили, что буду сидеть на звонках, но фух, пронесло))

В общем, меня взяли в команду JET (Journal Entries Testing) - это когда аудиторы присылают транзакции компании, оборотно-сальдовую ведомость, свои критерии тестирования и требуют сделать, чтобы все разницы сошлись по нулям. Другой большой стрим - переоценка нереализованных курсовых разниц. Там своя тема с валютными балансами, и все пересчеты тоже должны были сходиться.

В этой команде я проработала почти 3 года, где через мои руки и голос прошли 14 коллег, которых я коучила и ревьюила, паралелльно сдавая экзы в маге👩‍💻 За это время я получила hands-on experience в sql (были те еще извращения) и научилась сохранять все рабочие файлики (потому что когда-нибудь оно всплывет). И, конечно, много всего другого.

По итогу получилось так, что я окончила магу и решила уходить. Параллельно работать было на 300% комфортно, но расти дальше тоже нужно. Потихонечку опрашивала покидавших нас коллег, куда они шли и куда могла бы стремиться я) Но по факту я чисто сходила на корпорат, получила повышение, забрала премию и ушла😂

Я и не предполагала, что уже через год поменяю еще одну работу и один город. Но об этом уже в следующей серии...
🔥174👍1🏆1
Спустя 5 дней я уже сидела в новеньком офисе в роли SQL-аналитика в Совкомбанке. Собес проходил в два этапа - решить тест на дому за полчаса и пообщаться с руководителями.

В тесте было 2 задания: написать запросы и технически объяснить, что выдаст уже написанный один большой запрос. Задания были основаны на использовании case when, between, in, like, having, подзапросов, оконок, встроенных функций типо current_timestamp, datediff, на понимании видов джойнов и кругов Эйлера. Тут есть очень удобная штука для визуализации этих кругов SQL Visualizer, но сейчас доступна только под впн(

Я попала в отдел фрода, и у меня был доступ ко всем транзакциям физических лиц😎 Еженедельно собиралась статистика по тому, сколько у кого украли и скольких беззащитных бабулек мы смогли вразумить. Цель - проанализировать поведение мошенников и обычных людей и сделать так, чтобы мы со 100% точностью ловили первых и не беспокоили вторых. Но реальность неидеальна😔 Цепочка транзакций могла сильно разрастаться:
• Петя берет у нас кредит, выводит
• Вася берет кредит в другом банке
• Вася переводит деньги из другого банка к нам на свой счет
• Вася переводит эти деньги Пете
• Петя снимает деньги в кассе
(если что, это все отлавливается, так что не пытайтесь!)

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

🐝Всего я проработала 5 месяцев, и, хотя после испыталки все вдруг наладилось и меня даже не хотели отпускать, осадочек засел очень глубоко. Видимо, как есть стресс-интервью, так есть и стресс-испыталка. Все равно я многому научилась: писать 200-строчные запросы, триггеры и процедуры, разбираться в логике проведения банковских транзакций. Еще узнала важную истину: многие магазины блефуют, когда предлагают оплатить через сбп. За него не списывается комиссия за пользование pos-терминалом (куда мы прикладываем карточку) и не начисляется кешбэк, потому что под капотом это обычный перевод🐦
7🔥7
Через пару месяцев (в декабре прошлого года) я начала искать работу. Так как уходить так быстро я не собиралась, то не могла осознать, чего же я хочу сейчас. В тот момент многие мои знакомые уехали за рубеж, и мне тоже захотелось попытать счастья🌝 Мне вкинули идею с линкедином, я создала страничку и начала откликаться на вакансии (добавиться можно тут).

Про свои поиски я рассказывала друзьям, и один из них предложил по рефералке закинуть меня в международную компанию и скинул список оф. вакансий на дата инженера (спасибо!). Я никогда не задумывалась о поиске на такую роль. И начала разбираться, чем отличается куча столь похожих профессий: Data Analyst, Analytics Engineer, Data Engineer, Data Scientist, ML Engineer. Позиции были технически скилловые и очень крутые, и в этот момент я задумалась: а может, я всегда хотела быть дата инженером?

Тогда я начала искать конкретно датаинженерные вакансии. Моей целью было получить хотя бы опыт собеседований на английском. Но я отправила около 100 откликов за пару месяцев и не получила ни одного приглашения☹️

Зато промониторила рынок.

И создала файлик "Things I Should Know" из тех требований, которые встречала чаще всего:
❄️ Snowflake
❄️ AWS
❄️ Azure
❄️ Spark
❄️ Hive
❄️ Hadoop
❄️ ETL/ELT
❄️ Kafka
❄️ Redshift
❄️ Kubernetes
❄️ Databricks

А потом я наткнулась на два очень полезных ресурса, которые круто изменили мою жизнь!
🔥16👍1
🪄Я не помню как, но в январе я наткнулась на чат Data Learn и их ютуб-канал. В программе 7 модулей (см. плейлисты): Overview, Databases, BI, ETL/ELT, Cloud, OLAP, Spark. Скажу честно, что меня хватило только на первые два, которые можно и так частично скипнуть( По желанию можно скидывать домашку, которую более прошаренные ребятки проверят. Очень ждала модуля по Spark, который к тому моменту еще не был записан, а теперь он есть!

💎И вот в том чатике кто-то упомянул zoomcamp. Конечно, мне надо было все про это разузнать)) И я запрыгнула в уже едущий поезд.

📌Кстати, у них в январе стартует новый поток🥳✏️

Что там было?
• всего шесть недель
• каждую неделю:
• пул видосов по теме (штук 10-15)
• онлайн Q&A сессия (в записи тоже)
• домашка, которую проверяют и оценивают
• чатик, где можно попросить помощи
• в конце нужно все применить и сделать проект

Что по инструментам?
Postgres, Spark, Prefect, Kafka, Docker, dbt, BigQuery, Terraform, Google Cloud (который я +- заменила на Yandex Cloud) - просто то, что нужно🔥
В предыдущих потоках вместо Prefect использовался Airflow, поэтому можно дополнительно поизучать по видосам.

В целом, программа заняла 1,5-2 месяца. К сожалению, во время зумкампа я нашла работу и не успела завершить проект🤭 Но об этом далее)
Please open Telegram to view this post
VIEW IN TELEGRAM
10🔥6👍2
🧑‍💻Пока я проходила бесплатные курсы из предыдущего поста, я добавила новые инструменты себе в резюме, сделала его красивым тут и параллельно продолжала искать работу. Нашла ее на линкедине, где моя будущая коллега выложила вакансию. Весь процесс занял три недели.

Что нужно было знать?
- разбираться в концепциях хранилищ данных
- знать питон или скалу
- уметь написать витринку на спарке
- разбираться в спарк конфигах
В доке есть огромная табличка. Естественно, не все параметры нужны для ежедневной настройки, так что, если вам интересно, я подготовлю список самых часто используемых.
В общем, это был мой первый собес на ДЕ, и я его прошла!

🧑‍🎓Помимо знаний с курсов, мне помогла моя магистерская и весь треш, через который я прошла при ее подготовке год назад. Я успела потрогать dbt, Airflow, Metabase (BI тулза), разобраться в форматах хранения биг даты (parquet, avro и т. д.), поразворачивать хадуп локально и в докере и покопаться с его настройкой.

💬Плюс мне начали попадаться всякие крутые датаинженерные чатики. Рекомендую вот эти, в них можно почерпнуть глубокую мудрость:
https://news.1rj.ru/str/rockyourdata
https://news.1rj.ru/str/dataengineering_chat_ru
https://news.1rj.ru/str/datalearn_community
https://news.1rj.ru/str/hadoopusers
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥93👍21💯1
🎚Вакансию я нашла в Москве, а жила в Казани. Параллельно был оффер на другую позицию (примерно такую, где можно было работать удаленно). Тут я встала перед выбором: жить спокойной жизнью, как и раньше, или воспользоваться крутыми перспективами развития.

👨‍💻Я начала ресерчить: нашла сотрудников обеих компаний (опять-таки в линкедине), посмотрела на их обязанности, пообщалась. Даже встретились люди, которые раньше работали там, где я была тогда☯️ Поспрашивала в тг чатиках, у друзей и знакомых отзывы о компаниях, должностях и о целесообразности переезда. Сила в нетворкинге😎

👋В итоге я решила отказаться от перспектив и приняла второй оффер. Потом оказалось, что на эту позицию уже взяли предыдущего кандидата (хотя прошел всего лишь день), и я вернулась такая "ой, а я случайно, а мы можем представить, что ничего не было?"☺️ Вывод: лучше раньше времени не отказываться)) Потому что все до последнего момента может поменяться.

🤔Но я снова долго думала и не решалась переезжать. В итоге дотянула до того, что я отработала две недели, тем же вечером села в поезд, а с утра пошла устраиваться на новую работу😁

Кстати, зарплатные вилки можно смотреть тут:
https://getmatch.ru/salaries - российский рынок ИТ-направлений
https://www.reddit.com/r/dataengineering/comments/188grde/quarterly_salary_discussion_dec_2023/ - а тут дискуссии на мировом рынке
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥111❤‍🔥1
Сейчас я работаю мидл дата инженером в Сбере в команде очень крутых коллег, всем респект!🔥

🧑‍🎓Первые пару недель было реально тяжело влиться в процессы, т.к. казалось, что от меня ожидают гораздо большего, чем я могу дать. Каждый день я была в состоянии «ничего не понятно😩». Поэтому я после и до работы смотрела нужные видосики с karpov courses и подтягивала теоретическую базу. Видосами со мной поделился один хороший человек, поэтому старайтесь наращивать базу полезных контактов)

📺Что мы делаем?
У нас есть несколько уровней организации: команда -> кластер -> трайб. И вот наш трайб - про маркетинг. Мои коллеги придумывают рекламу, а мы потом смотрим, как она работает.

💠Что я делаю?
Кручу таблички, большие таблички на связке Hadoop+Spark в Jupyter Notebook👩‍💻
Делаю витринки с данными, которые потом мои коллеги-аналитики используют для бизнес-инсайтов
Строю пайплайны обработки на dbt+Airflow🐍
По ходу дела пришлось разобраться в Scala, Clickhouse и Superset, чтобы оптимизировать код, удобно складывать результаты расчетов и строить красивые чартики📊

А недавно я ходила на сходку питонистов, где со мной поделились полезной инфой по митапам (офлайн и онлайн):
https://news.1rj.ru/str/ict2go
https://news.1rj.ru/str/ITMeeting
https://news.1rj.ru/str/meetupochnaya
Please open Telegram to view this post
VIEW IN TELEGRAM
12🔥8❤‍🔥2💯1
👩‍💻Если вы думаете, что никому не нужен ваш личный гит-репозиторий, то на него точно смотрят.

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

🎆В какой-то момент я сильно увлеклась онлайн-игрой «Ханаби», и мне захотелось собирать статистику по пользователям и анализировать разные показатели.

🤓Что я делала?
1. Начала с парсинга html-страниц с историей игр
2. Потом узнала, что есть апишка, и начала складывать данные в json-ы
3. Позже настроила загрузку сразу в бд
4. Потом захотелось искать игры по определенным критериям и даже создать свой язык запросов😁 Но меня вовремя отговорили и предложили поменять структуру бд, чтобы она чуть менее оптимально использовала ресурсы в пользу более удобного поиска.

🤔Зачем?
Чтобы делиться инсайтами с другими игроками. В сообществе были программисты и математики, которые предлагали разные алгоритмы расчета, от реализации которых я кайфовала.

Я настолько заинтересовалась в предметной области, что изучила новые штуки: SQLAlchemy (ORM для питона), Neo4j (графовая бд), как читать данные из api гитхаба или как деплоить сайты в GitHub Pages. Сверху можно докрутить еще Airflow, BI для полноты картины. Проект доступен тут.

🔗Так что попробуйте найти крутой датасет и поэкспериментировать. Список бесплатных ресурсов:
Kaggle
UK
EU
Azure
Bigquery
Тематические
Песни
Разное
Поиск по датасетам
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14💯5👻32
Работа дата инженером – одна из путевок в жизнь

🔍Когда я искала в первый раз, было супер сложно. Но как только я поставила в hh «Дата инженер | Data Engineer», сразу стали прилетать приглашения. Кстати, полезно переводить название позиции, т.к. hr могут искать на разных языках.

Я думала, вот поставлю новую должность, тыкну «не ищу работу», и все посмотрят: «Ага, только устроилась, писать не будем». Но резюме всплыло наверх, и меня начали хантить уже через 3 дня после трудоустройства😁 Естественно, я всем отказывала, какой смысл собеситься на первой неделе работы?🙂 Но все это говорит о востребованности профессии

📝Вот небольшой список компаний, которые набирают дата инженеров:
- Билайн
- X5 Group
- Центр финансовых технологий
- Лига цифровой экономики
- ITFB Group
- Иннотех
- Mediascope

На некоторые собесы я ходила, и из интересного спрашивали про having, lag/lead, внешние ключи, внешние таблицы, оптимизацию и план запросов, CDC (Change Data Capture), SSIS пакеты.

🍓А сегодня прилетела вакансия из Wildberries вот с такими требованиями:

Задачи:
• Поддержка CI/CD-пайплайнов
• Настройка/поддержка кластера Clickhouse
• Организация ETL-процессов: маршрутизация потоков данных, обеспечение их качества и доступности
• Оптимизация сложных аналитических запросов в Clickhouse
• Бизнес-логика на Golang или Python

Стек:
• Python/Go (на уровне конкретных практических задач)
• СУБД Clickhouse, Postgres
• Источники данных: Kafka, NATS, OLAP-кубы, API
• k8s

Кому дать контакты?😉

#собес
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥132💯1
Время задачек!🎉

Задача 1.


Эта задача на аналитика, она легкая, но мне понравилась.

Даны таблицы clients и documents.
В таблице с документами есть версионность, где '9999-12-31' означает, что версия действующая.
Нужно вывести id клиентов, у которых отсутствует актуальная версия.

Потестить можно тут.

Пишите свои решения в комментах!

create table clients (
client_id int,
client_fio varchar(255)
);

insert into clients values
(1, 'Иванов И.И.'),
(2, 'Петров П.П.'),
(3, 'Сидоров С.С.');

create table documents (
client_id int,
valid_from date,
valid_to date,
document_no varchar(9),
income int
);

insert into documents values
(1, '2020-01-01', '2020-12-31', '111111-11', 100000),
(1, '2021-01-01', '2022-06-01', '111111-11', 120000),
(1, '2022-06-01', '9999-12-31', '333333-33', 120000),
(2, '2001-01-01', '2023-01-01', '555555-55', 50000);
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥4
Задача 2.

Есть события, но часть из них доезжает позже других.
Нужно вывести такие события (5 и 6, которые вклинились).

create table logs (
id int,
dt date
);

insert into logs values
(1, '2023-12-01'),
(2, '2023-12-01'),
(5, '2023-12-02'),
(6, '2023-12-03'),
(3, '2023-12-06'),
(4, '2023-12-08');
🔥5
❄️Ответ на задачу 1❄️

😎Ребята в комментариях дали правильные ответы (круть!), тут предложу чуть оптимизированные вариации:

1) JOIN

Один подзапрос + один джойн

SELECT c.client_id
FROM clients c
LEFT JOIN (
SELECT DISTINCT client_id
FROM documents
WHERE valid_to = '9999-12-31'
) t1
ON c.client_id = t1.client_id
WHERE t1.client_id IS NULL


2) IN

Идём от обратного и исключаем

SELECT client_id
FROM clients
WHERE client_id NOT IN (
SELECT client_id
FROM documents
WHERE valid_to = '9999-12-31'
)


3) NOT EXISTS

Здесь можно оптимизировать, используя top/limit и константу.

Как это работает?
Если условие подзапроса соблюдается, мы берем просто цифру 1 вместо полей (не нужно лишний раз их вытаскивать) + одной строки нам достаточно, чтобы понять, что данные есть или их нет.

SELECT client_id
FROM clients c
WHERE NOT EXISTS (
SELECT 1
FROM documents d
WHERE c.client_id = d.client_id
AND valid_to = '9999-12-31'
LIMIT 1
)


Также важно внимательно читать задание и выводить то, что требуется (только id клиентов).

Решившим ребятам респект, остальные подключайтесь тоже!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍102🔥2
❄️Ответ на задачу 2❄️

Один из вариантов был таким:

SELECT DISTINCT t1.*
FROM logs t1
JOIN logs t2
ON t1.id > t2.id AND t1.dt < t2.dt;


⚠️Но посмотрим на план запроса (читаем снизу вверх, смотрим на cost):

HashAggregate (cost=92291..92294) 
Group Key: t1.id, t1.dt
-> Nested Loop (cost=0..89454)
Join Filter
-> Seq Scan on logs t1 (cost=0..33)
-> Materialize
-> Seq Scan on logs t2


Здесь очень дорогой Nested Loop Join, который увеличил косты с 33 до 90к.

Что ожидалось увидеть?

Используем lag/lead и сравниваем разницу айдишников с предыдущим и последующим:

WITH diffs AS ( 
SELECT
*,
id - LAG(id) OVER(ORDER BY dt) prev_diff,
id - LEAD(id) OVER(ORDER BY dt) next_diff
FROM logs
)
SELECT id, dt
FROM diffs
WHERE prev_diff > 1 or next_diff > 1;


План запроса:

Subquery Scan on diffs (cost=159..249)
Filter
-> WindowAgg
-> Sort
Sort Key: logs.dt
-> Seq Scan on logs


В первом случае примерные косты были 90к, во втором 250 => в 370 раз меньше.

Также нам необязательно знать все id поздних записей, достаточно найти границы диапазонов
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17
🤭Санте нужна твоя помощь!🤭

🛷У Санта Клауса есть кучка писем, в которых дети просят самую желанную игрушку. Некоторые из них заказали хрупкие подарки, которые могут сломаться, а Санта Клаус ну никак не хочет испортить праздник Он подумал, что электронной технике и музыкальным инструментам стоит уделить особое внимание.

👣Санта Клаус у нас современный и хочет учесть логистику. Он придумал, что эти подарки купит прямо в стране ребенка, а не привезет с собой.

Помогите Санта Клаусу составить список, какие игрушки и в каких странах нужно будет докупить до нового года!🙏

letters (id, date, child_id, toy_id)
children (id, name, country_id)
country (id, name)
toy (id, name, category)


И всех с наступающим!👋
Добра, вдохновения, мотивации, удачи, сил и прекрасного настроения!🥳
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9🎉2👍11
🎉Все подарки доставлены, Санта благодарит за спасение нового года!

Итак, вариант от спасителя:

SELECT t.name, c.name, COUNT(*) AS count_toys
FROM country AS c
JOIN children AS ch
ON ch.country_id = c.id
JOIN letters as l
ON l.child_id = ch.id
JOIN toy as t
ON t.id = l.toy_id
WHERE l.date > '2023-01-01'
GROUP BY t.name, c.name


Обращаю внимание на один момент - фильтр на дату можно перенести повыше:

JOIN letters as l
ON l.child_id = ch.id
AND l.date > '2023-01-01'


При работе с базами данных может не быть разницы, какой из способов использовать.
Но при работе со спарком фильтр до джойнов уменьшит количество впустую обрабатываемых строк🔻
Please open Telegram to view this post
VIEW IN TELEGRAM
1041🌚1