Skip to content

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

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

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

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

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

Вопросы

dbt

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

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

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

dbt

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

  • View подходит для легкой логики, которая всегда должна отражать актуальные входные данные, но переносит вычисления на каждый запрос потребителя.
  • Table подходит для дорогих преобразований, когда полная пересборка приемлема, а быстрые downstream-чтения важны.
  • Incremental ограничивает обработку изменившимися данными, но требует надежной границы изменений и идемпотентной логики обновления.
  • Ephemeral встраивает переиспользуемый SQL как CTE, не занимая хранилище, но может порождать крупные скомпилированные запросы.

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

dbt

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

  • Каждый зависимый узел получает SQL ephemeral-модели как CTE, поэтому общая дорогая логика может вычисляться многократно.
  • Глубокие цепочки могут превысить ограничения сложности запросов в хранилище и затруднить чтение планов выполнения.
  • Ephemeral-модель нельзя запросить напрямую для проверки или передать инструменту, которому нужна физическая таблица.
  • View или table предпочтительнее, когда переиспользование, наблюдаемость или независимый доступ важнее экономии хранилища.

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

distinctwarehousedbt

Jinja рендерит SQL и строит граф до того, как получившийся запрос выполняется в хранилище.

  • Функции ref, source, var и config разрешаются во время компиляции модели в dbt.
  • Вызову run_query нужно активное соединение с хранилищем, поэтому его следует ограждать execute для безопасного парсинга.
  • SQL-выражения в отрендеренном результате вычисляет хранилище, а не Jinja.
  • Смешение этих фаз может породить зависящие от окружения манифесты или макросы, падающие в командах только с парсингом.

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

algorithmsoopdbt

Хороший dbt-макрос централизует устойчивый шаблон преобразования, сохраняя явными входы, выходной SQL и побочные эффекты.

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

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

warehousedbt

Adapter dispatch выбирает специфичную для хранилища реализацию макроса за единым общим интерфейсом.

  • Вызывающий код использует общее имя макроса, а dbt ищет реализацию в настроенных пространствах имен и текущем адаптере.
  • Реализация по умолчанию может содержать переносимый SQL, а варианты BigQuery или Snowflake нужны только при различиях синтаксиса или поведения.
  • Dispatch убирает условные проверки адаптера из бизнес-моделей и позволяет проектам осознанно переопределять поведение пакета.
  • Переносимость все равно требует тестов на каждом поддерживаемом адаптере, поскольку эквивалентный синтаксис может различаться типами или семантикой null.

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

dependenciesdbtdecision-making

К пакету dbt следует относиться как к версионируемому production-коду с узкой и проверенной причиной внедрения.

  • Нужно оценить, решают ли его макросы повторяющиеся задачи, эффективно ли компилируются на целевом адаптере и имеют ли стабильные интерфейсы.
  • Совместимые версии следует фиксировать в зависимостях и читать release notes перед обновлением, чтобы избежать неожиданных изменений SQL.
  • Обновления пакета нужно проверять в CI на репрезентативных моделях и просматривать скомпилированный SQL важных макросов.
  • Локальный код проекта предпочтительнее, если зависимость велика, плохо поддерживается или нужна ради одного простого преобразования.

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

dbt

dbt seeds подходят для небольших, редко меняющихся справочных наборов данных, которым место в системе контроля версий.

  • Хорошие примеры включают маппинг стран, управляемые списки категорий и тестовые фикстуры, ревьюимые вместе с проектом.
  • Типы столбцов следует задавать явно, если вывод хранилища может изменить коды, даты или ведущие нули.
  • Крупные, чувствительные, часто обновляемые или внешне управляемые данные должны поступать через ingestion-процесс, а не CSV-коммит.
  • Seed все равно требует владельца, тестов и процесса изменений, поскольку downstream-модели могут считать его контрактом.

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

snapshotdbt

Стратегия timestamp обнаруживает изменения по надежному столбцу updated_at, а check сравнивает выбранные столбцы источника.

  • Timestamp проще и хорошо масштабируется, если каждое значимое изменение продвигает достоверную временную метку источника.
  • Check полезна без такой метки, но требует осознанного выбора check_cols и большего объема сравнений.
  • Включение изменчивых или незначимых столбцов в check_cols создает ненужные исторические версии.
  • Ни одна стратегия не безопасна, если исправления источника приходят без изменения временной метки или сравниваемых значений.

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

snapshotdbt

dbt snapshot хранит интервалы версий через dbt_valid_from и dbt_valid_to с настраиваемой обработкой удаленных исходных строк.

  • Новая обнаруженная версия закрывает предыдущий интервал и вставляет текущее состояние для того же уникального ключа.
  • Уникальный ключ должен стабильно определять одну логическую сущность, иначе история ошибочно разделится или перезапишется.
  • Физические удаления можно игнорировать, инвалидировать или представлять новыми записями в зависимости от конфигурации snapshot и версии dbt.
  • Downstream-соединения должны сопоставлять время события с интервалом действия, если нужна историческая атрибуция.

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

