Айти-Пингвин | Дата инженер
1.96K subscribers
54 photos
14 videos
2 files
75 links
Канал главного разработчика Data Lake крупного банка.
База знаний для джунов, разбор собесов, задачи (jun/mid/sen) с решениями, полезные материалы, обзоры технологий и архитектур.

По вопросам и менторству писать @it_pengwin
Download Telegram
Итоги 2025 it пингвин

Посмотрел итоги своего канала в 2025.
Хорошая работа - 1700+ подписчиков, 150 постов, 260к просмотров, и 3.2к😱 репостов. В начале был очень быстрый старт по +300 подписчиков в месяц. К концу года выдохся и рост сильно замедлился. Но ничего, зато в таком темпе мне прям комфортно ввести канал.
Очень понравился краткий обзор LLM. Я и хотел сделать такой канал - главное чтоб был полезный, живой и с разнообразным контентом.

Вот популярные посты:
Новая работа
Краткие определения инструментов
Будни дата инженера
Собес на Кремлевский проект
День рождения
Ссылки с бесплатным материалом по data
Статья по индексам и партициям
Транзакции и ACID
Закончил курс по DE
разбор вопросов по SQL, вопросы про джоины, задача на джоины, задачи по SQL, оптимизация SQL-запросов

Спасибо, что читаете ❤️

В карьерном плане год был тоже продуктивный:

Начал год в Альфа банке -> 5 месяцев в РСХБ -> X5

И что важно в конце года у меня НАКОНЕЦ-ТО нет желания выходить на рынок и собеситься (можно только ради контента 😅). Сейчас в компании нравится, задачки классные и крутые перспективы. В новом году переезжаем на новую платформа с новым стеком.

Также у меня есть вторая работа. И это менторство. Каждый будний день до или после основной работы у меня 1-2 менти. Мне эта деятельность нравится - здесь как нигде чувствуешь отдачу. На работе ну создал ты новый pipeline, оптимизировал запрос. И что)) Результат работы особо не чувствуется. В менторстве - помогаешь людям добиться своей цели - устроиться в it и выйти на хороший заработок.
И почему-то ко мне приходят очень топовые ребята 😅 У всех интересный бэкграунд (не айтишный), амбициозные и талантливые. Часто мы можем задержаться и просто поболтать. Пока что у меня 3 менти устроились в it - на 300к, 150к и 256к. Еще с 7 менти будем выходить на рынок в феврале - марте. Будет весело))

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

Побывали в Турции и нам очень понравилось. Попробовали тот самый тюлений отдых 👍
Наконец-то посмотрели игру престолов. Оочень понравилось, прям кайфанули.
И было много других приятных моментов.

Также для себя понял, что вне работы я хз чем заниматься. Не могу нормально отдыхать. Нет какого-то увлечения. Играть неинтересно (только в доту с друзьями нравится). Кучу игр пробовали, но через пару часов все дропаю. Может надо каким-нибудь спортом заняться..

В целом 2025 год мне очень понравился. Надо не сбавлять темпы, есть куда расти🫡
Можете тоже делиться со своими итогами, очень интересно почитать⤵️

Осталась только одна незакрытая задачка у меня - сделать ДЕАНОН. Пора б и ее закрыть. Скоро выложу видосик с поздравлением 💅
Please open Telegram to view this post
VIEW IN TELEGRAM
2🔥29138👍2
This media is not supported in your browser
VIEW IN TELEGRAM
Как и обещал🤝 Не судите строго.
Всех с наступающим!🥂
Please open Telegram to view this post
VIEW IN TELEGRAM
4🤣41🔥1074🎉2💅1
Подписываем петицию на продление выходных ⤵️
Please open Telegram to view this post
VIEW IN TELEGRAM
3755💅4🤝3🤔1
Доступ к данным: где граница дозволенного?

