it пингвин | data engineer – Telegram
it пингвин | data engineer
1.71K subscribers
48 photos
5 videos
1 file
60 links
Канал главного разработчика Data Lake крупного банка.
База знаний для джунов, разбор собесов, задачи (jun/mid/sen) с решениями, полезные материалы, обзоры технологий и архитектур.

По вопросам и менторству писать @it_pengwin
Download Telegram
🔹Задачи🔹

Давно не было задачек с собесов 😎


📌Т-банк задача про должников (lvl mid):

Даны 3 таблицы:
1) таблица со счетами кредитных карт account: 
account_id (id счета)

2) таблица с выписками по кредитным картам statement:
statement_id (id выписки),
account_id (id счета),
statement_dt (дата выписки),
due_dt (дата погашения выписки),
min_amt (мин. сумма погашения)

3) таблица с платежами клиентов payment:
payment_id (id платежа),
account_id (id счета),
payment_dt (дата платежа),
payment_amt (сумма платежа)


Задание: вывести список недолжников на сегодня.


📌Х5 (lvl jun)

Даны таблицы t1 и t2.
|t1.a|   |t2.a|
|----+ |----+
|1 | |1 |
|2 | |3 |
|3 | |4 |
|6 |


Сколько будет записей при следующих типах соединений:
INNER JOIN t1.a = t2.a
LEFT JOIN t1.a = t2.a
FULL OUTER JOIN t1.a = t2.a



В чем разница между типом данных CHAR и VARCHAR в SQL?

Каким образом можно найти третий по счету максимальный результат в каждой category?
таблица:
- id
- result
- category




📌Росбанк (lvl jun)

Дана таблица:
create table employee
(
id integer, -- ID сотрудника
department_id integer, -- ID подразделения, в котором работает сотрудник
chief_flg boolean, -- флаг того, что сотрудник занимает руководящую позицию
birth_dt date -- дата рождения
)


0️⃣ Вывести список руководителей

1️⃣Вывести список сотрудников, которые старше своего непосредственного руководителя

2️⃣Найти второго самого старшего сотрудника

3️⃣Предположим, что в таблице на 1 сотрудника может быть 2 записи, у одной из которых не заполнена дата рождения. Нужно удалить такие дубли из таблицы


Как вам задачки?
*Некоторые похожие задачки на канале уже были разобраны.

Не стесняемся, присылайте любые свои решения в комменты, хочу увидеть, что вам это интересно⬇️
И насыпьте реакций 😁😊


it пингвин | data engineer 🐧

#sql #задача
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16👍104😱111
KPACUBA 😈😁
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥115👍32😁2💅2😱11
Всем привет!😎

Увидел хороший отклик по недавним задачам.

Сегодня выкладываю задачу посложнее - уровень middle+

Реальная задача с собеседования с Альфа-банком 😳

--Создать таблицы

--CLIENT “КЛИЕНТ”
ID ID клиента
NAME имя клиента

--ACCOUNT “СЧЕТ”
ID ID счета
CLIENT_ID ID клиента
OPEN_DT дата открытия счета
CLOSE_DT дата закрытия счета

--TRANSACTION “ТРАНЗАКЦИИ ПО СЧЕТУ”
ID ID транзакции
ACCOUNT_ID ID счета
TRANSACTION_DATE дата транзакции
AMOUNT Сумма транзакции


Задача:
Вывести имена клиентов, у которых есть хотя бы один активный счет, открытый больше года назад, и которые за последний месяц по всем своим счетам совершили транзакций меньше, чем на 5000.
Под активным счетом понимается счет, по которому в текущем месяце есть хотя бы одна транзакция.
Под годом/месяцем понимается интервал один год/один месяц от календарной даты.


При необходимости нагенерите тестовые данные. Ваши решения и предложения жду в комментах.
Кто решит - реально красавчик🏆🔥🤘
Свое решение выложу в пятницу 😁

it пингвин | data engineer 🐧

#sql #задача
Please open Telegram to view this post
VIEW IN TELEGRAM
👨‍💻4👍3🔥33🫡21😱1
У меня уже несколько раз просили прислать книгу "Основы инженерии данных" - Джо Рис.
В мире data инженерии она на небольшом хайпе.

Я сейчас опубликую книгу, кому надо сохраните, я чуть позже удалю пост.
Вроде как слитые книги в тг канале нельзя публиковать 🏴‍☠️😅

upd. книгу уже открепил😬

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

it пингвин | data engineer 🐧

#полезная_инфа
Please open Telegram to view this post
VIEW IN TELEGRAM
10🔥9👍2💅21
ПОЧЕМУ мне это приходит от ПОЧТЫ РОССИИ😠
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣146😁2😱11
Bootcamp чат для ВСЕХ!

Открыли чат с программой Буткемпа для ВСЕХ!

ссылка на чат

