дата инженеретта
رفتن به کانال در Telegram
мелкое — крупно, в глубоком разговоре мудрость приходит по вопросам сюда: @aigul_sea
نمایش بیشتر3 348
مشترکین
+424 ساعت
-127 روز
+430 روز
آرشیو پست ها
3 348
Кринж вопросы
Бывало ли у вас такое, что на собесе спрашивали абсолютную кринжатину?
В мой топ пока входят эти вопросы:
😒 Что такое json?
😒 Что такое html?
😒 А расскажите что-нибудь про ди ви эйч
В этих случаях обычно спрашивал человек возле IT, которого попросили по бумажке проверить ответы. У меня почему-то от них возникает ощущение неуважения))
И тут я подумала, что уровень вопросов на собесе тоже сильно важен. Потому что ты можешь понять, с какими людьми и задачами будешь имеешь дело. Если они задают жесть какие вопросы - значит, сами шарят за это и можно у них набраться крутого опыта👓👏 (лично моё мнение)
🎧 А вам задавали похожие вопросы?
Ориентируетесь ли вы на уровень вопросов?
3 348
Топ-подборка
🕒 Полгода назад мы с коллегами практически друг за другом завели тг-каналы, обсуждали пути их развития, соревновались. (Кстати, скрипт в Airflow до сих пор присылает на почту ежедневные отчетики по инкременту подписчиков.)
🔝 А потом уже сами прошли путь до амбассадоров Сбера и вошли в топ крутышей (я надеюсь!)
И вот мы с нашими коллегами-амбассадорами собрали папку на тему IT. Возможно, откроете новые в себе новые грани, возможно, нет, но заглянуть определенно стоит 👀
3 348
🔍Расширяем датафреймы
Придумала себе на днях, как облегчить ресерч новой витрины данных с кучей таблиц.
🍺Контекст
У нас в Сбере при загрузке данных в таблички дописываются тех. столбцы с префиксом ctl. CTL - это штука по управлению потоками. Она может запускать разные оркестраторы: airflow, oozie итд итп
В тех. столбцах есть:
⏺тип операции (update, insert)
⏺id загрузки (чтобы можно было легко откатить)
⏺дата загрузки строки
⏺дата, по которую строка актуальна
И на экране это занимает достаточно много места.
💻Я набросала класс, чтобы удобно работать с пулом датафреймов - на картинке.
Тут еще интересен момент с chaining - мне очень нравится, когда функции вот так красиво друг за дружкой идут. Для этого нужно, чтобы каждый элемент в цепочке возвращал тот объект, который забрал.
Получили датафрейм - что-то поделали - вернули измененный, но все же датафрейм.
3 348
+9
Yet Another Teamlead Meetup
Снова захотелось понетворкаться, и я пошла на митап тимлидов в озон)
там лейтмотивом было:
🔵как погружаться в предметную область
🔵как должен действовать тимлид
🔵как расти в тимлида
🔵как растить тимлидов
🔵зачем расти в тимлида
🔵тимлид vs инженер
📘Посоветовали почитать книжку Елены Резановой "Это норм" - если что-то не получается.
А вот основные мысли, которые мне запомнились:
✨Лид хочет решить проблему, а инженер - задачу (может даже без понимания цели)
И это действительно важно: зачем вы делаете задачу, почему, какое вэлью. У меня понимание начало приходить спустя 6 месяцев, и это коррелирует с опытом других людей: 3-6 месяцев в зависимости от сложности предметной области.
✨Точка зрения лида понятна всем, а инженера - только ему
✨Лид ищет альтернативные решения дешевле/лучше первого попавшегося
✨Сеньор отличается от тимлида масштабом задач
✨Тимлид должен научить команду делать столько же задач, сколько делает сам (и даже быстрее)
🔷Немного математики
+1 тимлид = -1 сеньор (если внутри команды)
Если стал плохим тимлидом, -1 сеньор и -1 тимлид (ни того, ни другого). И потенциально -команда
🎈Вот такие инсайты)
Познакомилась с коллегой из Сбера, DA из Додо, ML-инженером из НСПК (карты мир и все такое). Покушала. Задала спикерам пару вопросов: они сказали, что 4 собеса в день не очень и что правильный тайминг для вопросов по ходу встречи - когда говорящий берет дыхание🙂
3 348
Кто на ит-пикнике - давайте знакомиться!
Коллеги, всем привет!
Я уже на ИТ-пикнике, кто тоже тут - приходите познакомиться!🤍
Уже нафармила три пачки наклеек, пряник, мини-колонку и смузи)
3 348
❔Вопросы подписчиков
Мне недавно задали вопросы по DE в Варшаве, и я решила привлечь своего знакомого дата человека, чтобы узнать зарубежную точку зрения.
Его зовут Aaron, лет 35, из Канады, PhD, пилит ПО в DS для стартапов.
🌸- это моё мнение
🍊- это его мнение
Решила не переводить, так что качайте аглицкий in action.
1️⃣Дата инженеры ближе к backend или аналитике?
🌸 Мне попадались совершенно противоположные мнения: на одних собесах складывалось впечатление, что де - это недопитонист, на других - что полноценный разработчик. От компании может сильно отличаться, как повезет.
🍊Data engineers share some programming skill with backend engineers, and data engineers share some data skills with analysts.
2️⃣Как Вы считаете, они являются разработчиками, только с другой специализацией?
🌸 Я думаю, что нужно постараться, чтобы стать норм разработчиком, т.к. ЯП используются не до такой глубины.
🍊Yes: software engineers that specialize in data tools.
3️⃣Возможен переход на более технические позиции в тот же бекэнд и/или внедрение практик разработчиков для более качественной работы?
🌸 Думаю, что возможен. Кстати, вчера сходила на внутренний менторинг по питону, и мы накидали темы, которые нужно качать.
🍊Most web service backend development really just demands general computer science and programming background with only a small amount of specialized knowledge in individual languages or frameworks. Really much more drastic changes are also possible if you’re sufficiently motivated and capable.
4️⃣С какими командами внутри компании чаще всего взаимодействуют?
🌸 Основное - DA. DS могут, но сильно меньше. Если бизнес - это уже не DE-шные эдхоки. Поставщики данных (внутренние, внешние).
🍊Probably the data consumers and the engineers who maintain the APIs/data sources.
5️⃣Обязанности под одним и тем же титулом не всегда одинаковые в разных компаниях (т.е на позиции data engineer могут быть требования как к аналитику). Насколько ок/не ок?
🌸 Мне такое вообще не нравится :/ Время идет, а навыки не прогрессируют.
🍊Yeah, this is a red flag. I have seen it happen with a «data scientist» position that had an analyst job description.
6️⃣Насколько это даёт мобильность в будущем при переходе на другие должности? Или стоит работать на условно первой работе дата инженером ради титула и опыта, даже если это аналитик под титулом инженера, параллельно изучать новые технологии и идти дальше?
🌸 Строчка DE определенно открывает много дверей) Но нужно быть готовым, что потом ты все равно попадешь на джуна, если не сможешь доказать обратное. А не имея практического опыта, это сделать будет тяжело. А еще можно попробовать проявить инициативу и внедрять дата инженерские штуки на своем месте.
🍊I would take this option. Stay in your job and keep getting paid while studying. When you interview for real data engineering jobs, you can be honest, but emphasize what parts of actual data engineering you got exposure to, and what parts you have studied for.
7️⃣И немного про стек:
🌸 У нас это Hadoop, Yandex/VK Cloud, Spark, SQL, Greenplum, Clickhouse, Postgres, Python/Scala, Airflow/Dagster, Kafka, Docker - самые основные.
🍊I think most DE work would not be in Python, FWIW, from what I've seen.
Python will still be important, but also SQL, Java, and a bunch of DSLs (e.g. Hashicorp Config Language)
Also you'll probably need to know cloud tools which you'll configure either through a web console or APIs
Some overlap with devops, basically
🌸: Is Hadoop dead?
🍊: I think so. I haven't seen it since 6 years ago.
3 348
+9
Посещение офиса Тинька
🗝 Как попала?
Зарегалась и пришла на митап тимлидов
🐾 Где?
Офис на Белорусской, размеры оцените по фоторепортажу) Я была совсем с краешка и прошлась только по 2му этажу.
🎤 Что было?
Три спикера, которые рассказывали что-то про эффективность, процессы, ревью, ресурсы, работу команд. Также узнала, что в точке холакратия - власть в руках команд, а не управления. И тебя выгонит сама команда, когда она поймет, что пора очиститься. Так-то.
Вообще показалось скучновато 😐 Но вот несколько мыслей, которые я записала:
💬 Мы не можем все бежать, как стартап, если мы не стартап.
💬 Быстро - это медленно, но без остановок.
💬 Поощрить вклад в сиюминутный результат.
💬 Хоть перформанс ревью и порождает конкуренцию, но цель у всех одна.
💬 Если любишь - отпусти (чел не будет хорошо работать без заинтересованности, пусть лучше приносит выгоду где-то ещё).
💬 С изменениями не надо бороться, надо работать с ними.
💬 Достигнуть целей, которые даже не ставил.
🎙Что думаете?
🎙А сколько у вас уходит времени в неделю на созвоны?
3 348
Дожила - букирую себе обеды
✨ Недавно снизошло такое озарение:
чёрный ящик -> собес -> светло-серый ящик
Ещё осознала, что вопросы ради вопросов - это скучно, и у каждого должна быть своя цель.
📝Выявила для себя (не знаю, как у других) такие категории вопросов:
- это база, ну просто нельзя не спросить
- на опыт прохождения собесов (то, что все у всех спрашивают)
- на подумать
- на уровень начитанности
- на душноту
- на практический опыт
- на то, что нужно нам
Заметила, что люди сыпятся на опыте. Вроде есть умное слово в резюме, но начинаешь спрашивать детали - становится все понятно. Прикапываюсь к каждому слову, которое не прозвучало в рассказе о себе, но было в резюме 🥰
🔍А мы все еще продолжаем собесить и искать ДЕ к себе в команду.
Тем, кто писал раньше - я должна была вернуться да/нет или hr с деталями. Простите, если затянулось, но мои предложения хр задвинули подальше🌚 Но я настроила пусть побыстрее через PO (Product Owner)
✏️Так что если ещё хотите или если вы остались без ответа, отпишитесь плиз
3 348
🎤 IT stand-up 🎤
Очень хотела пойти на IT stand-up от яндекса, даже зарегалась за 3 недели, но мою заявочку отклонили(
Зато наконец-то нашла, куда они это все выложили✨
Ну и народу там, конечно... 😮
Всё, пойдёмте смотреть, пока ютуб работает
Тык
3 348
dbt meetup 13.08 19:00
Намечается онлайн-митап по дбт!
Я бы послушала про data mesh in action, запускают ли другие dbt в airflow через BashOperator, про Dagster, т.к. с ним не работала, и метаданные + AWS.
Потом можно обсудить, если будет что обсуждать)
https://space307.team/dbt-meetup
3 348
+9
Начинаю серию постов про офисы. Телефон переполняется фоточками, поэтому настала пора рассказать и поудалять)
Сегодня про Авито
🗝 Как попала?
Просто увидела в ит-чатиках приглос и заполнила гугл-формочку.
🐾 Где?
Офис на Белорусской, занимают 5 этажей.
🎤 Что было?
Всего было человек 15, для нас устроили экскурсию по всем этажам. Втихаря со стойки утащила ленточку для пропуска с лого 😅
Каждый этаж имеет свою тематику: шведские острова, деревянный этаж, этаж переработанных штук, деревенский стайл. Переговорки в честь городов и языков программирования.
🧩 Есть IT Bar, куда можно прийти за техникой, спортзал, бильярдный стол, муз. инструменты и комната с настолками. Мерч покупается за всякие активности типо провести экскурсию, сделать что-то крутое.
Фото 4: место, где можно поспать
Фото 5: лампа из ручек
Фото 7: скрытый коридор
Фото 8: купленное на авито
В конце был квиз на скорость, где я выиграла бутылочку и наклейки 🙂
Нашла ещё больше крутых фоток тут
3 348
💡Ответ💡
Коллеги в комментах правильно отметили, что при фулле будет 7 строк, поэтому правильно:
✨0 7 5 7✨
🌿Inner Join
Минимально - если ключи в таблицах разные:
t1: 1, 2, 3, 4, 5, 6, 7
t2: 8, 9, 10, 11, 12
🌿Left Join
По-любому 7 строк точно будет, т.к. left берет все из левой таблицы. Минимально - если строки сметчились 1:1 (каждый id встречается один раз) или не сметчились.
🌿Right Join
По-любому 5 строк точно будет, логика та же.
🌿Full Join
Тут формула: max(n, m) = max(7, 5) = 7
В нашем первом примере хоть и будет 12 (нет ни одного одинакового id), но во втором случае будет меньше:
t1: 1, 2, 3, 4, 5, 6, 7
t2: 1, 2, 3, 4, 5
Спасибо за бдительность🫡
3 348
В первой таблице 7 строк, во второй - 5. Сколько строк выведется по каждому типу джойна минимально?
inner, left, right, full
3 348
repartition vs coalesce
💗 Вопрос у каждого первого.
Нужны для изменения количества партиций в датафрейме. Как итог - файлов на диске.
По умолчанию это 200, можно переопределить при создании спарк сессии конфигом
spark.sql.shuffle.partitions
Посмотреть количество партиций можно так:
df.rdd.getNumPartitions()
📚 Пример. У нас есть датафрейм [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] с 4 партициями:
Partition A: 1, 2
Partition B: 3, 4, 5
Partition C: 6, 7
Partition D: 8, 9, 10
Делаем так:
df_nums.repartition(2)
Partition ABC: 1, 3, 5, 6, 8, 10
Partition XYZ: 2, 4, 7, 9
Repartition
🖇делает партиции равномерными
🖇может увеличивать и уменьшать количество партиций
🖇под капотом шафл
В нашем примере циферки из каждой партиции размазались двум финальным партициям - это и есть шафл (перетасовка данных между экзекьюторами).
Именно за счет шафла работает первое и второе.
df_nums.coalesce(2)
Partition A: 1, 2, 3, 4, 5
Partition C: 6, 7, 8, 9, 10
Coalesce
🖇равномерность не гарантирована
🖇может только уменьшать
🖇данные не шафлит, а склеивает
Файлы клеятся друг за другом (без шафла), поэтому умеет только уменьшать (из склеенных файлов обратно расклеить уже нельзя).
В нашем примере B просто приклеилось к A, а D к C
#spark_tips3 348
Как написать джойн без джойна?
📃Пусть у нас есть таблица с клиентами (client_id, name) и заказами (order_id, amount, client_id).
Нужно вывести имя клиента и сумму всех его заказов. Если нет заказов - то 0.
🌷Подход №1 - join (все очень просто)
SELECT name, SUM(COALESCE(amount, 0)) AS total
FROM clients c
LEFT JOIN orders o
ON c.id = o.client_id
GROUP BY name
ORDER BY name
🌷Подход №2 - union
Когда что-то нужно посчитать
🟢группируем отдельно по датасетам
🟢проставляем null в отсутствующих колонках
🟢юнионим
🟢группируем по ключу, если бы мы джойнили
🟢навешиваем нужные функции сверху
WITH grouped AS (
SELECT
client_id AS id,
null AS name,
SUM(amount) AS total
FROM orders
GROUP BY client_id
),
final AS (
SELECT id, name, null AS total FROM clients
UNION
SELECT id, null AS name, total FROM grouped
)
SELECT
MAX(name) AS name,
COALESCE(MAX(total), 0) AS total
FROM final
GROUP BY id
ORDER BY name
На этапе final у нас будет примерно такое:
id name amount 1 Alice null 2 Bob null 3 Cathy null 1 null 2000 2 null 5000✏️ На моем крошечном датасете в плане запросов в постгре косты второго запроса меньше в 2 раза. В первом почти все ресурсы тратятся на Hash Join. #sql_tips
3 348
SQL писать умеют все
Не так давно в X5 услышала такое мнение:
SQL писать умеют все. Даже Junior DA умеет поднять спарк сессию и писать запросы. DE нужен, чтобы разбираться под капотом - если много данных, сложные расчеты, писать не в лоб, а эффективно, учитывать узкие места, продумывать обновление данных, решать проблемы с замедлением расчетов.Читая это сейчас, я склонна согласиться. Но когда первые слова на первых минутах - это такое категоричное заявление, то невольно задумываешься, а комфортно ли работается в такой атмосфере. Что думаете?
3 348
#️⃣#️⃣#️⃣ Вакансия в нашу команду!🔥
⭐Что делаем:
В команду маркетинга Сбера ищем разработчика продуктовых витрин.
Мы создаем Martech инструменты для сквозной аналитики, позволяющие отследить весь пользовательский путь от просмотра баннера до первой транзакции.
🌷Позиция: Junior/Junior+ DE
Формат: Офис (по болезни можно дома)
📆Чем предстоит заниматься:
• Проектировать и разрабатывать продуктовые витрины данных
• Мониторить и оптимизировать процессы загрузки, преобразования данных и сборки витрин
• Контролить качество данных
• Разрабатывать инструменты для автоматизации рутинных задач, связанных с обработкой данных
• Разрабатывать и поддерживать внутренние сервисы
➡️Требования:
• SQL на продвинутом уровне
• Cтек технологий Big Data (Hadoop, Spark, Hive/Impala) и любой СУБД
• Знание понятий и концепций DWH
• Python (PySpark, Pandas, REST API)
• Airflow/Dagster/Oozie
• BitBucket/Git
• Bash
⭐Будет плюсом:
• Опыт работы с веб-аналитическими данными, данными мобильных приложений, рекламных кабинетов (YandexMetrica, AppMetrica или др. кликстримы)
• Знание банковского бизнеса
• Опыт работы по Agile
🎈Условия
• Классная и дружная команда
• Непростые задачи и быстрый рост
• Льготные условия кредитования и ипотеки
• Бесплатная подписка СберПрайм+
• Скидки на продукты компаний-партнеров
• ДМС с первого дня и льготное страхование для близких
• Корпоративное обучение, тренинги, митапы, доступ к бибилиотеке
• Современный офис в центре Москвы
✉️ Писать мне: @aigul_sea
3 348
👩💻 👩💻Про leetcode
Неделю назад решила достать свой акк на литкоде и начать решать задачки. Потому что когда-нибудь это может пригодиться на лайв кодинге, а я уже буду без стресса и во всеоружии⭐️
🎙️Иногда бывали такие вопросы, когда накатывала внутренняя улыбка и я думала:
Ага, про это я писала в своем канале)И хочется достичь такого же уровня:
Ага, я уже решала такую задачу и помню, как она решаетсяКстати, в самом начале увидела задачку про палиндром, которую спрашивали у моего коллеги на собесе. 📖 Даже если не понадобится, то все равно это основа для моего дальнейшего развития. Я сверяюсь с залайканными решениями, изучаю возможные оптимизации по памяти/месту, запоминаю технические и логические лайфхаки. Пока решаю простые задачки и планирую их все добить (бесплатные). Python - чтобы подумать, SQL - чтобы отдохнуть😅 А у вас как дела? Есть тут чемпионы?
3 348
💡Ответ 💡
count('email')
count(1)
count(-100)
☕️ Давайте разбираться
Есть табличка emails:
1 hello@gmail.com
2 null
3 null
4 hello@mail.ru
⭐️Что выведет каждый из запросов?
email == `email` == "email"
Эти три конструкции одинаковы, они обозначают само поле.
Кавычки нужны, когда название поля - это ключевое слово или когда написано на русском.
По условию email - уникальное, поэтому
count(email) == count(distinct email)
📍count не считает нуллы
Поэтому в нашем примере по всем этим 6 запросам будет ответ 2.
Ответ - 2.🦶 Идем дальше count('email') - здесь мы подаем на вход строку с названием 'email' (не поле!) Т.е. на вход каунту будет так:
1 email
2 email
3 email
4 email
Мы по сути считаем количество строк.
Ответ - 4.Аналогично для этих двух запросов: count(1) count(-100) Вообще неважно, что писать в скобках, хоть '2340sdjf2фыа934!-3/'. Результат всегда - это количество строк.
1 -100
2 -100
3 -100
4 -100
Ответ - 4.Ну и в count(distinct 'email') получается, что мы берем уникальные строки 'email'. А они везде одинаковые.
Ответ - 1.
3 348
Какие запросы дадут МАКСИМАЛЬНЫЙ результат?
* email уникален, в email есть null, бэктики поддерживаются
اکنون در دسترس! پژوهش تلگرام ۲۰۲۵ — مهمترین بینشهای سال 
