Айти-Пингвин | Дата инженер


Гео и язык канала: Россия, Русский
Категория: Технологии


Канал главного разработчика Data Lake крупного банка.
База знаний для джунов, разбор собесов, задачи (jun/mid/sen) с решениями, полезные материалы, обзоры технологий и архитектур.
По вопросам и менторству писать @it_pengwin

Связанные каналы

Гео и язык канала
Россия, Русский
Категория
Технологии
Статистика
Фильтр публикаций


Что такое Lakehouse?

Название Lakehouse сложилось из Data Lake и Data Warehouse. Идея в том, чтобы хранить данные как в Data Lake, но работать с ними почти как в DWH.

В классическом DWH данные загружаются внутрь СУБД, например Greenplum. Она отвечает за хранение, SQL, транзакции и управление таблицами.

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

Data Lake устроен иначе. Данные лежат в S3 в открытых форматах вроде Parquet. Хранилище масштабируется отдельно, а одни файлы могут использовать разные инструменты.

Но просто сложить Parquet-файлы в S3 недостаточно.

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

Lakehouse добавляет этот недостающий слой управления.

Из чего он состоит?

1. Объектное хранилище

S3, MinIO или другой storage хранит файлы с данными.

2. Табличный формат

Iceberg, Delta Lake или Hudi управляет схемой, версиями и изменениями файлов. Этот слой даёт транзакции, конкурентную запись, time travel и rollback.

3. Каталог

Хранит информацию о таблицах и указывает движкам, где находятся их актуальные метаданные. В этой роли могут использоваться Hive Metastore, AWS Glue, Nessie или Iceberg REST Catalog.

4. Вычислительные движки

Spark выполняет обработку, Trino запускает SQL-запросы, Flink работает с потоками. Все они могут обращаться к одним таблицам.

Зачем отделять хранение от вычислений?

Объём данных растёт постоянно, а нагрузка меняется. Ночью может работать тяжёлый ETL, днём выполняются короткие запросы, а часть истории месяцами просто хранится.

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

Также не обязательно создавать отдельную копию данных для Spark, вторую для SQL и третью для ML. Разные инструменты могут работать с общей таблицей.

Когда Lakehouse действительно нужен?

Не каждой компании нужен Lakehouse.

Если данных немного, ими занимается одна команда, а аналитика помещается в одной СУБД, Lakehouse может только добавить сложности.

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

Одной команде нужен SQL и BI, другой - Spark, третьей - машинное обучение, четвёртой - потоковая обработка. Хранить для каждой команды отдельную копию данных становится дорого и неудобно.

Lakehouse позволяет держать исходные и подготовленные данные в одном хранилище, а разным инструментам - работать с ними через общий слой таблиц.

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

Почему это стало возможным именно сейчас?

Хранить файлы отдельно умели и раньше. Но старым Data Lake не хватало управления таблицами, а работа с файлами уступала DWH по удобству и надёжности.

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

А что с DWH?

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

Для стабильной BI-нагрузки готовая СУБД часто проще. Lakehouse полезен, когда данных много и они нужны разным командам и инструментам.

Если коротко, Lakehouse - это Data Lake, которому добавили управление таблицами и часть возможностей DWH. Но оправдан он обычно тогда, когда масштабы и зрелость компании требуют собственной data-платформы.
————
Как же нейронки стали хорошо генерить картиночки))

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


⚡️⚡️Архитектура доступа к данным меняется. Что дальше?

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

Сегодня рядом с привычными JDBC и ODBC появляются Apache Arrow, ADBC, Flight SQL, Spark Connect и нативные HTTP-протоколы движков. На SmartData 2026 Петр Гуринов (Yandex Cloud) разберет, что происходит между запросом и результатом, почему старые интерфейсы пока не уходят, где новые подходы действительно помогают и какие компромиссы приходится учитывать при выборе технологии.

Если вы проектируете платформы данных, работаете с аналитическими системами или BI-инструментами, этот доклад поможет лучше понять архитектуру доступа к данным и осознаннее выбирать инструменты под свои задачи.

🗓SmartData 2026 пройдет 23–24 сентября (Москва + онлайн).

