Дата-инженерские заметки – Telegram
Дата-инженерские заметки
1.47K subscribers
70 photos
18 videos
7 files
55 links
Пытаюсь выжить в корпоративных реалиях, делюсь вопросами с дата-инженерских собеседований и ссылочками для подготовки к ним

Написать мне: @aylin_gee
Download Telegram
Физические JOIN'ы

Мое незнание этой темы привело к 6-месячному куллдауну в Авито😭
Чтобы у вас не было также, давайте разберем ее подробнее.

😍Физический джойн — это алгоритм, который используется для выполнения операции объединения двух таблиц. Иными словами, это то, что происходит "под капотом", когда вы вызываете join в запросе

Основных алгоритмов всего 3: nested loops, merge join, hash join/hash match.

🩷Nested loops

Принцип работы уже понятен из названия: каждый элемент внешнего цикла сравнивается с каждым элементом внутреннего.
Алгоритмическая сложность - O(n**2)

For Each value in pile1
For Each value in pile2
If pile1.value = pile2.value
Return pile1.value, pile2.value


🩷Merge join

Для этого алгоритма элементы уже должны быть отсортированы. Тут мы проходимся двумя указателями по элементам и сравниваем их. В конце проходим по оставшимся элементам.

Если не считать сортировку, алгоритмическая сложность - O(n).

get first row R1 from   input 1
get first row R2 from input 2

while not at the end of either input
begin
if R1 joins with R2
begin
get next row R2 from input 2
return (R1, R2)
end
else if R1 < R2
get next row R1 from input 1
else
get next row R2 from input 2
end


🩷Hash join

Вычисляем хэш для каждого элемента левой таблицы, затем вычисляем хэш у элементов правой таблицы и проверяем его наличие в левой.
Алгоритмическая сложность - O(n).

// Build phase
FOR each row in BuildTable DO
Compute hash value for the join key
Insert row into HashTable based on hash value
END FOR

// Probe phase
FOR each row in ProbeTable DO
Compute hash value for the join key
IF hash value exists in HashTable THEN
Retrieve matching rows from HashTable
FOR each matching row DO
Combine rows from ProbeTable and BuildTable
Add the combined row to the result set
END FOR
END IF
END FOR

Рекомендую просмотреть псевдокод и реализовать все на своем языке💖
#de_обсуждение
Please open Telegram to view this post
VIEW IN TELEGRAM
29🏆4👍2🔥1
Друзья, не делайте так, иначе складывается ложное ощущение, что мемы нравятся больше:)
👍5
Во-первых, осень действительно лучшее время для поиска работы.
Во-вторых, мне нужны бусты☹️

У меня заволялись телеги hr'ок из МТС, Билайна, Мегафона, Яндекс Маркета и Сбера. Отправлю их забустившим канал.

Забустить тут⬇️
https://news.1rj.ru/str/boost/data_interviews

📍Написать hr'у напрямую всегда лучше отклика на хх, так как личное сообщение гарантирует просмотр резюме.

Также если хотите рефералку в Авито, отпишитесь в комментариях и я свяжусь с вами ❤️
Please open Telegram to view this post
VIEW IN TELEGRAM
10🍓4🔥3👍2
Физические JOIN'ы 2.0

Рекомендую сначала прочесть
этот пост.

После оценки алгоритмической сложности физических джойнов можно прийти к выводу, что выбор hash join является оптимальным решением, однако это далеко не так. Как и во многом в программировании, всегда есть space–time trade-off, и выбор оптимального джойна будет зависеть от входных данных.

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

🩷Условие соединения
Для equi-joins (равенство =, неравенство !=) и non-equi-joins (>, <, >=, <=). Для второго типа подойдет только nested loops.

💕Размер таблиц
Также, конечно, важен размер таблиц. Из-за необходимости многократно проходить по второй таблице в случае с nested loops будет велика цена I/O, в случае merge join будет дорогой сортировка, а в случае hash join может не хватить памяти для хеширования, и часть придется переносить на диск. Хешируется, кстати, меньшая таблица.

Если вы работаете с отсортированными данными, выиграет merge join, а с неотсортированными — hash join.

В случае, когда обе таблицы маленькие, эффективнее может быть nested loops, ведь с merge сортировка может вовсе не окупиться.