Вчера случайно нашел у себя в хранилище таблицу с промокодами доставки.. Промокоды на скидки в рублях и в процентах, на бесплатную доставку. Как перестать думать об этой таблице 🫣

Стало интересно, а кто-то пользовался рабочими данными в своих интересах? Я говорю только о законных вещах) Без всяких сливов.

Когда я устроился в мегафон (первая моя компания в ит), получил доступ к корпоративному хранилищу, то сразу начал копаться в данных. Интересно же 😁
Посмотрел историю своих звонков. И по приколу глянул звонки друзей.. Потом говорил что слежу за ними😅 (все знали что это шутка). Возможно еще мог чекнуть историю их браузера, по каким ссылкам они переходили. Такие данные тоже были 😎
Но не смотрел, только сейчас об этом думал. Я в этом плане с уважением отношусь и не смотрю личную инфу. Просто в начале пару минут покапался 🦦

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

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

Я не буду пользоваться промиками, тк это не честно и возможно в компании могут узнать и наказать. ХЗ что для меня больше аргумент ими не пользоваться.
Но в теории могу ли я пользоваться? Насколько это наказуемо🤔

Интересно есть ли у вас какие-то подобные истории использования корпоративных данных в своих целях? И мысли насколько это вообще все корректно. Может если компания не успела все маскировать данные, то ок - можно и что-то для себя подсмотреть?🍴⬇️

Из забавного вспомнил как работал с таблицей с обращениями в тех поддержку. Там были оч смешные сообщения. Сколько там было матов и обзываний🙊
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥134👍4😁42💅1
This media is not supported in your browser
VIEW IN TELEGRAM
Ну мы же 🥳
*при том нейронки этой же компании
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣28🔥77💅62😢1
Накрутка опыта

Да, да. Та самая холиварная тема. Я ни разу не писал по этому поводу. Понимаю и тех кто за накрутку и тех кто против.

Каждый выбирает свое. Я считаю, что проблема должна решаться сверху законами, решениями и тд. Например, проверкой трудовой ВСЕМИ компаниями. Или же, чтоб количество лет в резюме не было главным фильтром при выборе кандидата. Пока есть легкий путь трудоустройства в it, люди будут им пользоваться.

Но сейчас я хочу сказать аргумент ЗА НАКРУТКУ обычных работяг.

Знаете ли вы, что много аутстафф компаний (возможно все) крутят опыт своим сотрудникам.

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

Я сам работал в такой компании (назовем ее ЛИГА 😄) Ничего против Лиги не имею. Считаю, что эта топ компания для старта карьеры. У меня остались только положительные эмоции. Возможно я был в очень крутой команде🤔

Через Лигу я работал на Альфа банк. И если было свободное время можно было параллельно работать наставником в Лиге. Я собесил стажеров/джунов дата инженеров и аналитиков. Набирали инженеров, обучали их пару месяцев основному стеку и потом продавали в крупные банки. Также нужно было подготовить новых сотрудников к собеседованиям и сделать резюме. И в 70% процентах нам компания говорила крутить опыт сотрудникам. То есть стажер мог учиться пару месяцев и мы для него придумывали легенду под вакансию банка, крутили опыт 1 - 2 года. И стажера продавали в компанию как джун+/мидл. И есть подозрение, что банк часто был в курсе подобной накрутки. Эта была просто формальность.

И недавно общался с дата инженером, который когда-то работал в Астон. Он сказал, что в Астоне крутят 5 лет опыта 😱
Я был в шоке от такой наглости. Поэтому когда обычные работяги крутят себе опыт, я их понимаю. Сейчас с 0 опыта я скорее всего бы делал также. Сейчас такие правила игры.

Но тем кто идет по честному пути, ищет работу без накрутки - уважение 👍

Что думаете по этому поводу? 🤔⬇️

- ничего против накрутки опыта не имею, сам крутил
- против накрутки
🤷‍♂️- мне все равно, мне она никак не мешает
Please open Telegram to view this post
VIEW IN TELEGRAM
156🤷‍♂342432💅1
Удаление дублей в Greenplum