🐧Купить персональный билет со скидкой 15% по промокоду DATAPENGUIN и ознакомиться с полной программой можно на сайте конференции.


Мошенники под видом рекрутеров

Ребят, аккуратнее с тестовыми заданиями от незнакомых рекрутеров.

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

Это может быть ссылка на репозиторий или архив с проектом. Задача будет выглядеть вполне обычно: установить зависимости, запустить приложение и что-нибудь в нём поправить.

Но вместе с проектом можно запустить вредоносный код.

Схема такая:

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

В одном из таких заданий нашли скрытый импорт вредоносного npm-пакета. Код был обфусцирован (специально запутан, чтобы его было сложно прочитать). После запуска он скачивал ещё один файл и запускал его отдельным процессом в фоне.

При этом ошибки игнорировались. Для кандидата проект мог просто не запуститься. Можно решить, что в тестовом что-то сломано, закрыть его и забыть. А вредоносный процесс уже работает.

Что он искал?

- данные браузеров Chrome, Edge;
- токены и сохранённые сессии;
- данные браузерных расширений;
- файлы криптокошельков;
- сохранённые пароли и другие учётные данные.

На компьютере разработчика обычно лежит ещё много важного: SSH-ключи, файлы .env, токены доступа к репозиториям, облакам и рабочей инфраструктуре.

И для этого не обязательно запускать какой-то подозрительный exe-файл. Вредоносный код может выполниться во время обычного npm install через install-скрипты пакета.

Что стоит проверить перед запуском?

1. Кто прислал тестовое

Посмотрите аккаунт рекрутера, сайт компании и саму вакансию. Лучше отдельно найти контакты компании и проверить, действительно ли у них есть такой сотрудник и вакансия.

2. Зависимости


Иногда вредоносный пакет маскируют под популярный. Например, пакет crossenv маскировался под настоящий cross-env. Отличие только в одном дефисе, который легко не заметить.

Поэтому стоит посмотреть package.json и проверить незнакомые зависимости.

3. Скрипты запуска

В обычном тестовом не должно быть кода, который скачивает неизвестные файлы, запускает PowerShell или отдельные процессы через child_process, spawn и exec.

А если рядом лежит огромный обфусцированный JavaScript, который невозможно нормально прочитать, такое тестовое лучше вообще не запускать.

4. Где запускается проект

Не стоит запускать неизвестное тестовое на рабочем компьютере или основном ноутбуке. Лучше использовать отдельную виртуальную машину без общих папок, паролей, ключей и рабочих доступов.

Docker тоже не всегда спасает. Если внутрь контейнера передали папки с компьютера, переменные окружения или Docker socket, доступ к данным всё ещё можно получить.

В последнее время всё чаще слышу про подобные истории. Будьте внимательны и смотрите, что вам присылают. Даже если это обычное тестовое задание от рекрутера.
————
Вам такие тестовые попадались? Я бы сейчас тестовые или вообще не делал. Или делал после реального собеседования и только тестовое в виде текстового файлика/ворда/просто сообщение (конечно, если очень хочется в этом месте работать).

upd. И да, следите кому отправляете свои документы (часто просят весь пакет документов для оформления на работу)! 100 раз подумайте, может ли этот человек быть скамщиком.

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


Apache Iceberg - зачем он нужен?

Iceberg всё чаще встречается в вакансиях и архитектуре. Что это: база данных, альтернатива Parquet или часть Spark?

Iceberg - открытый табличный формат. Он не заменяет Parquet и не выполняет запросы вместо Spark или Trino.

Допустим, в S3 лежит таблица из множества Parquet-файлов. Parquet определяет устройство каждого файла, но ничего не знает о таблице целиком.

Какие файлы сейчас актуальны? Что делать, если две джобы одновременно записывают данные? Как вернуть таблицу в состояние до неудачной загрузки?

Iceberg хранит над файлами метаданные: схему, партиционирование, статистику и историю изменений.

Таблица состоит из snapshots - её версий. Каждый snapshot содержит точный список файлов на определённый момент.

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

Что это даёт?

1. Конкурентная запись

