🎁 Зарегистрируйтесь и получите до 30 минут бесплатного использования онлайн-ИИ. Банковская карта не требуется.

Вопросы и ответы для собеседования на позицию Data Engineer (2026): SQL, пайплайны и Spark

October 9, 2026
20 вопросов для собеседования на позицию data engineer с ответами: оконные функции SQL с проверенными примерами, ETL против ELT, идемпотентные пайплайны, качество данных, моделирование, shuffle в Spark и Airflow.
Вопросы и ответы для собеседования на позицию Data Engineer (2026): SQL, пайплайны и Spark
вопросы для собеседования data engineer
собеседование по data engineering
оконные функции sql на собеседовании
etl против elt
вопросы по spark на собеседовании

Собеседования по Data Engineering проверяют три вещи: SQL, умение проектировать и запускать пайплайны данных, а также способность рассуждать о масштабе и отказах. Ниже — 20 вопросов с ответами, которые можно адаптировать под себя, в том порядке, в котором кандидаты обычно с ними сталкиваются. Примеры SQL были выполнены на небольшой тестовой базе перед публикацией, и показанные результаты — это реальный вывод.

Вопросы по SQL

1. Найдите вторую по величине зарплату в каждой компании или по всей таблице

Используйте DENSE_RANK, чтобы одинаковые значения делили один ранг и «вторая по величине» означала второе уникальное значение.

SELECT name, salary
FROM (
  SELECT name, salary, DENSE_RANK() OVER (ORDER BY salary DESC) AS r
  FROM employees
) t
WHERE r = 2;

На таблице с зарплатами 150, 130, 130, 110, 90, 70 это вернёт двух человек с зарплатой 130. Объясните, почему вы выбрали DENSE_RANK, а не RANK (который пропускает номера после одинаковых значений) и не ROW_NUMBER (который произвольно разрывает связи).

2. Два самых высокооплачиваемых сотрудника в каждом отделе

SELECT dept, name, salary
FROM (
  SELECT dept, name, salary,
         RANK() OVER (PARTITION BY dept ORDER BY salary DESC) AS r
  FROM employees
) t
WHERE r <= 2;

PARTITION BY перезапускает ранжирование для каждого отдела. Упомяните, что при одинаковых зарплатах RANK может вернуть больше двух строк.

3. Накопительный итог по каждому клиенту

SELECT customer, order_date, amount,
       SUM(amount) OVER (PARTITION BY customer ORDER BY order_date) AS running_total
FROM orders;

Для клиента с заказами 10, 20 и 30 по возрастающим датам накопительные итоги будут 10, 30 и 60.

4. Удалите дублирующиеся строки, оставив первую

SELECT id, user_id
FROM (
  SELECT id, user_id,
         ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY id) AS rn
  FROM events
) t
WHERE rn = 1;

Здесь уместен ROW_NUMBER, потому что вам нужна ровно одна строка на группу. Будьте готовы сказать, как бы вы решали, какой дубликат оставить в реальной таблице (по последней метке времени, по самой полной записи).

5. Изменение относительно предыдущей строки

SELECT order_date, amount,
       amount - LAG(amount) OVER (ORDER BY order_date) AS change
FROM orders
WHERE customer = 'A';

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

6. В чём разница между WHERE и HAVING?

WHERE фильтрует строки до группировки, а HAVING фильтрует группы после агрегации. Агрегат вроде COUNT(*) в WHERE использовать нельзя.

7. Как ускорить медленный запрос?

  1. Посмотрите на план запроса, прежде чем что-либо менять.
  2. Проверьте, что фильтры могут использовать индекс и что функции над столбцом этому не мешают.
  3. Сократите объём сканируемых данных: выбирайте только нужные столбцы, фильтруйте как можно раньше и партиционируйте большие таблицы по дате.
  4. Замените повторяющиеся подзапросы на соединения или общие табличные выражения и проверьте, не размножаются ли строки в соединениях случайно.
  5. Для хранилищ проверьте ключи кластеризации или сортировки и то, сколько данных читает каждый запрос.