Как-то я писал пост про удаление полных дублей из таблицы.
В обычных СУБД можно разделить полностью одинаковые строки по скрытому системному полю, например, по rowid (Oracle), ctid (PostgreSQL).

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


——-
Greenplum, как известно, это MPP система. И по сути, под капотом параллельно работаем несколько инстансов PostgreSQL.

И недавно у меня была задача по удалению дублей из Greenplum-a. И я сделал очевидную глупую ошибку. Решил рассказать об этом вам, чтоб вы не допустили 😊

Так вот, допустим есть таблица sandbox.test_duplicate с полями (sale_id, product_id, sale_date, amount и тд). В таблице лежат тысячи строк и среди них есть немного дублей. Надо просто удалить дублирующие строки и оставить только уникальные.
Набросали быстренько скрипт

delete from sandbox.test_duplicate      -- удаляем дубли по системному id строки
--select t.*, ctid from sandbox.test_duplicate t -- можно сначала посмотреть что удаляем
where ctid in
(
select ctid
from (
select t.*, row_number() over (partition by sale_id order by sale_date) as rn, ctid -- нумеруем и выводит физ. адрес строки
from sandbox.test_duplicate t
where sale_id in
(select sale_id -- выбираем только строки с дублями
from sandbox.test_duplicate
group by sale_id
having count(sale_id) > 1)
) t
where rn > 1) -- выбираем дубли ctid. rn = 1 оставим, а остальное удалим

Удаляем строки и идем пить чай 🍷 Задача выполнена🙌

Но на самом деле нет💀 Выясняется, что удалены все строки. Например было два sale_id=1, sale_id=1. Должна остаться только одна строка, но пропали две.
Или что еще хуже удалены вообще рандомные другие строки. А может все и правильно отработало.
Я потестил на разном количестве - и это рандом. На маленьком количестве строк может все и правильно отработать. На большом количестве точно будут неверные удаления. Сейчас объясню.

Проблема в запросе в том, что используется ctid в Greenplum без указания gp_segment_id. В Greenplum ctid уникален только в пределах одного сегмента, а не всей таблицы. Это приводить к непредсказуемым результатам и удалению всех строк.

То есть ctid разных сегментов конечно же могут пересекаться

Правильный скрипт будет такой:


DELETE FROM sandbox.test_duplicate
WHERE (ctid, gp_segment_id) IN (
SELECT ctid, gp_segment_id
FROM (
SELECT ctid, gp_segment_id,
ROW_NUMBER() OVER (PARTITION BY sale_id ORDER BY sale_date) AS rn
FROM sandbox.test_duplicate
WHERE sale_id IN (
SELECT sale_id
FROM sandbox.test_duplicate
GROUP BY sale_id
HAVING COUNT(*) > 1
)
) t
WHERE rn > 1
);
COMMIT;


А вообще можно глянуть на какие сегменты размазана таблица:

-- Для вашей таблицы
SELECT
gp_segment_id,
COUNT(*) as row_count
FROM sandbox.test_duplicate
GROUP BY gp_segment_id
ORDER BY gp_segment_id;

-- Количество активных сегментов
SELECT COUNT(*) as total_segments
FROM gp_segment_configuration
WHERE role = 'p' AND content >= 0;
-- Фильтры в запросе WHERE role = 'p' AND content >= 0 отбирают только активные первичные сегменты Greenplum.


Вроде супер очевидно, но я на этом попался. И удалил лишнее. Важно это все заметить на тестовой среде.

Кстати вчера у дата инженеретта был пост про удаление дублей в ClickHouse. Тоже чекните, интересно 👍

Кто-нибудь еще знает подобные тонкости по работе с разными СУБД?
В комменты закину скрипт создания таблицы. Можете тоже потестить⬇️