Несколько джоб могут одновременно работать с таблицей. При коммите Iceberg проверяет, не изменились ли затронутые данные, и обнаруживает конфликт.

2. Time travel и rollback

Можно прочитать таблицу в состоянии на определённый момент или вернуть её к предыдущему snapshot после ошибочной загрузки.

3. Безопасное изменение схемы


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

4. Скрытое партиционирование


В запросе можно фильтровать обычную колонку с timestamp, а Iceberg сам определит подходящие партиции. Способ партиционирования можно менять без немедленной перезаписи старых файлов.

5. Планирование чтения

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

Почему недостаточно DWH, например Greenplum?

В MPP-СУБД хранение и вычисления находятся в одном кластере. Расширяя его ради растущего объёма данных, приходится добавлять и вычислительные ресурсы.

В S3 хранение масштабируется отдельно, а разные движки могут работать с одними файлами. Iceberg добавляет им возможности таблицы. При этом DWH продолжает решать свои задачи.

Почему Iceberg появился только сейчас?


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

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

Что Iceberg даёт этим движкам?

Iceberg - не отдельный сервер. Это спецификация таблицы, библиотеки и интеграции.

Они объясняют движку, как найти нужные файлы, применить фильтры, прочитать таблицу, записать новую версию и выполнить коммит. Движок занимается вычислениями, а Iceberg отвечает за состояние таблицы.

Снаружи всё действительно выглядит просто. Но внутри snapshot ссылается на manifest list, тот - на manifests, а в них уже хранятся списки data files и статистика.

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

Таблицы приходится обслуживать: объединять небольшие файлы, удалять старые snapshots, очищать потерянные файлы и оптимизировать manifests.

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

————
Как вам формат? Хочу чаще делать посты, писать на понятном языке про всякие de-шные (и не только) технологии.


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


Обзор собеседования с Лемана Про

Формат работы: Гибрид
Зп: от 250к просил
Период собеседования: Июль 2026
Итог собеседования: Игнор

————

Общий опыт работы

С какими базами данных вы работали и до какого уровня погружались в SQL и БД?

Миграция Oracle → Greenplum

Опишите подробнее процесс миграции на Greenplum. Какие особенности необходимо было учитывать?

Какая конфигурация использовалась в Oracle — распределённая или обычная СУБД?

Приходилось ли оптимизировать операции join при переходе с обычной таблицы на распределённую?

Применялась ли индексация в Greenplum в вашей практике?

Задача на проектирование (геоданные)
Дана таблица с географическими координатами полигонов. Каким образом можно ускорить поиск по координатам без использования полигонального индекса?

Как можно применить дистрибуцию или партиционирование для оптимизации запросов по числовым координатным полям?

Какой принцип должен лежать в основе распределения данных для эффективного использования всего кластера?

Языки программирования
Расскажите об опыте работы с языками программирования, в частности с Python.

Насколько глубоко изучен API Apache Airflow? Какие классы операторов и задач применялись?

Использовались ли внутренние механизмы Airflow — переменные, XCom?

Применялись ли генераторы задач или динамические DAG?

Проектирование pipeline

Как бы вы спроектировали pipeline для загрузки таблиц из Oracle в Greenplum?

Каким образом следует организовать запуск: единый DAG или отдельные DAG для каждой таблицы?

Какие преимущества и недостатки имеет каждый из подходов — универсальный DAG с множеством задач против отдельных DAG на каждую таблицу?

Контроль качества данных

Каким образом обеспечивается контроль качества загруженных данных?

Опишите верхнеуровневую структуру отчёта по контролю качества данных (data quality).

Опыт с Hadoop-стеком

Расскажите подробнее об опыте работы с экосистемой Hadoop.

В каком окружении использовался PySpark?

С какими форматами файлов приходилось работать (Parquet, CSV, ORC)?

Хранились ли данные в объектном хранилище?

Имеется ли опыт работы с технологиями каталогизации и версионирования данных, например Apache Iceberg?

DevOps и инфраструктура
Имеется ли опыт применения практик DevOps и SRE?

Есть ли опыт работы с Docker и Kubernetes?

Использовались ли инструменты мониторинга и логирования, такие как Grafana или Loki?

