Skip to content

Вопросы на собеседовании: Analytics Engineer / Инженер аналитики

100 реальных вопросов с образцовыми ответами и пояснениями для уровня Junior.

Смотреть пример резюме: Analytics Engineer / Инженер аналитики

Тренировка флешкарточками

Интервальное повторение · Hunter Pass

Вопросы

Analytics Engineer превращает исходные данные из хранилища в проверенные и документированные модели, которыми можно пользоваться единообразно.

  • Дата-инженеры обычно строят загрузку данных и платформенную инфраструктуру, которая доставляет данные в хранилище.
  • Аналитики данных обычно интерпретируют подготовленные данные, отвечают на вопросы и создают отчёты.
  • Analytics Engineer отвечает за слой моделирования между ними с помощью SQL, dbt, проверок, документации и контроля версий.

Зачем это спрашивают: Интервьюер проверяет, понимает ли кандидат ответственность за надёжный слой моделирования.

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

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

Зачем это спрашивают: Интервьюер оценивает, знает ли кандидат назначение и составные части многомерного моделирования.

schemamodeling

Схема «звезда» размещает таблицу фактов в центре и напрямую соединяет её с таблицами измерений.

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

Зачем это спрашивают: Интервьюер проверяет, может ли кандидат описать структуру и ценность схемы «звезда».

schemamodelingsnowflake

Схема «снежинка» нормализует измерения в связанные таблицы, а схема «звезда» хранит измерения в более денормализованном виде.

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

Зачем это спрашивают: Интервьюер оценивает, понимает ли кандидат структурное различие и компромисс в удобстве использования.

modeling

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

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

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

modeling

Таблица измерений содержит описательные атрибуты, которые придают фактам бизнес-смысл.

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

Зачем это спрашивают: Интервьюер оценивает, понимает ли кандидат измерения как переиспользуемый аналитический контекст.

modeling

Гранулярность точно определяет, что представляет одна строка таблицы фактов.

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

Зачем это спрашивают: Интервьюер проверяет, считает ли кандидат гранулярность основой надёжной модели фактов.

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

  • Количество товара и выручка по позиции обычно аддитивны по товарам, клиентам и датам.
  • Остаток часто полуаддитивен, потому что его можно суммировать по счетам, но не по времени.
  • Коэффициенты обычно неаддитивны, поэтому их лучше вычислять из исходных мер.

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

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

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

Зачем это спрашивают: Интервьюер проверяет, понимает ли кандидат причины разделения идентичности в источнике и хранилище.

Согласованное измерение является общим измерением с едиными ключами и определениями для нескольких таблиц фактов или процессов.

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

Зачем это спрашивают: Интервьюер оценивает, понимает ли кандидат, как общие измерения обеспечивают согласованность доменов.

Измерение даты задаёт единый календарный словарь для анализа фактов во времени.

  • Оно может содержать день, неделю, месяц, квартал, год, день недели и признак праздника.
  • Финансовые периоды и специальные бизнес-календари можно определить один раз и переиспользовать.
  • Факты соединяются с ним по ключу даты, чтобы отчёты применяли одинаковые временные группировки.

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

transactionsmodeling

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

  • Примерами служат позиция заказа, платёж, отправка или клик по товару.
  • Обычно она содержит меры события и ключи измерений, актуальных в момент события.
  • Атомарные факты дают гибкость, потому что потребители могут агрегировать их по-разному.

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

modelingsnapshot

Периодическая таблица фактов-снимков фиксирует состояние процесса через регулярные интервалы.

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

Зачем это спрашивают: Интервьюер проверяет, отличает ли кандидат наблюдения состояния от транзакций.

modelingsnapshot

Накапливающая таблица фактов-снимков отслеживает один экземпляр процесса через несколько этапов.

  • Строка может представлять заказ от создания до оплаты, отправки и доставки.
  • Даты этапов и поля статуса обновляются по мере продвижения процесса.
  • Её гранулярность составляет одну строку на экземпляр процесса, а не на этап.

Зачем это спрашивают: Интервьюер оценивает, понимает ли кандидат шаблон фактов для анализа жизненного цикла.

scd

Тип 1 перезаписывает изменившийся атрибут, а тип 2 сохраняет историю, создавая новую версию строки.

  • Type 1 подходит для исправлений или атрибутов, чьи прошлые значения не важны для анализа.
  • Type 2 использует даты действия, признак текущей строки или похожие поля для определения версий.
  • Факты могут ссылаться на суррогатный ключ, действовавший в момент события.

Зачем это спрашивают: Интервьюер проверяет, может ли кандидат объяснить историческое поведение обоих типов SCD.