it пингвин | data engineer 🐧
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1914👍5421
This media is not supported in your browser
VIEW IN TELEGRAM
Как хорошо быть айтишником в 2025 2026 💅
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣295😁44🔥3🤔11
Обзор собеседования

Должность: Data Engineer
Компания: ООО Тера Интегро
Тип собеса: #тех_собес
Грейд: #Junior #middle
Вилка: 210к
Вакансия: https://spb.hh.ru/vacancy/128761959
Итог собеса: Отказ, тк кандидат еще учится в универе

Краткий обзор собеседования:
Вопросы про БД:
• Как вы начинаете изучать почему запрос стал работать медленнее какие шаги предпринимаете и на что смотрите?
• Какие физические виды Join бывают, их алгоритм выполнения?
• (Greenplum) Есть таблица транзакций 1 млрд записей она соединяется с таблицей sheets и таблицей clients по foreign key, все 3 таблицы распределены равномерно. В таблице транзакций в колонке для соединения с таблицей sheets 300 млн Null значений. Будут ли проблемы при Join этих трех таблиц?
• Как избавиться от Broadcast при соединении двух таблиц?

Вопросы по Python:
• List что за тип данных?
• Что такое lambda функция и отличия от обычной?

Вопросы по dbt (dbt Core):
• Как запустить одну модель dbt, все предыдущие модели, которые необходимо для рассчета текущей?
• Для чего используют макросы в dbt?



Как вам собес?🤔

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

#собеседование #подписчик
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1610👍5321
Обзор собеседования

Должность: Data Engineer
Компания: EmployCity
Тип собеса: #тех_собес
Этапы: 1 техничка > тестовое задание, созвон и обсуждение решения > знакомство с командой
Грейд: #middle
Вилка: 3-4к евро плюс оплата перелета и 700 евро на проживание каждый месяц
Вакансия: https://hh.ru/vacancy/128579553
Итог собеса: 1 этап прошел

Краткий обзор собеседования:
Вопросы по CDC:
• Как работал со связкой Kafka+CDC?
• Как забирали историчные данные с источника CDC?

Вопросы по dbt:
• Какие материализациии использовались чаще всего?
• Какие стратегии иксрементного обновления использовал?

Вопросы:
• Как запускали даги в Dagster?
• Что использовали для контроля зависимостей в проекте?


Новый обзор подъехал. Как вам?
По мне так зп для Кипра небольшая 🤔

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

#собеседование #подписчик
Please open Telegram to view this post
VIEW IN TELEGRAM
17🔥8👍411
This media is not supported in your browser
VIEW IN TELEGRAM
Коллектив, тимбилдинги и корпораты - это реально важно 🙌

В одной из моих первых IT-компаний был оч крутой коллектив.
У нас имелся свой маленький закрытый чатик с личными мемасами и внутренними шутками. Мы могли поугарать над заказчиками, поболтать на рандомные темы или просто сидеть на созвоне часами, параллельно работая. А тусовки были вообще огонь..💔
Please open Telegram to view this post
VIEW IN TELEGRAM
196👍4🔥3🤣2
Очередные вопросы по SQL с собеседования

Итак, дана таблица с одним полем flag


CREATE TABLE sandbox.test (flag integer);

INSERT INTO sandbox.test (flag) VALUES
(0), (1), (2), (3), (4), (5), (null), (null);



Давайте закрепим популярные вопросы про count

• select count(*) from sandbox.test;
-- Результат 8
• select count(1) from sandbox.test;
-- Результат 8
• select count(0) from sandbox.test;
-- Результат 8
• select count(null) from sandbox.test;
-- Результат 0
• select count(flag) from sandbox.test;
-- Результат 6
• select count('flag') from sandbox.test;
-- Результат 8

Объяснение почему так:

• COUNT(*) считает количество строк в таблице