💓Индексы и дубликаты
В случае с неиндексированными данными лучше справятся merge и hash join, однако наличие большого количества дубликатов при выборе hash join может повлечь неправильное распределение данных и необходимость обработки коллизий.

📍У каждого джойна есть свои преимущества и ограничения, в посте перечислены лишь очевидные из них. Как было упомянуто выше, в очень редких случаях вам придется выбирать физический джойн самостоятельно, однако всё же полезно понимать их различия.

#de_обсуждение
Please open Telegram to view this post
VIEW IN TELEGRAM
12🔥5🥰3🍓1
Добавила теги для навигации на канале

#de_собеседование - вопросы с собеседований

#de_тестовое_livecoding - задачи с лайвкодинга и тестовых

#de_обсуждение - посты на популярные на собеседованиях темы
13
Есть идея сделать серию интервью с дата-инженерами из разных компаний бигтеха
Вам было бы интересно такое?
Anonymous Poll
98%
Да
2%
Нет
🔥53
🐝Костя, дата-инженер из Билайна

🟡Расскажи про свой путь в Билайн, где работал до и почему выбрал именно эту компанию?

Работал до этого в сбере дата-аналитиком. Начал проходить собеседования и Билайн предложил больше денег и удаленку. Тут все просто, я иду туда, где вижу выгоду.

🟡Какой стэк у тебя в команде и какими задачами ты занимаешься?

Стэк: scala, spark, airflow, oracle. Задачи - это обычное написание ETL для передачи данных из одних источников в другие.

🟡Из каких этапов состоял отбор и насколько показался сложным?

По количеству этапов, то их было вроде 2. Сначала с HR, после беседы с ней, она отправила мне тестовое и уже потом созвон с продактом, где немного погоняли по базовой теории SQL, python, spark. В целом собес не сложный. Самое сложно, что было во время прохождения, так это установить spark на личный ноутбук)

🟡Что нравится в компании и команде больше всего?

Нравится в компании, что они платят деньги и дают удаленку. Я не привязываюсь к командам и компаниям.

🟡Что хотелось бы улучшить?

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

🟡Ты порекомендовал бы другу своего работадателя?

Ну смотря что важно для моего друга. Работа не пыльная, сильно не трясут. Поделал утром что-то и можно идти развиваться. Если другу нравится прям плотно работать и создавать, то это точно не про Билайн (по крайней мере не моя команда)

📍P.S: в комментариях можете написать свои вопросы Косте, возможно он их увидит и ответит:)
Напишите также, каких вопросов вам не хватило, добавлю в следующем интервью
Please open Telegram to view this post
VIEW IN TELEGRAM
🏆8🔥65
Ярослав, Senior data engineer из Озона💙

📍Подписывайтесь на канал Ярослава

💙Каким был твой путь до Озона и почему выбрал именно этого работадателя?

Учился в школе 21, изначально хотел быть джавистом, но на собеседовании в Сбер предложили пойти к ним, на скалу в биг дату. В тот момент не было других оферов и это казалось огромной возможностью. Шёл на стажировку с мыслями что либо я пройду, либо умру. 3 месяца работал без выходных, в стиле который я приобрёл в школе, по 10-12 часов, где-то в середине заболел, но не ушёл на больничный. В итоге мне сказали что я прошёл, и через неделю меня увезли на скорой из общаги в больницу. Оглядываясь назад, можно сказать, что это было через чур. Какие-то последствия для здоровья тянутся за мной до сих пор.

После проработал в сбере ещё 10 месяцев, за это время получилось с нуля разработать новый продукт, будучи единственным разрабом на проекте, поработать на скаловом бекенде, и со спарком. Так же получилось пройти полугодовой курс по спарку, который могу рекомендовать всем DE - APACHE SPARK и SCALA ДЛЯ ДАТА-ИНЖИНИРИНГА от new pro lab. Меня были готовы повышать для мидла в сбере, и для банка это было в достаточно короткие сроки, но казалось что на рынке за мидла ДЕ могли дать куда больше.

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

💙Из каких этапов состоял отбор и насколько показался сложным?

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

💙Какой стэк у тебя в команде и какими задачами ты занимаешься?

Когда приходил в компанию была scala + spark, сейчас в основном java. Моя текущая команда - часть платформы данных. Конкретно мы занимаемся стримингом и являемся входными воротами в платформу данных, наш продукт позволяет пользователям самим создать интеграцию из kafka в основные корпоративные хранилища, hadoop и vertica, мы одновременно вычитываем данные из более чем 500 топиков и только входной поток данных к нам превышает 50 тб в сутки.