Управление кодом БД и архитектура хранилища

Как организован процесс работы с кодом, относящимся к базе данных, включая развёртывание процедур, функций и таблиц?

Какой процесс применяется для деплоя изменений в продуктивную среду?

Опишите архитектуру хранилища данных: какие слои используются и как формируются витрины данных?

————

Вот это уже потненький собес. Не то что в Сбере)

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

#собеседование #менти


Обзор собеседования со СБЕР v2

ВОПРОСЫ:

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

Какой итоговый объем витрин был, в строках или гигабайтах?

ЗАДАЧА 1:

Дана таблица такого формата
code status
1 активный
2 закрыт
3 аннулирован
3 аннулирован

Как написать запрос, который покажет, есть ли в таблице дублирующиеся записи?

Как написать запросы, чтобы удалить дубли и оставить только уникальные записи?

Какие есть разные способы дедупликации одной и той же таблицы?

Возможна ли ситуация, когда после удаления дублей в отчете они появляются снова? И как решать такую проблему, если ты не знаешь источник, откуда в эту таблицу летят дубли, а также не может повлиять на скрипт загрузки?

Какой constraint можно поставить на таблицу, чтобы не допускать дублей?

Что будет с потоком загрузки, если он попытается вставить записи, нарушающие unique constraint?

Как организовать загрузку через staging, чтобы сначала очистить данные, а потом вставить только уникальные записи в целевую таблицу?

Какую периодичность запуска выбрать для процесса очистки дублей, если неизвестно, как часто приходят вставки?

Как бы ты оптимально решал проблему дублей в таблице, если нельзя быстро найти источник проблемы?


ЗАДАЧА 2:
Есть 9 одинаковых на вид монет. Одна из них фальшивая, и она легче остальных. Есть только чашечные весы без гирь. Нужно найти фальшивую монету ровно за 2 взвешивания.

——————-

Чет со Сбером изичные собесы🦦

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

#собеседование #менти


Обзор собеседования со СБЕР

Вопросы:

Какие виды JOIN ты знаешь, и в чем между ними разница?

Что такое anti join?

Что будет при JOIN по ключу, если в ключевых колонках с обеих сторон есть NULL?

Чем отличаются UNION и UNION ALL?

Что такое нормализация таблицы?

Зачем нужна нормализация, и можешь привести пример нормализованной схемы?

Чем отличается OLAP от OLTP?

Был ли у тебя опыт работы со Spark?

Какой основной плюс Spark в распределенных вычислениях?

Какие основные шаги выполняются, когда нужно поджойнить две большие таблицы в Spark?

Что значит, что JOIN в Spark — это широкая операция?

Задача:

Таблицы:
clients (id,name, start_date, end_date)
transaction(id,client_id,amout,date)

Найти для каждого клиента сумму транзакций за 1 апреля 2025 года. Вывести id клиента, имя клиента и сумму транзакций.
* при этом id в таблице clients меняется по scd2.
потом еще какие-то доп. условия интервьюер накидывал на задачу.

❗️*upd
Это внутренний проект сбера. Вакансия с их платформы, уже убрали.
Зп от 250 на руки были согласны.
Позвали в офис на финальный этап, но кандидат не пошел 🦦

——————-
Ставьте 70 🏦 сберов и выложу еще один обзор с ними 🫡

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

#собеседование #менти


Всем привет!
Подскажите плз хорошее компьютерное кресло. Нужно с сеткой и анатомической спинкой.
Я посмотрел несколько видосиков (например, это) и всякие статьи.
Одно нормальное кресло не нашел, склоняюсь к линейке самураев. Но вижу, что в начале у всех отличные отзывы, а после продолжительного использования – плохие.

И кто знает норм компьютерный стол (желательно с крыльями и подъемным механизмом) тоже можете ссылочкой поделиться 👉👈 ⬇️


Обзор собеседования с Neoflex

ВОПРОСЫ:

