Співбесіда дата-інженера сильно спирається на SQL і на те, чи переживуть ваші пайплайни запуск двічі, із запізненням або не по порядку. Будуть і питання з моделювання, де немає єдино правильної відповіді. Нижче — питання, які ставлять найчастіше, кожне з еталонною відповіддю.
До кожного питання — еталонна відповідь, з якою можна порівняти свою.
1
У чому різниця між ETL і ELT і чому переміг ELT?
Відповідь
ETL перетворює дані до завантаження у сховище — це мало сенс, коли зберігання й обчислення у сховищі були дорогими та негнучкими. ELT спершу вантажить сирі дані й трансформує їх уже всередині сховища його ж рушієм. В аналітиці переміг ELT, бо хмарні сховища зробили обчислення еластичними й відокремили їх від зберігання: маючи сирі дані, ви можете перезібрати вітрини при зміні вимог, а не переливати заново із систем-джерел, доступу до яких може вже й не бути.
2
Що таке star schema і коли її не варто застосовувати?
Відповідь
Зірка — це центральна таблиця фактів із числовими мірами, оточена денормалізованими вимірами, що описують контекст. Вона оптимізована під аналітичні запити: мало джойнів, передбачувана агрегація, зрозуміла BI-інструментам. Відмовляються від неї у чистому подієвому стрімінгу, у справді дослідницькій роботі з сирими подіями, а також коли колонкове сховище настільки ефективне, що широка денормалізована таблиця працює швидше й дешевше в підтримці.
3
Поясніть slowly changing dimensions, особливо Type 2.
Відповідь
SCD описує атрибути, що змінюються в часі, — наприклад, клієнт переїхав в інше місто. Type 1 перезаписує старе значення, втрачаючи історію. Type 2 вставляє новий рядок із датами дії та прапорцем актуальності, тому факт, приєднаний за сурогатним ключем, відображає атрибут таким, яким він був на момент події. Саме це дозволяє коректно відповісти на питання «які були продажі за регіонами торік», а не переприписати старі продажі новому регіону клієнта.
4
Що таке віконні функції і де вони кращі за GROUP BY?
Відповідь
Віконна функція рахує за набором рядків, повʼязаним із поточним, не згортаючи їх, тому деталізація рядка зберігається поруч з агрегатом. Це робить їх правильним інструментом для наростальних підсумків, ранжування всередині партиції, порівняння рядка із середнім по групі та зіставлення сусідніх подій через lag/lead. GROUP BY змусив би агрегувати, а потім джойнити назад до деталізації — більше коду, більше перемішування і вищий шанс помилитися.
5
Що означає ідемпотентність пайплайна і чому це важливо?
Відповідь
Ідемпотентність означає, що повторний запуск тієї самої задачі за той самий період дає той самий результат, а не дублює дані. Це важливо, бо ретраї неминучі: задача впала на середині, хтось перезапустив учорашній день, бекфіл наклався на плановий запуск. Звичайні реалізації — видалити й переписати цільову партицію або зробити merge за бізнес-ключем замість сліпого insert. Пайплайни, що працюють лише за рівно одноразового запуску, ламаються під час першого ж ретраю.
6
Як спроєктувати DAG в Airflow, який безпечно бекфілити?
Відповідь
Кожна задача має параметризуватися логічною датою виконання, а не «зараз», щоб запуск за стару дату читав і писав дані саме тієї дати. Задачі мають бути ідемпотентними, щоб перезапуск перезаписував свою партицію. Ставлять розумні ретраї з backoff і використовують max_active_runs та пули, щоб бекфіл за два роки не зʼїв усе сховище і не заморив продові запуски. Залежності між DAG-ами надійніше виражати перевіркою готовності даних, а не вгаданим розкладом.
7
Що таке shuffle у Spark і чому він дорогий?
Відповідь
Вузька трансформація на кшталт map чи filter працює в межах партиції й не потребує переміщення даних. Широка — groupBy, join, repartition — вимагає, щоб рядки з однаковим ключем опинилися на одному виконавці, а отже проміжні дані пишуться на диск і їдуть мережею: це і є shuffle. Він домінує в часі виконання, тому тюнінг зводиться до скорочення shuffle: бродкаст маленької сторони джойна, фільтрація до джойна і вибір партиціонування під те, як ви читаєте.
8
Що таке перекіс даних (skew) і як із ним боротися?
Відповідь
Перекіс — це коли на один ключ припадає непропорційно багато рядків, тому одна задача обробляє майже всі дані, поки решта кластера простоює: джоба годину стоїть на 99%. У Spark UI це видно як одна задача зі входом кратно більшим за сусідні. Лікується солінням гарячого ключа, щоб рознести його по партиціях, бродкастом меншої таблиці, щоб узагалі уникнути shuffle-джойна, і окремою обробкою відомих гарячих ключів окремо від довгого хвоста.
9
Чому Parquet, а не CSV чи JSON, і що дає партиціонування?
Відповідь
Parquet колонковий і стиснутий, тому запит, що читає три колонки з сорока, прочитає лише їх, а схема і статистики за колонками дозволяють рушію цілком пропускати групи рядків. CSV і JSON змушують щоразу сканувати й розбирати все. Партиціонування за колонкою, за якою ви фільтруєте, зазвичай за датою, дає рушію пропускати цілі директорії, але надмірне партиціонування народжує мільйони крихітних файлів, і накладні витрати на метадані зʼїдають усю вигоду.
10
Що насправді означає exactly-once у стрімінгу?
Відповідь
Справжня доставка рівно один раз наскрізним чином недосяжна; системи дають effectively-once обробку: дублікати можуть прийти, але спостережуваний результат такий, ніби повідомлення врахували один раз. Досягається ідемпотентним записом, дедуплікацією за ключем повідомлення або транзакційними приймачами, які атомарно комітять офсети разом із результатом. Заявити exactly-once, не назвавши механізм, завдяки якому це правда, — частий червоний прапорець на співбесіді.
11
Як обробляти дані, що запізнилися?
Відповідь
Спершу визначаються із семантикою: запис належить до часу, коли подія сталася, чи коли ви її отримали? Для аналітики зазвичай коректний event time, але тоді пайплайн має вміти перевідкрити й переписати вже опубліковану партицію. Watermark задає, скільки чекати до закриття вікна, а все, що прийшло пізніше, іде в коригувальний шлях або окрему таблицю запізнень. Проєктна помилка — мовчки викидати те, що запізнилося, бо цифри починають розходитися з джерелом і ніхто не знає чому.
12
Як тестувати якість даних і що саме перевіряти?
Відповідь
Тести виконуються кроками пайплайна і падають гучно, а не живуть дашбордом, на який ніхто не дивиться. Стандартний набір: свіжість, обсяг рядків відносно очікування, унікальність ключів, not-null на обовʼязкових колонках, посилальна цілісність між фактом і виміром, допустимі діапазони та переліки. Формалізують це через dbt tests або Great Expectations. Важливе проєктне рішення — які падіння блокують наступні задачі, а які лише алертять, бо блокування на будь-якій аномалії привчає людей ігнорувати алерти.
🦎
Прочитати відповіді недостатньо
На співбесіді ти говориш вголос під тиском. Кем поставить ті самі питання, оцінить кожну відповідь і покаже, що саме підтягнути.
Пройти інтерв'ю Data Engineer →Безкоштовно · 3 інтерв'ю на місяць