• COUNT(1) и COUNT(0) - то же самое: 1 и 0 здесь просто константы, они не NULL, поэтому каждая строка учитывается

• COUNT(flag) - считает только не NULL значения в колонке flag.

• COUNT(NULL) - всегда 0, потому что NULL - это отсутствие значения. Еще раз, COUNT никогда не возвращает null


Вопросы про count популярны на собесах. А вот про функцию sum более редкие. И меня один кейс удивил..

• select sum(*) from sandbox.test;
-- Ошибка!
• select sum(flag) from sandbox.test;
-- Результат 15
• select sum(0) from sandbox.test;
-- Результат 0
• select sum(1) from sandbox.test;
-- Результат 8
• select sum(2) from sandbox.test;
-- Результат 16
• select sum(4) from sandbox.test;
-- Результат 32

Почему SUM(*) - ошибка?
Потому что * означает «все колонки». А как сложить строку с числом? Или дату с текстом? База данных справедливо говорит: «Я не умею складывать всё подряд, дай конкретную колонку».

SUM(flag) = 15 - логично
Складываем числа: 0+1+2+3+4+5 = 15. NULL игнорируются (не участвуют в сумме).

А теперь самое неочевидное - SUM(1), SUM(2), SUM(4)


Многие думают: SUM(1) должен вернуть 1. Но нет!

Давайте представим, как база данных выполняет этот запрос:

Берем таблицу из 8 строк

Для каждой строки вычисляем выражение в скобках:

Для SUM(1) → значение 1 в каждой строке

Для SUM(2) → значение 2 в каждой строке

Для SUM(4) → значение 4 в каждой строке

Складываем все эти значения

Получается:
SUM(0) = 0+0+0+0+0+0+0+0 = 0 (тут логично)

SUM(1) = 1+1+1+1+1+1+1+1 = 8 (количество строк)

SUM(2) = 2+2+2+2+2+2+2+2 = 16 (2 × 8 строк)

SUM(4) = 4+4+4+4+4+4+4+4 = 32 (4 × 8 строк)


SUM(константа) работает как умножение константы на количество строк в выборке.

И да, количество полей в таблице никак не влияет на результат. Даже если в таблице 100 колонок, SUM(2) всё равно вернет 16. Главное - сколько строк попало в выборку.

Честно говоря, я такие вопросы на собесах оч не люблю. Какой от них практический смысл я хз. Кто хоть раз писал count(0) или sum(4). Но раз такое часто спрашивают на собесах, то нужно быть готовым 🤝

Интересно, сколько людей ответили правильно на всё?
Ставь если на все ответил правильно
И ставь если допустил хотя б одну ошибку.

it пингвин | data engineer 🐧
Please open Telegram to view this post
VIEW IN TELEGRAM
45617👍10🔥964
Вопросы с hr скрининга

1️⃣ 1 + NULL в SQL = NULL
2️⃣ Типы физических джоинов = Nested Loop, Hash, Merge, Broadcast (в Spark)
3️⃣ Какими оконными функциями можно получить номер строки = ROW_NUMBER(), RANK(), DENSE_RANK()
4️⃣ Может ли быть число ключом словаря = да
5️⃣ Может ли быть строка ключом словаря = да
6️⃣ Может ли быть список ключом словаря = нет
7️⃣Какое максимально и минимальное число драйверов может быть в спарк = min/max =1 (в одном Spark-приложении)

it пингвин | data engineer 🐧
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍3610🔥532💅2
Программа со скидкой до 5 марта (напоминаю я делал серию обзорных постов курса)
👍5🔥11
Мне тут прилетел подгончик от моего топового менти

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

Испытательный срок тоже успешно пройден - на работе им довольны.

Параллельно он начинал вести канал, но из-за высокой нагрузки пришлось поставить на паузу. Скоро вернётся к постам.

Его тэгэшчка 🔜 DROP TABLE