dbtidempotency

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

  • Ее unique_key должен совпадать с гранулярностью результата, а выбранная стратегия должна обновлять или заменять строки на этом уровне.
  • Инкрементальный предикат должен включать все способные измениться записи, обычно с ограниченным перекрытием для опоздавших данных.
  • Преобразования не должны зависеть от времени запуска, если эти значения не стабильны или не сохраняются намеренно.
  • Повторная обработка перекрытия должна быть безопасной, поэтому слепой append обычно не подходит для изменяемых событий.

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

Incremental-стратегии различаются областью целевой таблицы, которую они переписывают, и требованиями к ключам или партициям.

  • Append только вставляет выбранные строки, поэтому дешевле всего для неизменяемых данных и небезопасен при обновлениях или повторной обработке.
  • Merge обновляет совпавшие уникальные ключи и вставляет новые, а delete plus insert заменяет совпавшие ключи с более широкой поддержкой адаптеров.
  • Insert overwrite заменяет целые партиции и хорошо работает, когда партиции служат надежными единицами пересчета.
  • Microbatch делит временной диапазон на ограниченные пакеты, улучшая возобновляемость и параллелизм для очень крупных событийных наборов.

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

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

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

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

dbt

on_schema_change определяет, как dbt согласует выбранные столбцы модели с существующей incremental-таблицей, но не выполняет backfill значений.

  • ignore оставляет целевую схему без изменений, а fail останавливает запуск при обнаружении различия.
  • append_new_columns добавляет новые выбранные столбцы, не удаляя старые.
  • sync_all_columns синхронизирует добавления, удаления и поддерживаемые изменения типов, но может быть дорогим в некоторых хранилищах.
  • В существующих строках новые столбцы могут остаться пустыми или старыми, поэтому full refresh или явный backfill остается отдельным решением.

Зачем это спрашивают: Сильный ответ отличает согласование схемы от пересчета исторических данных.

dbt

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

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

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

dbt

Контракт модели dbt при построении проверяет объявленные имена выходных столбцов и поддерживаемые типы данных.

  • Он дает downstream-потребителям явный структурный интерфейс и заставляет несовместимые изменения схемы завершаться ошибкой заранее.
  • Ограничения можно объявить, но фактическое принудительное применение зависит от хранилища и типа ограничения.
  • Контракты не доказывают семантическую корректность, свежесть, уникальность или допустимые значения без дополнительных тестов и SLA.
  • Версионированные модели подходят, когда намеренно несовместимый интерфейс должен временно сосуществовать с текущим для миграции потребителей.

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

dbt

Полезный dbt exposure описывает реальный downstream-артефакт, его зависимости, владельца, тип и бизнес-критичность.

  • depends_on должен ссылаться на модели или метрики, действительно питающие дашборд, ноутбук, приложение или reverse-ETL-синхронизацию.
  • Владелец и maturity делают lineage применимым, показывая, кто согласует изменения и насколько тщательно нужно защищать артефакт.
  • Ссылки на статус или URL связывают сгенерированную документацию с потребителем и его поверхностью мониторинга.
  • Покрытие exposures приносит пользу, когда CI использует lineage для определения затронутых потребителей, а не когда записи остаются декоративными.

Зачем это спрашивают: Сильный ответ рассматривает exposures как исполнимые downstream-контракты, а не пассивную документацию.

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

  • warn_after может обозначать раннее ухудшение, а error_after представляет нарушенное обязательство и должен проваливать соответствующую проверку.
  • loaded_at_field должен отражать доступность после загрузки, а не несвязанное время бизнес-события.
  • Пороги должны учитывать частоту источника, часовой пояс, выходные и известные окна доставки вместо одного глобального значения.
  • Exposures связывают каждое правило freshness с дашбордами, анализами Hex или reverse-ETL-аудиториями, чьи SLA от него зависят.

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

dbt

Slim CI сравнивает текущий проект с предыдущим манифестом, строит измененные узлы и выбранных потомков, а неизмененные ссылки направляет в существующее окружение.

  • State-селекторы вроде state:modified находят изменения графа или конфигурации, записанные в артефактах.
  • Оператор plus может включить downstream-потомков, чье поведение способно измениться из-за измененного предка.
  • defer разрешает ref для непостроенных моделей через стабильное окружение сравнения, избегая полной пересборки хранилища в CI.
  • CI должен использовать совместимые манифесты и учитывать макросы, seeds, переменные и косвенный выбор тестов, способные расширить область влияния.