1. Что на каждом слое делают с данными? (опиши 3–4 глаголами: raw, staging, ODS, DDS, data mart)
2. Слой data mart — нормализован или нет?
3. Почему data mart денормализован? Что выигрываем?
4. С какими моделями данных сталкивался: звезда, снежинка, data vault?
5. Как косвенно определить по структуре таблицы (без данных, только атрибуты, типы, констрейнты) — это факт или измерение?
6. Почему в таблице фактов не должно быть 3–4–5 больших varchar-полей?
7. Перечисли 6 стандартных констрейнтов на атрибут
8. Перечисли все виды ключей (primary, foreign, unique, простой/составной, натуральный/суррогатный и др.)
9. Какой из перечисленных ключей не является идентификатором таблицы, в которой находится?
10. Какие подвиды суррогатных ключей знаешь?
11. В чём разница между индексами и партициями?
12. Каким образом ты проверял данные? Какие метрики data quality использовал?
13. Приходилось ли разрабатывать конкретные метрики качества данных? Какие?

Плюс была несложная задача на исправление ошибок в sql-запросе.


Собеседование было в июне, по зп готовы платить 200к (я думаю +30к можно выторговать).


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

#собеседование #менти

2k 1 67 20 27

Я кстати залечу на буткемп в июле, очень интересно что там)


Репост из: Я – Дата Инженер | Евгений Виндюков
🔥 ПЕТ-ПРОЕКТ ДАТА ИНЖЕНЕРА

В эту СРЕДУ 17 ИЮНЯ в 20:00 МСК у нас будет довольно интересный стрим. Причём проводить его будет не только команда BootCamp, но и один из наших выпускников.

К нам придёт Артем — участник 6-го потока BootCamp. За время обучения он собрал полноценный пет-проект и теперь покажет его нам от начала до конца.

➡️ ссылка на стрим

Что вообще будет в проекте?
Берём данные из API New York Times, складываем их в S3, грузим через Spark в Greenplum, строим витрины через dbt и публикуем результат в ClickHouse. Плюс логирование Airflow-задач в Postgres.

Ну т.е. это буквально пример рабочего пайплайна для Дата Инженера. Причем довольно внушительного по кол-ву используемых технологий.

На стриме Артём покажет:
— как устроен проект
— как принимались архитектурные решения
— почему были выбраны именно эти инструменты
— какие сложности возникли во время разработки
— что можно улучшить дальше

Будет полезно всем, кто сейчас думает над своим первым серьёзным проектом или хочет посмотреть, как выглядит нормальный DE pet-project в 2026 году.

🎙 Спикеры:
@halltape
@shustDE
— Артём (выпускник 6-го потока BootCamp)

📅 Среда 17 ИЮНЯ
20:00 МСК
➡️ ссылка на стрим

Приходите, послушаем лекцию, посмотрим код и разберём проект по косточкам.
Запись будет!


Будет интересно 🚀


Ребят, сори, что редко пишу посты. Хочу кратенько рассказать, что у меня сейчас происходит.

На работе сейчас идет миграция с Greenplum+dbt -> Lakehouse (S3, iceberg, trino).
Пока что Lakehouse мне не очень нравится) Наверное, в основном потому, что у нас теперь нет dbt и вместо тысячи dbt-моделек мы создаем сотни дагов в аирфлоу. С этим работать неудобно и непривычно.

Сам процесс миграции очень рутинный. Прям много думать не надо. Переписываем скрипты, делаем даги. В последние дни занимаюсь оптимизацией парсинга json-ов на трино. Немного коряво он это делает.

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

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

Полностью пересел на mac, немного непривычно.

Стал активно использовать ИИ-агенты (пока что корпоративные). Немного меняется рабочий процесс, тоже нужно привыкнуть.

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

А еще ремонт в новой квартире подходит к концу. На него тоже много энергии уходит, но это хотя бы интересно)

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

Может, это и есть то самое выгорание, я хз.
А у вас как дела?🦦

1.5k 0 10 27 53

Видео недоступно для предпросмотра
Смотреть в Telegram
Нужно больше дашбордов 🫡

1.9k 0 45 12 42

Как сейчас устроен рабочий процесс

- 🍴Ты еще работаешь?

🤖Thinking: Пользователь спрашивает, продолжаю ли я работу. Да, я работаю - только что завершил документацию для 12 витрин и сейчас должен перейти к ***. Мне нужно прочитать файл *** и продолжить работу. Давайте перейдем к следующей витрине - ***.