И вот мне прилетел обещанный тречок
(менти вообще битмейкер и продюсировал популярных исполнителей) ⬇️😮‍💨

*трек рофельный и сделан на скорую руку - думаю, это всем понятно 🤝
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1342🤣2👍1😱1💅11
Вопрос

В конце каждого месяца загрузка многих таблиц замедляется. В чем причина замедления?
При условии, что общее количество ETL потоков в БД не увеличивается.

Причину замедления в своем хранилище напишу в комментах и как ее решили
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔1541
Лучше пост сделаю

В целом вот правильный ответ - https://t.me/data_penguin/229?comment=4524
Точнее так - это проблема была в моем dwh. Но там еще интересные варианты написали 👍

Просто это вроде как очевидно, но я об это не задумывался пока не столкнулся с замедлением.

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

Например, по одной таблице раньше за один день прилетало 50к строк. И за месяц было ~1,5 млн строк (это нормальный размер для партиции). А теперь прилетает ~1млн строк в день. Партиции к концу месяца уже десятки миллионов строк.
Конечно выбор данных из них всё медленнее и медленнее. Хотя по классике в скриптах чаще всего фильтр стоит по дню и нам не нужно просматривать целый месяц.

В общем, решение:
Там где это можно и не поломает запросы - аккуратно переходим на недельные партиции. Запросы стали бегать быстрее
Please open Telegram to view this post
VIEW IN TELEGRAM
👍218🔥211
Бесплатная реклама для своей компании))

Если часто покупаете в Пятерочке рекомендую оформить апельсиновую карту (коллаба с Альфа банком) + сервис пакет (вроде 130 рублей в месяц стоит).

Реально много баллов кэшбэком приходит. Вчера потратил 3500 - вернулось баллами ~600 рублей (10 апельсинок = 1 рубль). + Допом кэшбэк на банковскую карту приходит. Сервис пакет дает много категорий с повышенным кэшбэком.

Доставкой еще приятнее пользоваться, больше апельсинок и еще какие-то доп акции.
В общем, рекомендую 👍

Прикольно когда нравится продукт, в котором работаешь 💅
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥9😁7💅322
Анализ рынка IT

Напишу свои мысли о ситуации на рынке DE в 2026. Просто мое мнение. Можно сказать сплетни 💅

Рыночек точно просел. Предложений стало меньше, чем год назад.
Январь-февраль был тухлый, вакансий было оч мало. Пару раз в неделю могли писать HR-ы. Есть знакомые, которые с января не могут найти работу.

В марте стало лучше, предложений стало гораздо больше. У моих менти сейчас по несколько собесов в неделю. Рекрутеры почти каждый день пишут. Но опять же в прошлом году было предложений больше. Надеюсь рыночек будет активный до мая🤞

ЗПки в среднем тоже стали меньше. Раньше если писал аутстафф с предложением устроиться на проект Сбера, то предлагали вилки от 300+ легко. Сейчас очень часто пишут зп 220, 250, 270. Торгуются не охотно.
Имхо в прошлом году на мидл+ можно было найти работу с зп 270-350. В этом году вилка стала ~230-320.

Хорошие предложения тоже есть. Не все так плохо. Просто конкуренция больше. Недавно знакомый получил оффер на 465к.
Кстати, на стажировке Яндекс может платить ~70к, Райф ~100к.

С другой стороны если сравнить средние ЗП перед новым годом с хабр карьеры (мой пост), то вроде средние зп немного даже выросли 🤷‍♂️

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

Еще слышал инфу, что на собеседовании могут попросить покрутить камеру, показать помещение. Интервьюеры хотят убедиться, что у тебя рядом нет второго моника с чатом гпт 🤡

А что вы скажите по рынку it? Чувствуете просадку? Что там в аналитике? Может у кого-то есть инсайдики 🎮⬇️

it пингвин | data engineer 🐧
Please open Telegram to view this post
VIEW IN TELEGRAM
11🔥874