sqlqueriesconcurrency

Полезный логический порядок выглядит так: FROM и JOIN, WHERE, GROUP BY, HAVING, SELECT, DISTINCT, ORDER BY и LIMIT.

  • FROM и JOIN формируют входные строки до фильтрации на уровне строк.
  • GROUP BY создаёт группы, а HAVING фильтрует их до формирования результата.
  • Оконные функции вычисляются после группировки и HAVING, но до окончательной сортировки результата.
  • Псевдонимы из SELECT могут быть недоступны на более ранних логических этапах.

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

queriesaggregation

WHERE фильтрует строки до агрегации, а HAVING фильтрует группы после неё.

  • Условие по дате или статусу исходных строк обычно относится к WHERE.
  • Условие вроде COUNT(*) больше десяти относится к HAVING.
  • Фильтрация через WHERE меняет набор строк, участвующих в каждом агрегате.

Зачем это спрашивают: Интервьюер проверяет, правильно ли кандидат размещает условия уровня строк и агрегатов.

schemaaggregation

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

  • GROUP BY определяет, какие входные строки сворачиваются в одну строку результата.
  • Если выбранный столбец меняется внутри группы, вернуть одно значение невозможно.
  • Явная группировка понятнее и переносимее, чем исключения отдельных диалектов.

Зачем это спрашивают: Интервьюер оценивает, понимает ли кандидат связь ключей группировки и результата агрегации.

fundamentals

Большинство SQL-агрегатов игнорирует NULL, а COUNT(*) считает строки независимо от наличия NULL.

  • COUNT(column) считает только строки, где столбец не равен NULL.
  • SUM(column) и AVG(column) используют значения без NULL и могут вернуть NULL, если таких значений нет.
  • Замена NULL на ноль допустима только тогда, когда ноль имеет корректный бизнес-смысл.

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

joinsmonitoring

Раздувание строк при JOIN возникает, когда соединение создаёт несколько выходных строк для одной строки на уровне гранулярности меры.

  • При соединении заказа с несколькими позициями столбцы уровня заказа повторяются для каждой позиции.
  • Суммирование повторённой выручки затем завышает итог.
  • Перед агрегацией нужно понимать кардинальность соединения и гранулярность обоих наборов.

Зачем это спрашивают: Интервьюер оценивает, распознаёт ли кандидат дублирование, вызванное соединениями.