💙Что нравится в компании?

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

💙Ты порекомендовал бы другу своего работодателя?

Да, как минимум из-за компенсационного пакета, если прочее для человека не так важно. Достаточно высокие зарплаты, высокие премии(на моём грейде 1.5 оклада раз в пол года за самую распространённую оценку ревью), полная удалёнка. Так же хорошие возможности роста.

📍P.S: в комментариях можете написать свои вопросы Ярославу, возможно он их увидит и ответит:)
Please open Telegram to view this post
VIEW IN TELEGRAM
12🔥8👍6
❤️В Альфа банке открыта вакансия для дата-инженеров с опытом от года(python, hdfs, pyspark)

Если подходите, пишите, скину рефералку @aylin_gee💳
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍3
⭐️Задачи с sql собеса в Яндекс
🌟вторую было даже интересно решать

🟡Нужно получить топ 10 водителей по кол-ву заказов в каждом городе.
create table orders (
driver_id varchar,
city varchar,
order_id varchar
);

🟡Нужно просчитать нарастающий итог - для каждого аккаунт id на каждую дату вывести сумму транзакций по данному счету.
Нельзя использовать оконные функции

СREATE TABLE transaction_log (    
account_id BIGINT,
dt DATE,
transaction_amt DOUBLE,
CONSTRAINT transaction_id PRIMARY KEY(account_id, dt));
Please open Telegram to view this post
VIEW IN TELEGRAM
129
Моё желание сейчас добавить это в мой airflow dag ⬆️
Ссылка на документацию
Please open Telegram to view this post
VIEW IN TELEGRAM
8😁8
Дата-инженерские заметки
❤️В Альфа банке открыта вакансия для дата-инженеров с опытом от года(python, hdfs, pyspark) Если подходите, пишите, скину рефералку @aylin_gee💳
Эта вакансия закрылась(парнем из канала, кстати), но всегда есть новые

Как заберёте свои новогодние бонусы, прореферю в альфу
🔥94🏆4
Друзья, как ваши корпоративы проходят?

Пьем с коллегами?
12👍4
☃️Этот канал я создала в конце марта, чтобы делиться с друзьями и коллегами своим опытом собеседований.

Он и оставался каналом для друзей пока по рекомендации бывшего руководителя я не оставила ссылку на канал под постом схожей тематики.

Удивительно, что создавался канал в фрустрации и неуверенности в завтрашнем дне, сейчас же я ощущаю себя на своем месте и в своей команде.

Надеюсь в следующем году, каждый из нас добьется всех своих карьерных и личных целей.🎁
🧦Желаю супер крутых проектов, сильных и справедливых руководителей, повышений и огромнейших премий!❤️

⛄️С наступающим!🍭
Please open Telegram to view this post
VIEW IN TELEGRAM
3618
Мне было очень важно найти работу с полной удаленкой. Как и предполагалось, такой формат оказался не только удобным, но и очень выгодным.
Плюсы очевидны, а вот о минусах почему-то никто не говорит.

У меня в команде удаленная работа позволила коллегам уехать из Москвы, а hr'ам расширить пул кандидатов до инженеров со всей России. Большая часть моей команды не живет в Москве, поэтому приезжать в офис даже при огромном желании смысла нет.

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

Еще аутфиты некуда выгуливать!!🥰
Что думаете?
Please open Telegram to view this post
VIEW IN TELEGRAM
255👍2
"НИКТО НЕ БУДЕТ БРАТЬ НА РАБОТУ ГОВНОКОДЕРА"
😁19🏆53
Писала тут раньше, что рекомендовала парня в альфу. Ставку дали ему сильно выше моей.

Подумала, что оценили на грейд выше, что вполне ок.

Какого же было мое удивление, когда сегодня утром я поняла, что грейд из нас двоих выше у меня.
😭237😁3🍓3
Завтра снова на айти завод
Вы успели отдохнуть?

Мне ещё бы одну недельку
😭30😁9🍓2
кто-нибудь записался на de zoomcamp?

это такой бесплатный дата-инженерский курс с практическими заданиями

что-то будет сам Зак Вилсон вести
Чат для обсуждения
7