Вопросы по проектированию пайплайнов

8. ETL или ELT?

ETL преобразует данные перед загрузкой. ELT сначала загружает сырые данные, а преобразует их уже внутри хранилища. ELT распространён в облачных хранилищах, потому что хранение дешёвое, сырые данные остаются доступными для повторной обработки, а преобразования можно версионировать как SQL. ETL по-прежнему имеет смысл, когда данные нужно очистить или замаскировать до того, как они попадут в хранилище, например чтобы удалить персональные данные.

9. Пакетная обработка или потоковая?

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

10. Что такое идемпотентный пайплайн и почему это важно?

Его повторный запуск даёт тот же результат, что и однократный. Это важно, потому что задания падают и перезапускаются. Чтобы сделать загрузку идемпотентной, пишите по партициям и перезаписывайте эту партицию либо используйте upsert со стабильным ключом, чтобы повторный запуск не создавал дубликаты.

11. Как вы обрабатываете опоздавшие данные или данные, пришедшие не по порядку?

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

12. Как вы проектируете систему с учётом отказов и повторных запусков?

Делайте шаги маленькими, идемпотентными и независимо перезапускаемыми. Храните состояние вне задания. Настраивайте оповещения не только об ошибках, но и о пропавших или опоздавших данных. Ограничьте число повторных попыток, а повторяющиеся сбои отправляйте туда, где их увидит человек.

13. Как вы проверяете качество данных?

ПроверкаПример
ПолнотаКоличество строк совпадает с источником в пределах допуска
УникальностьВ первичном ключе нет дубликатов
ВалидностьЗначения попадают в ожидаемый диапазон или набор
СвежестьСамая новая метка времени достаточно свежая
СогласованностьИтоги совпадают в связанных таблицах

Запускайте проверки внутри пайплайна и падайте как можно раньше, чтобы плохие данные не доходили до отчётов.

Вопросы по моделированию и хранению данных

14. Что такое схема «звезда»?

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

15. Что такое медленно меняющиеся измерения?

Это атрибуты измерений, которые меняются со временем, например адрес клиента. Тип 1 перезаписывает старое значение и теряет историю. Тип 2 добавляет новую строку с датами начала и окончания, поэтому история сохраняется. Скажите, какой тип вы выберете для какого атрибута и почему.

16. Как партиционировать большую таблицу?

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

17. Какие форматы файлов вы используете для аналитики и почему?

Колоночные форматы, такие как Parquet, хранят каждый столбец вместе, поэтому запросы, читающие несколько столбцов, пропускают остальные и хорошо сжимаются. Строчные форматы, такие как CSV или JSON, легко создавать и читать, но на больших объёмах они медленные и занимают много места.

Вопросы по распределённой обработке

18. Что такое shuffle в Spark и почему он дорогой?

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

19. Как вы справляетесь с перекосом данных?

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

20. Что делает оркестратор вроде Airflow?

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

Как готовиться

  1. Отработайте шаблоны оконных функций выше, пока не сможете писать их не подглядывая.
  2. Подготовьте рассказ об одном пайплайне, который вы построили: объём, сбои, с которыми столкнулись, и что вы изменили.
  3. Будьте готовы нарисовать простую архитектуру на доске и объяснить, что происходит, когда какой-то шаг падает.
  4. Пересмотрите своё резюме: по каждому инструменту в нём могут задать вопрос.

Для дополнительной практики смотрите наши руководства по вопросам на собеседовании по Kafka, вопросам на собеседовании по Databricks, вопросам на собеседовании по Snowflake и вопросам на собеседовании по системному дизайну.

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

Практикуйте свои ответы с YesToTheOffer

Репетируйте вслух, получайте ответы, построенные на вашем резюме, и просматривайте расшифровку afterward. 30 бесплатных минут, без подписки.

iOS & Android — Скоро
Цены