Закрытые вопросы

  • 21

    Когда следует использовать INNER JOIN вместо LEFT JOIN?

    joins
  • 22

    Что такое общее табличное выражение, или CTE?

    cte
  • 23

    Чем оконная функция отличается от GROUP BY?

    aggregationwindow-functions
  • 24

    Что делают PARTITION BY и ORDER BY внутри оконной функции?

    partitioningwindow-functions
  • 25

    Чем отличаются ROW_NUMBER, RANK и DENSE_RANK?

    window-functions
  • 26

    Когда полезны LAG и LEAD?

    window-functions
  • 27

    Как вычислить накопительный итог с помощью оконной функции?

    window-functions
  • 28

    Что такое условная агрегация?

    aggregation
  • 29

    Как группировать даты по месяцам в аналитическом SQL?

    sql
  • 30

    Что делает COALESCE и когда его нужно применять осторожно?

    queries
  • 31

    Что такое модель dbt?

    dbt
  • 32

    Что делает ref в dbt?

    dbt
  • 33

    Что делает source в dbt?

    dbt
  • 34

    Зачем в проектах dbt используют staging-, intermediate- и mart-слои?

    dbt
  • 35

    Какие основные материализации есть в dbt?

    dbt
  • 36

    Что такое generic data tests в dbt?

    genericsdbt
  • 37

    Чем singular data test отличается от generic data test в dbt?

    dbtgenerics
  • 38

    Что должна описывать документация dbt?

    documentationdbt
  • 39

    Что такое lineage в dbt и как он формируется?

    lineagedbt
  • 40

    Что такое exposure в dbt?

    dbt
  • 41

    Что такое облачное хранилище данных?

    warehouse
  • 42

    Почему колоночное хранение полезно для аналитики?

    schema
  • 43

    Какие общие концепции есть у Snowflake, BigQuery и Redshift?

    snowflakebigqueryredshift
  • 44

    Чем ETL отличается от ELT?

    etl
  • 45

    Что такое витрина данных?

    data-marts
  • 46

    Что такое семантический слой?

    semantic-layer
  • 47

    Что такое слой метрик?

    monitoring
  • 48

    Почему аналитический код следует хранить в Git?

    git
  • 49

    Что должен содержать pull request с изменением аналитической модели?

    code-review
  • 50

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

    quality
  • 51

    Вы получили raw-таблицы orders и order_items. Как структурировать первые dbt-модели?

    dbt
  • 52

    Как смоделировать fact_orders для дашборда выручки?

  • 53

    Как построить customer dimension из CRM и данных пользователей приложения?

  • 54

    Raw product events содержат retries и duplicate event IDs. Как построить чистую events model?

  • 55

    Как смоделировать source freshness для ежедневных финансовых данных из Fivetran?

  • 56

    Join orders и payments удваивает revenue. Как исправить модель?

    joins
  • 57

    Как спроектировать star schema для дашборда продаж по product, customer и day?

    schemamodelingdesign
  • 58

    Customers могут относиться к нескольким marketing segments. Как смоделировать связь?

  • 59

    Как отслеживать изменения плана customer во времени через dbt?

    dbt
  • 60

    Дашборд должен показывать даты с нулём orders. Как смоделировать результат?

  • 61

    Как написать SQL для накопительной ежедневной revenue?

    sql
  • 62

    Как выбрать последнюю status row для каждого order?

  • 63

    Как вычислить семидневную moving average signups?

  • 64

    Как посчитать funnel signup-to-purchase из events table?

    funnel
  • 65

    Как построить monthly signup cohort retention table?

    retentioncohorts
  • 66

    Как сравнить purchase conversion по acquisition channel?

  • 67

    Как выделить sessions из web events без session ID?

    sessions
  • 68

    Как посчитать first-touch attribution из marketing events?

  • 69

    Как посчитать процент каждого product от monthly revenue?

  • 70

    Как дедуплицировать customer records, сохранив лучшую доступную строку?

    queries
  • 71

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

    conversionsqlfundamentals
  • 72

    Daily signups различаются между SQL в BigQuery и Looker dashboard. Как проверить timezone?

    sqlbigquerybi
  • 73

    Когда стоит сделать dbt-модель incremental вместо полной пересборки table?

    dbt
  • 74

    Как написать incremental filter для модели по updated_at?

  • 75

    Late-arriving events отсутствуют в incremental model. Как это исправить?

  • 76

    Incremental model создаёт duplicate orders после повторных запусков. Как это исправить?

  • 77

    В существующую incremental model нужно добавить новый source column. Как выпустить изменение?

    schema
  • 78

    Как выполнить backfill данных за год в incremental model без одного дорогого full refresh?

    backfill
  • 79

    Как проверить idempotency dbt-модели?

    dbtidempotency
  • 80

    Какие dbt tests стоит первыми добавить к новой fact_orders model?

    dbt
  • 81

    Relationships test между orders и customers падает. Как его отладить?

  • 82

    Source добавил новый order status, и accepted_values test падает. Что делать?

  • 83

    Как написать singular dbt test для net revenue?

    dbt
  • 84

    Source freshness check dbt падает перед утренним build. Как реагировать?

    dbt
  • 85

    Unique test падает только в CI. Как его отладить?

  • 86

    Как проверить, что сумма order остаётся в разумном диапазоне?

  • 87

    Как настроить GitHub Actions checks для dbt pull request?

    ci-cddbtcode-review
  • 88

    Два dashboards показывают разные значения одной conversion metric. Как их согласовать?

    monitoring
  • 89

    Finance считает dbt revenue выше total платёжного процессора. Как исследовать расхождение?

    dbtconcurrency
  • 90

    Fivetran сообщает о миллионе source rows, но staging model содержит меньше. Как найти разницу?

  • 91

    Funnel conversion резко падает после tracking release. Как его отладить?

    funnel
  • 92

    Monthly active users различаются между query к users table и events query. Как выбрать правильный расчёт?

    queries
  • 93

    Как открыть governed revenue metric в Looker или Lightdash?

    monitoringbi
  • 94

    Какую документацию добавить перед публикацией dbt model для analysts?

    documentationdbt
  • 95

    Как добавить dbt exposure для executive revenue dashboard?

    dbt
  • 96

    Pull request меняет общую customer model. Как оценить downstream impact?

    code-review
  • 97

    Что проверять при review pull request с dbt model?

    code-reviewdbt
  • 98

    Вы прототипировали metric в Hex через DuckDB. Как превратить её в production dbt model?

    monitoringdbtprototypes
  • 99

    API source изменил OpenAPI schema. Как безопасно обновить analytics models?

    openapischema
  • 100

    Как вывести из эксплуатации dbt model, у которой остаются downstream dashboards и notebooks?

    dbt