- 🤖 Да, брат, работаю! Только что завершил 12 витрин, сейчас перехожу к следующей

- 🍴 Работай братишка 💅🦦


Обзор большого собеседования с IT_One

У моего менти было интересное собеседование😢 Длительность 3 часа💀
"По опыту косвенные вопросы, по типу на вопросах иногда просили уточнить как это было устроено у вас на работе"

Кандидат ответил на все вопросы и очень хорошо. Пришел отказ без нормальной обратной связи.
В общем, та еще клоунада. IT_One в своем репертуаре ))
Но мы получили хороший список вопросов для самопроверки. Всем будет полезно.

Основные вопросы:
1) Чем отличаются DWH и Data Lake?
2) Какие существуют форматы хранения данных?
3) Какие преимущества у колоночных форматов, например Parquet?
4) Что такое OLTP и OLAP?
5) Какие задачи решают OLTP и OLAP системы?
6) Что такое snapshot в контексте DWH?
7) Что такое staging слой в DWH?
8)Какова роль core слоя в DWH?
9)Что такое marts в DWH?
10)Объясните понятие surrogate key.
11)Чем отличается surrogate key от natural key?
12)Что такое Kimball методология?
13)Что такое Inmon методология?
14)В чем разница между star и snowflake схемами?
15)Как выбрать последние 1000 записей по времени с помощью SQL?
16)Что такое running balance и как его реализовать?
17)Чем оконные функции отличаются от агрегатных?
18)Как реализовать фильтрацию по конкретной дате в SQL?
19)Какие типы JOIN существуют?
20)Как оптимизировать JOIN в больших таблицах?
21)Что такое партиционирование в базах данных?
22)Чем полезна архитектура MPP?
23)Как справляться с проблемой data skew?
24)Какие методы обработки невалидных данных вы знаете?
25)Что такое quarantine для данных?
26)Как организовать мониторинг качества данных?
27)Чем отличается commit от push в git?
28)Что такое ветвление (branching) в git?
29)Как устроен CI/CD pipeline?
30)Как хранить secrets в CI/CD системах?
31)Что такое Spark?
32)Как устроена архитектура Spark?
33)Что такое RDD и DataFrame в Spark?
34)Как писать Spark-приложения на PySpark?
35)Как реализовать сложную агрегацию в Spark?
36)Что такое HDFS и как с ним работать?
37)Как автоматизировать запуск Spark job через Airflow?
38)Как работает Kafka?
39)Что такое Kafka Connect?
40)Как реализовать потоковую обработку на базе Kafka и ClickHouse?
41)Как устроен Data Pipeline с Kafka → Kafka Connect → Materialized Views → ClickHouse?
42)Что такое dbt и для чего он нужен?
43)Как dbt помогает с lineage данных?
44)Какие преимущества у инкрементальной загрузки данных?
45)Как проектировать ключи дистрибуции в Greenplum?
46)Какие средства мониторинга и алертинга вы использовали?
47)Что такое Iceberg и Trino?
48)Как настроить multi-cluster обработку в Spark?
49)Какие есть best practices для ETL пайплайнов?
50)Как проводить code review для ETL и аналитического кода?

Задачу тоже прикрепляю 🫡

Как вам собесик😁? Ответили б на все вопросы?

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

#собеседование #менти

2.1k 1 121 59 47

Те самые вечера с Глебом Михайловым 🚬

Прохожу курс по алгоритмам от Глеба 🐆

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

Что могу сказать на данный момент.
Конечно, курс мне нравится))
Смотрю видосики на 2.25, решаю задачки. Все лампово. Подача материала очень хорошая, ничего лишнего. Видосики больше 10 минут не идут. Задачки прям интересные.

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

Нравится, что Глеб вкидывает информацию как правильно именовать переменные, показывает и простые решения в лоб, и оптимальные алгоритмы и однострочные решения. Объяснил как считается сложность алгоритма. Все это интересно.

Прохождение курса логирую. Сейчас я потратил на курс 6 часов 20 минут и решил 28 задач🍴

