Как происходит поддержка набора витрин таблиц в хранилище
Что проверяют
Понимаете ли вы, что витрина это продукт с потребителями и обязательствами, а не таблица, которую один раз собрали запросом. Интервьюер ждёт рассказа про свежесть, качество, изменения схемы и инциденты. Следом часто спрашивают, как вы узнаёте о поломке раньше, чем аналитик напишет в чат.
Как отвечать
Разложите поддержку на регулярные практики:
- код в Git и сборка через dbt или аналог: модели лежат SQL-файлами, зависимости задаются через
ref(), документация и lineage генерируются из проекта. Изменения идут через ревью, а CI собирает и тестирует только затронутые модели и их потомков (dbt build --select state:modified+); - оркестрация: Airflow, Dagster или другой планировщик с явными зависимостями от загрузки источников, ретраями и сроком готовности витрины;
- инкрементальная загрузка: большие витрины не пересобирают целиком, а дописывают новые партиции. Загрузка идемпотентна, чтобы перезапуск за день не давал дублей, и умеет делать backfill за период;
- качество данных: тесты
not_null,unique,relationships,accepted_values, проверка свежести источников, контроль числа строк относительно прошлого дня. Упавший тест блокирует публикацию или шлёт алерт дежурному; - изменения схемы: новые колонки добавляются совместимо, удаление и переименование идут через период депрекации с предупреждением потребителей;
- гигиена: у каждой витрины есть владелец и описание полей, а витрины, которые никто не читает, находят по логам запросов и выводят из эксплуатации.
Приведите пример из своей практики: сколько витрин поддерживали, на каком стеке, какой инцидент поймали тестами и что поменяли после него.
Где спотыкаются
Отвечают пересказом ETL: извлекли, преобразовали, загрузили. Про эксплуатацию, ради которой задан вопрос, не говорят ничего.
Предлагают ускорять медленные витрины индексами. В колоночных хранилищах вроде ClickHouse или Greenplum работают другие рычаги: ключ сортировки, партиционирование, ключ распределения, предагрегация.
Не думают о потребителях: переименовывают колонку и ломают дашборды и выгрузки, о которых не знали, потому что lineage никто не вёл.