Зачем это спрашивают: Сильный ответ объясняет, как артефакты и lineage сокращают работу CI без ослабления покрытия изменений.

dbt

dbt Core предоставляет CLI-фреймворк преобразований, а dbt Cloud добавляет управляемый control plane для разработки, расписаний, метаданных и контролируемого выполнения.

  • Core дает гибкость развертывания, но оставляет команде оркестрацию, учетные данные, хранение артефактов и среду разработки.
  • Cloud предоставляет управляемые jobs, IDE, контроль окружений, логи и платформенные функции, доступность которых зависит от тарифа.
  • Оба запускают dbt-проекты в хранилище, поэтому дизайн моделей и производительность SQL остаются ответственностью команды.
  • Выбор должен учитывать governance, интеграции, стоимость и операционный ownership, а не предположение, что один вариант меняет семантику dbt.

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

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

  • 21

    Почему гранулярность таблицы фактов нужно объявлять до выбора измерений и мер?

    modeling
  • 22

    Когда измерение должно использовать SCD Type 1?

  • 23

    Как SCD Type 2 сохраняет историю и что делает его реализацию корректной?

  • 24

    Когда SCD Type 3 полезен по сравнению с Type 1 или Type 2?

  • 25

    Когда связь многие ко многим требует bridge table в dimensional modeling?

  • 26

    Что такое factless fact table и когда она предпочтительнее флагов в измерении?

    modeling
  • 27

    Чем различаются таблицы фактов periodic snapshot и accumulating snapshot?

    modelingsnapshot
  • 28

    Что такое conformed dimensions и role-playing dimensions и почему они важны?

  • 29

    Какие обязанности относятся к semantic layer, а не к отдельным дашбордам?

    semantic-layer
  • 30

    Как аддитивность метрик должна влиять на дизайн semantic layer?

    designmonitoring
  • 31

    Как semantic models, entities и metrics работают вместе в MetricFlow?

    monitoring
  • 32

    Как проектировать pre-aggregations в Cube для производительности без потери семантической корректности?

    aggregationdesignperformance
  • 33

    Как сохранить согласованность одной управляемой метрики между Looker и Hex?

    monitoringbi
  • 34

    Какой контракт должен существовать между аналитической моделью и reverse-ETL-синхронизацией?

    etl
  • 35

    Как DAG в Airflow для dbt-нагрузок должен определять границы задач?

    dbtairflow
  • 36

    Когда Airflow должен использовать расписания по времени, sensors или dataset-aware scheduling?

    jobsairflow
  • 37

    Чем модель assets в Dagster отличается от оркестрации, ориентированной на задачи?

    orchestration
  • 38

    Что делает retries и backfills безопасными в аналитическом workflow оркестрации?

    orchestrationbackfill
  • 39

    Как материализация и инкрементальность обменивают хранилище на вычисления в облачном warehouse?

    warehouse
  • 40

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

    partitioningbigqueryclustering
  • 41

    Какие решения в запросах и моделях снижают стоимость BigQuery в масштабе?

    queriesbigquerydesign
  • 42

    Как взаимодействуют pruning микропартиций и clustering keys в Snowflake?

    partitioningsnowflakeclustering
  • 43

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

    warehousesnowflakescaling
  • 44

    Как следует сочетать generic-, singular- и unit-тесты в dbt?

    unitgenericsdbt
  • 45

    Когда Great Expectations дает ценность сверх dbt tests?

    dbtdata-qualitytesting
  • 46

    Что Elementary добавляет в стек качества данных на основе dbt?

    qualitydbt
  • 47

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

    quality
  • 48

    Что аналитический CI/CD pipeline должен проверять перед merge изменения dbt?

    ci-cddbtvalidation
  • 49

    Как окружения и артефакты dbt должны поддерживать продвижение из CI в production?

    dbtartifacts
  • 50

    Как выбирать severity и пороги для проверок качества данных и freshness SLA?

    qualityseverity-priority
  • 51

    Как смоделировать monthly recurring revenue из событий lifecycle подписки?

  • 52

    Как смоделировать orders, payments, refunds и chargebacks без дублирования revenue?

  • 53

    Как присоединить facts к slowly changing customer dimension на дату события?

    joinsscd
  • 54

    Как определить revenue metric в Cube или dbt semantic layer для использования разными BI tools?

    monitoringdbtsemantic-layer
  • 55

    Как построить переиспользуемую identity map, если users представлены device, account и CRM identifiers?

  • 56

    Source предоставляет current account state и неполный event log. Как моделировать историю?

  • 57

    Два dbt-домена используют одну customer model, но имеют разные release schedules. Как установить contract?

    dbt
  • 58

    Как моделировать revenue в нескольких currencies?

  • 59

    Как построить daily inventory snapshot из событий движения stock?

    snapshot
  • 60

    Как подготовить customer audience model для reverse ETL через Hightouch или Census?

    etl
  • 61

    Join orders, items и promotions завышает gross merchandise value. Как его отладить?

    joins
  • 62

    Incremental dbt model внезапно создаёт duplicate customer records. Как найти причину?

    dbt
  • 63

    Rows исчезают между Airbyte source и dbt mart. Как их проследить?

    dbt
  • 64

    Upstream API меняет nested field с object на array. Как обновить pipeline?

    ci-cdapi
  • 65

    Facts приходят раньше dimension records, и relationships tests падают. Как моделировать late-arriving dimensions?

    testing
  • 66

    Fivetran history tables показывают больше records, чем source application. Как сверить counts?

  • 67

    Критичный dbt test падает во время production job. Как провести triage data-quality incident?

    incidentsdbt
  • 68

    Looker и Hex notebook расходятся в active customers. Как разрешить расхождение?

    conflictbi
  • 69

    В destination reverse-ETL audience на 20 процентов меньше users, чем в dbt. Как это отладить?

    etldbt
  • 70

    Daily metrics сдвигаются на один день для некоторых regions. Как отладить timezone?

    monitoring
  • 71

    dbt model в BigQuery сканирует несколько терабайт ради одного дня данных. Как её оптимизировать?

    bigqueryoptimizationdbt
  • 72

    Snowflake query делает spill в remote storage и работает медленно. Как её настроить?

    queriessnowflake
  • 73

    Warehouse join медленный, потому что оба inputs очень крупные. Как снизить стоимость?

    joinswarehouse
  • 74

    dbt model является ephemeral и встраивается во множество дорогих downstream queries. Что изменить?

    queriesdbt
  • 75

    dbt job занимает два часа, хотя большинство models малы. Как найти critical path?

    schedulingcommunicationdbt
  • 76

    Incremental model пропускает updates, приходящие на несколько дней позже. Как это исправить?

  • 77

    Как передавать source deletions через incremental dbt model?

    dbt
  • 78

    Schema change требует перестроить крупную incremental table. Как избежать небезопасного full refresh?

    schema
  • 79

    Как выполнить backfill событий за два года, не нарушив daily warehouse workloads?

    warehousebackfill
  • 80

    dbt snapshot быстро растёт и содержит частые false changes. Как его исправить?

    snapshotdbt
  • 81

    Как спроектировать dbt CI, чтобы pull request тестировал changed models без перестройки warehouse?

    code-reviewdesigntesting
  • 82

    Upstream team хочет переименовать column, используемый многими dbt models. Как управлять изменением?

    schemadbt
  • 83

    Source freshness SLA нарушен, но dbt transformations успешны. Что делать?

    dbt
  • 84

    Elementary сообщает о необычном падении daily rows. Как понять, является ли это реальным incident?

    incidents
  • 85

    Как внедрить строгие data tests в legacy mart со множеством существующих failures?

    testing
  • 86

    dbt deployment неожиданно меняет executive revenue. Как выполнить rollback и recovery?

    deploymentdbt
  • 87

    Вы владеете Airbyte или Fivetran connector, который регулярно не укладывается в sync window. Как повысить reliability?

  • 88

    Как настроить dbt Cloud environments для development, CI и production?

    configdbt
  • 89

    Cube dashboard выполняет дорогие повторяющиеся queries. Как улучшить performance semantic layer?

    queriesperformance
  • 90

    Looker dashboard медленный, хотя каждый tile кажется простым. Как провести исследование?

    bi
  • 91

    Warehouse spend удвоился после добавления нескольких dbt jobs. Как найти и контролировать cost?

    warehousedbt
  • 92

    Как выбрать partitioning и clustering для крупного event mart?

    clusteringpartitioning
  • 93

    Finance сообщает другой monthly revenue total, чем analytics mart. Как выполнить reconciliation?

  • 94

    Бизнес меняет определение active account. Как обновить metric без путаницы в historical reports?

    monitoring
  • 95

    Source outage оставил шесть часов пропусков в event table. Как восстановить downstream models?

  • 96

    Marketing запрашивает sensitive customer attributes в reverse-ETL sync. Как вы ответите?

    etl
  • 97

    Analyst строит ценную metric в Hex. Как перевести её в production?

    monitoring
  • 98

    Как мигрировать dbt project с BigQuery на Snowflake без изменения результатов metrics?

    snowflakebigquerymonitoring
  • 99

    Product team добавляет новую версию event с другими properties. Как развивать analytics model?

  • 100

    Stakeholder нужна срочная metric завтра, но один source неполный. Как ответственно её предоставить?

    stakeholder-managementcommunicationmonitoring