Заходите все, кто думает пройти буткемп, залететь наконец-то в IT или просто из интереса. Внутри есть программа обучения. Мы ждем пожелания и боли от вас. Программу возможно скорреткируем, если увидим конкретные хотелки!

Это не курс, здесь не будет никаких нудных и душных лекций. Мы вычеркиваем очень много бесполезной инфы.

Смело задавайте свои вопросы, а мы будем на них отвечать.

Цель буткемпа - как можно скорее запрыгнуть в поезд IT!
👍52🔥2🎉1
Привет, работяги 🫡
Всех с пятницей, остался чуть-чуть продержаться

Выкладываю обещанное решение задачи:
Вывести имена клиентов, у которых есть хотя бы один активный счет, открытый больше года назад, и которые за последний месяц по всем своим счетам совершили транзакций меньше, чем на 5000.
Под активным счетом понимается счет, по которому в текущем месяце есть хотя бы одна транзакция.
Под годом/месяцем понимается интервал один год/один месяц от календарной даты.


select
c.name
from account a
join client c on c.id=a.client_id and a.open_dt<trunc(sysdate)-interval '1' YEAR and coalesce(a.close_dt,to_date('59991231','yyyymmdd'))>trunc(sysdate)
join transaction t on t.account_id=a.id and t.transaction_date between trunc(sysdate)-interval '1' MONTH and trunc(sysdate)
group by c.name having(sum(coalesce(t.amount,0)))<5000

*SQL- оракловый, но я думаю(надеюсь) всем будет понятен синтаксис.

Как по мне, получилось очень лаконичное и оптимизированное решение без множества подзапросов и cte🤔
А как вам задачка и решение?⬇️

it пингвин | data engineer 🐧

#sql #задача
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥84👍33🤯2💅1
2022 год. Моя первая рабочая задача в новой компании. Нужно написать менеджеру и утончить требования:
🤣53😁1754😭22
Друзья, всем привет 🤝
Сделал статью по индексам и партициям для роадмапа DE. Также хочу поделиться статьей с вами в более удобном виде.

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

Дайте реакцию как вам материал и интересен ли вам подобный формат?⬇️

#архитектура
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥308🙏4👍31🫡1💅1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁133🔥3🐳3
Однако, весьма интересная табличка
😁12🗿7😱3🤯11
▶️Обновление курса(RoadMap) на версию 2.2▶️

В этом видео о RoadMap'e:

Полностью переработана информация по ClickHouse;
Добавлен Docker compose распределённого ClickHouse (2 шарды 2 реплики);
Новый соавтор курса — Penguin Grisha;
Добавлена страница с кейсами оптимизации и полезными плюшками при работе с GreenPlum;
Полностью переработана общая информация по индексам баз данных;
Добавлены новые вопросы с собеседований по разным темам(смотреть по обновлению каталога);

Плюс ко всему:

Мы совместно с Женей Виндюковым(Я - Дата Инженер), запускаем собственный BootCamp(Интенсив) по профессии Инженер данных. Об этом я тоже рассказывают в данном видео, поэтому все кто уже изучил Python и SQL и не знает, что делать дальше, милости просим в чат, где вы можете ознакомиться с нашим предложением и предложить свои идеи!

Если у тебя есть идеи, предложения, обратная связь и т.д., можешь написать, как в комментариях под этим постом⬇️, так и в личку — либо мне, либо Евгению! Мы всегда ЗА рациональные идеи!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍75🔥2
Если во всех профессиях платили бы одинаково, работали бы вы в it?
Anonymous Poll
51%
да
49%
нет
Три топора собрал 😃
Спасибо, друзья 🤝

Всем хороших выходных! Отдыхайте и не думайте о работе❤️
Please open Telegram to view this post
VIEW IN TELEGRAM
419🔥10👍5😁2💅2
Новый формат. Буду писать короткие мысли/советы - возможно, провокационные. Хэштег #МыслиВслух.

Вы тоже можете писать личку канала или мне @it_pengwin - предлагайте свои мысли. Интересное буду постить.

И вообще: задавайте любые вопросы - про работу, технологии, задачки, собесы и околоайтишное. Будем разгонять это вместе.
👍54😁2🔥1🫡1💅1
Для быстрого продвижения по карьерной лестнице:
навык в прохождении собесов > реальных скиллов на работе

#МыслиВслух
21🤷‍♂4🤔3
Испытательный срок пройден

3 месяца прошло, меня не уволили.

Честно говоря, я особо и не переживал. Если б уволили - нашел бы новое место. Но сейчас все равно чувствую облегчение.

Кстати, никто мне не сказал, что я прошел ИС. Недавно я изучал свой договор, и там написано, что если по истечению 3 месяцев меня не уволили, значит, я прошел испытательный срок. А меня не уволили 😁