Результат уже виден. После блока по массивам я решил сходу задачки, которые раньше не решил бы 🦦
Главное дальше двигаться по графику и решать все задачки. Курс длится до августа 😱


Вот прикольная задачка:
Замените элементы на наибольший элемент в правой части.
Дана последовательность элементов arr. Замените каждый элемент этой последовательности на наибольший элемент среди элементов справа от неё, а последний элемент замените на -1.

После этого верните массив.

Example 1:

Input: arr = [17,18,5,4,6,1]
Output: [18,6,6,6,1,-1]

Example 2:

Input: arr = [400]
Output: [-1]

Я чуть позже в комменты закину решение.
Кто осилит задачку, тоже делитесь решениями ⬇️

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


Обзор собеседования

Должность: Data Engineer
Компания: СБЕР в команду GigaData
Тип собеса: #тех_собес
Грейд: #middle
Этапы: Тех интервью -> системный дизайн -> интервью с Тим лидом
Вилка: 250+ на руки
Итог собеса: Не прошел 1 этап

Python:
1. почему только неизменяемые типы данных могут быть ключом словаря?
2. Какой алгоритм используется для поиска по словарю? Какая сложность?
2.5. от каких типов данных можно посчитать hash?
3. Чем отличается по сложности вставка через insert и через append в список? Какая сложность у каждого?
4. Что такое GIL?
5. Итераторы, генераторы? Как каждый из них взаимодействует с памятью?

Spark:
1. Какие методы оптимизации использовал?
2. Что такое parquet?
3. Как понять, сколько будет тасок после считывания parquet в спарк(число row group в паркете)?
4. Когда мы выделяем память на каждый экзекьютор, какая память на что распределяется и как на это повлиять?
5. Типы джоинов в spark? Как оптимизатор решает, когда какой выбрать?
6. Coalesce и repartition, когда при coalesce будет shuffle?

Airflow:
1. Какие операторы использовал?
2. Что такое сенсоры?
3. Что такое xcom?

Кубер:
1. просто скипнул вопросы

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

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

#собеседование #подписчик


Лучшее время на работе 🚬💅


Бизнесу не всегда нужны истинные данные

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

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

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

В финансовом секторе, особенно в окологосушных банках (почти все в РФ) ситуация немного другая. Здесь наоборот цена ошибки дорогая. Отсюда и медленные процессы, куча проверок и бюрократии.

Оба подхода имеют право на жизнь. Как всегда нужно искать баланс.


Обзор собеседования

Должность: Data Engineer
Компания: Лига цифровой экономики на проект Альфа
Тип собеса: #тех_собес
Грейд: #middle
Вилка: 250 на руки
Итог собеса: Прошел
* отказ при оформлении на уровне банка

Вопросы:
1. Отличие БД от ХД
2. Что такое партиционирование и шардирование
3. На какие типы делятся индексы (кластеризованный и некластеризованный)
4. физ join и алгоритмы их под капотом
5. ACID - определение каждой буквы
6. Уровни изоляции и какие аномалии решают

Кейсы:
7. Что бы делал при такой ситуации:
Пайплайн данных, новые данные приходят ночью, во вторник объем данных на входе увеличивается в 5 раз, что замедляют работу пайплайна.
8. Пришел заказчик попросил сделать витрину, ты понимаешь что у вас нет столько ресурсов или по другим причинам не можешь сделать эту задачу. Как ты будешь это обсуждать с заказчиком?

Задачи:
1. Выбрать name сотрудников, получающих зарплату больше своих руководителей.
Атрибуты в таблице table : employee_id, name, department, id_master, salary

2. В таблице имена не могут повторяться.
Задача: найдите имена и количество двоек у тех учеников, у которых больше 10 пятерок.
Соответственно надо получить табличку с именем и количеством двоек.

3.
employees (
id INT PRIMARY KEY,
name VARCHAR(100),
manager_id INT REFERENCES employees(id) -- NULL для топ-менеджера
)
Задание:
Для каждого сотрудника вывести:
его имя,
уровень в иерархии (0 для топ-менеджера),
Отсортировать по уровню, затем по имени.

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

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

#собеседование #подписчик

Показано 20 последних публикаций.