От работы в этом банке я не в восторге. Внутренние процессы сильно бюрократизированы (об этом честно предупредили), есть следящее ПО (не предупреждали, за это жирный минус), задачи пока что не очень интересные, но зато уже чувствую свою ценность. Надеюсь дальше будет поинтереснее.
"Мы семья" - здесь такого нет, коллектив не очень общительный, каждый тихо делает свои задачи и на другие темы общения особо нет. Все как-то слишком серьезно. Это интересный опыт. Платят как и обещали - хорошо.

Из этого банка уходить пока что я не планирую. Год точно буду работать, а дальше посмотрим.

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

Еще получилось взять авансом отпуск. Спасибо за это руководству, что пошли навстречу.
В пятницу лечу в Турцию. Хочу забыться и не думать о работе.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥23🍾83👍31
Оптимизация SQL запросов

Общие правила:

1️⃣ База базовая - минимизация использования DISTINCT, ORDER BY, UNION. Если нет необходимости использовать данные конструкции - не используем! Будет выполняться сортировка, а на больших данных это оочень ресурсозатратно!

2️⃣ Звездочка в select - зло. Выбираем только необходимые поля!
Неправильно:
SELECT * FROM SALES;


Правильно:
SELECT SALE_ID, SALE_DT FROM SALES;


3️⃣ Уметь смотреть план запроса и иметь понятие об основных способах соединения таблиц

4️⃣ Если разработка идет на синтетике или на не полном объеме, всегда запрашивать боевые цифры и исходя из этого принимать решение о датафиксах, группировках, джойнах. Если же код новый и сущности еще только формируются, то предполагаемые объемы надо запрашивать у аналитика – хотя бы порядок строк – сотни тысяч/миллионы/сотни млн

5️⃣ Не писать одно тело селекта с парой-тройкой десятков таблиц. Логические куски помещать в with – так проще управлять.

6️⃣Не бояться бить большие запросы на 2-3 сессии:
Не должно быть, например, 80 джойнов, из которых половина это миллионы строк. Попробовать как-то логически поделить например на 2 куска, и чтобы не использовать разные with из первой части во второй.
Очень большой код, например, 3тысячи строк читать, сопровождать, понимать что случилось довольно затруднительно – есть смысл разбивать на логические части.

7️⃣ Понимать, когда и для чего использовать хинты. Помнить, что хинты – это костыли. Не лепить в каждой строчке все что возможно.

8️⃣ Если запрос падает на нехватке темпа, то
замножение записей (неправильное условие соединения ON или связь один ко многим, либо многие ко многим)
кривой план/неправильная последовательность соединения множеств
отправка на параллельные исполнители в широковещательном режиме (broadcast) огромных объёмов данных. Можно поправить хинтом
Для тестовой среды: проверить объём темп, если число файлов не совпадает/сильно меньше, чем на бою – сделать сравнимым, если возможно .

9️⃣ Никогда не использовать в условиях соединения ON вложенные селекты

1️⃣0️⃣ Никогда не использовать в списке полей select-a, определяемых с помощью функций, вложенные селекты.
Иными словами не должно быть конструкций вида:
select t.f1, t.f2,
case when select [] then … end f3
from table t

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


Предлагайте свои правила и фишки по оптимизации.

Давно хотел сделать подобный посту 💅
Жду реакции и репосты😊⬇️

it пингвин | data engineer 🐧

#sql #оптимизация
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥279👍43💅1
Я вернулся из отпуска 😎

Всего за одну неделю я испытал море эмоций - был супер чилл, восторг, экстрим, тусовочки. Я даже отвык от своего компухтера и вроде бы перезагрузился 🎮

Отдыхайте и путешествуйте, друзья ❤️
Это привносит много красок и удлиняет жизнь 💯

Теперь врываюсь в рабочий график. Посты буду делать чаще, уже много всего скопилось в заметках 🫡✏️
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥216👍5🍾22😁1
В таблице t1 в поле id есть значения 1,2,3,4, null. Что вернется в результате запроса?
select * from t1 where id not in (1,2,null)
Anonymous Quiz
37%
3, 4
24%
ошибка
12%
ничего (0 строк)
1%
1 строка с null
1%
2 строки с null
25%
3, 4, null
🗿11👍9🔥5🤔32🤩11
Часто замечаю, как айтишники делятся технической литературой на английском языке.
У меня вопрос: кто-нибудь из вас читает техническую литературу на английском?

Я понимаю, что айтишные книги на английском языке читать должно быть легче, чем художественные книги. Но мне это все равно сложно.
Итак, чтение ит книг не супер полезно в плане развития скиллов. Лучше прочитать статью, пройти курсики, сделать пет проект и порешать задачки.
Но читать еще и на английском - это х2 к затраченному времени и затрате энергии. Какая-то имитация полезной деятельности.
Есть такой термин:
Профанация - если под видом полезного дела скрывается пустая трата времени.

Ставим жабу в очках 😎 - если читаешь английском
Ноготочки 💅 - читаешь на русском
Пиво 🍻 - не читаешь книги

#МыслиВслух
Please open Telegram to view this post
VIEW IN TELEGRAM
72💅35321