Economics & Time-Series Domain — DE Interview PrepЭкономика и временны́е ряды — Подготовка к DE-интервью

Fast-revision cheatsheet for Data Engineering interviews. Tailored for Senior/Lead Data Engineer. Шпаргалка для быстрого повторения перед Data Engineering интервью. Заточена под Senior/Lead Data Engineer.
Macro · Government · Survey · ForecastМакро · Госданные · Опросы · Прогнозы Vintages & Point-in-TimeВерсии и точка-во-времени Enterprise dataКорпоративные данные GAP topic — front-loadТема-пробел — в начало

1 · 60-second primer: what is economics/time-series data?1 · Вводная за 60 сек: что такое данные экономики и временны́е ряды?

A macro series is a labelled stream of observations over time, plus a heavy metadata stack. The data engineering twist that makes econ data different from your event/log work at Meta: the same period gets multiple values over time (revisions), and users need to ask "what did we know then?" not just "what's true now?"

Макроэкономический ряд — это помеченный поток наблюдений во времени плюс тяжёлый стек метаданных. Инженерный поворот, который отличает эконом-данные от работы с событиями/логами в Meta: один и тот же период получает несколько значений во времени (ревизии), и пользователям нужно спросить «что мы знали тогда?», а не только «что верно сейчас?»

series = (series_id, indicator, geography, unit, frequency, SA-flag, source, currency, base-year) obs = (series_id, observation_period, value, release_date, vintage_id, status) ^ what it describes ^ when published ^ which snapshot
series = (series_id, indicator, geography, unit, frequency, SA-flag, source, currency, base-year) obs = (series_id, observation_period, value, release_date, vintage_id, status) ^ что описывает ^ когда опубликовано ^ какой снэпшот

If you remember one thing: the natural grain of an observation is NOT (series_id, period) — it is (series_id, period, release_date/vintage). That single fact signals you "get" the domain.

Если запомнить одно: естественная гранулярность наблюдения — это НЕ (series_id, period), а (series_id, period, release_date/vintage). Этот единственный факт даёт понять, что ты «въехал» в домен.

Interviewer will probe"What does a macro dataset actually look like?" Answer with the two-table model above, then immediately volunteer the vintage grain. Use CPI as your worked example.
О чём спросит интервьюер«Как выглядит макроэкономический датасет?» Ответь с двухтабличной моделью выше, затем сразу скажи про гранулярность по версии. Используй CPI как рабочий пример.

2 · The indicators you must be able to name2 · Индикаторы, которые ты должен знать

IndicatorMeasuresFreq / lagRevision & notes
CPI (inflation)Consumer price changes / cost of living. Core = ex food & energy.Monthly, ~2wk lagLightly revised. PCE = Fed's preferred US gauge; PPI = producer prices.
GDPTotal economic output → the business-cycle headline.Quarterly, advance ~1moHeavily revised: advance→2nd→3rd→benchmark. Classic vintage example.
Unemployment / NFPLabour slack / monthly job creation (non-farm payrolls).Monthly, timelyNFP = one of the biggest market-movers.
PMISurvey diffusion index. >50 expansion, <50 contraction.Monthly, very timelyLeading indicator; survey data structurally.
Policy ratesFed funds / ECB / BoE base rate — the price of money.Event-driven (meetings)Step-function / effective-dated, not periodic.
AlsoRetail sales, industrial production, consumer confidence/sentiment, trade balance, housing starts, yields/curve.
ИндикаторЧто измеряетЧастота / лагРевизии и заметки
CPI (инфляция)Изменения потребительских цен / стоимость жизни. Core = без еды и энергии.Месячный, ~2 недели лагСлабо ревизируется. PCE = приоритетная метрика для Fed; PPI = цены производителей.
GDPОбщий объём экономики → главный заголовок бизнес-цикла.Квартальный, advance ~1месСильно ревизируется: advance→2nd→3rd→benchmark. Классический пример версий.
Unemployment / NFPБезработица / месячное создание рабочих мест (non-farm payrolls).Месячный, своевременноNFP = один из самых сильных двигателей рынка.
PMIИндекс диффузии из опросов. >50 расширение, <50 сжатие.Месячный, очень своевременноОпережающий индикатор; структурно данные из опросов.
Policy ratesFed funds / ECB / BoE ставка — цена денег.Event-driven (заседания)Ступенчатая функция / эффективная дата, не периодический.
ТакжеРозничные продажи, промышленное производство, уверенность/настроения потребителей, торговый баланс, начало строительства жилья, доходности/кривая.
GotchaReal vs nominal, level vs change, index vs rate. Nominal=current prices, real=inflation-adjusted (needs deflator + base year). Store the level; derive MoM/YoY with explicit transforms. Index(base=100) ≠ rate(%) ≠ count — they aggregate differently. Encode as unit metadata and validate.
ПодвохReal vs nominal, level vs change, index vs rate. Nominal=текущие цены, real=скорректировано на инфляцию (нужен дефлятор + базовый год). Хранить level; выводить MoM/YoY явными преобразованиями. Index(base=100) ≠ rate(%) ≠ count — они агрегируются по-разному. Кодируй как метаданные unit и валидируй.

3 · Vintages, revisions & point-in-time core3 · Версии, ревизии и точка-во-времени ядро

Definitions

Определения

  • Vintage: the snapshot of a series as it existed at a point in time.
  • Revision: a later release changes a value for a past period.
  • Point-in-time (PIT) / as-of: "what did we know on date X?"
  • Latest: "what is our best current estimate?"
  • Vintage (Версия): снэпшот серии, каким он существовал в точке времени.
  • Revision (Ревизия): поздний релиз меняет значение прошлого периода.
  • Point-in-time (PIT) / as-of: «что мы знали на дату X?»
  • Latest: «каково наше лучшее текущее оценочное значение?»

GDP for Q1 might read 2.1% (advance) → 2.4% (2nd) → 2.3% (3rd) → restated years later at benchmark revision. Each is a vintage.

GDP за Q1 может быть 2.1% (advance) → 2.4% (2nd) → 2.3% (3rd) → переоценён годами позже при benchmark-ревизии. Каждый — версия.

Why it matters

Почему важно

  • Overwriting destroys reproducibility & audit.
  • A model trained "as of 2024" must see the 2024 vintage — else look-ahead bias.
  • Quant backtests, nowcasting, regulators all need PIT.
  • Перезапись уничтожает воспроизводимость и аудит.
  • Модель, обученная «as of 2024», должна видеть версию 2024 — иначе look-ahead bias.
  • Квантовый бэктест, nowcasting, регуляторы — всем нужен PIT.
Your bridge: the bank factoring/default model lived on PIT correctness — you can't train on info unavailable at decision time. Same discipline, new axis.
Твой мост: банковская модель факторинга/дефолта жила на корректности PIT — нельзя обучать на информации, недоступной в момент решения. Та же дисциплина, новая ось.

Storage patterns

Паттерны хранения

PatternHow"Latest" =Trade-off
Append-only + vintage keyNever UPDATE; insert keyed by (series, period, release_date)window: max(release_date) per periodClean, auditable; larger volume
Bitemporal (SCD2)valid_from/to + system_from/tofilter both time axesFull correction-of-correction audit; complex queries
Vintage / real-time DBStore each vintage explicitly (ALFRED-style triangle)pick vintage columnReconstruct any snapshot; storage explodes
ПаттернКак«Latest» =Компромисс
Append-only + vintage keyНикогда не UPDATE; insert с ключом (series, period, release_date)window: max(release_date) на периодЧисто, аудируемо; больше объём
Bitemporal (SCD2)valid_from/to + system_from/toфильтруй обе оси времениПолный аудит исправлений; сложные запросы
Vintage / real-time DBХранить каждую версию явно (ALFRED-style треугольник)выбрать столбец версииВосстанавливает любой снэпшот; хранилище взрывается

Pragmatic shops keep full vintages for revision-prone series (GDP, payrolls), latest-only or compressed for stable ones.

Прагматичные команды хранят полные версии для склонных к ревизиям серий (GDP, payrolls), latest-only или сжатые для стабильных.

Interviewer will probe"How would you store revisions without breaking downstream?" Never overwrite → new vintage row; expose two layers: a latest view and an as-of(date) interface; communicate via lineage; version the series definition when base year/units change.
О чём спросит интервьюер«Как хранить ревизии, не ломая downstream?» Никогда не перезаписывать → новая строка версии; выставить два слоя: latest-вьюха и as-of(date)-интерфейс; коммуницировать через lineage; версионировать определение серии при изменении base year/units.

4 · Bitemporal modelling, precisely senior4 · Битемпоральное моделирование, точно senior

Two independent time axes:

Две независимые оси времени:

  • Valid time (effective/application): when the fact is true in the real world — the observation period.
  • Transaction / system time: when your system recorded the row.
  • Valid time (effective/application): когда факт верен в реальном мире — период наблюдения.
  • Transaction / system time: когда твоя система записала строку.

Revisions create multiple system-time versions of one valid-time fact. Corrections create versions of versions. Bitemporal answers both "true now" and "what we thought then."

Ревизии создают несколько system-time версий одного valid-time факта. Исправления создают версии версий. Битемпоральное отвечает и на «верно сейчас», и на «что мы думали тогда».

As-of query: "Q1 GDP as we believed on Mar 1?" valid_time ──┤Q1├────────────── system_time ───────┤Mar1 inside├── ↑ pick the row whose system interval contains Mar 1 AND valid interval covers Q1
As-of запрос: "Q1 GDP как мы верили на 1 марта?" valid_time ──┤Q1├────────────── system_time ───────┤Mar1 inside├── ↑ выбрать строку, чей system interval содержит Mar 1 И valid interval покрывает Q1

Many teams approximate full SQL:2011 bitemporal with append-only + a single explicit release_date axis. Know the trade-off: simpler/queryable vs full correction auditing.

Многие команды приближают полный SQL:2011 битемпоральный с append-only + единственной явной осью release_date. Знай компромисс: проще/запросимо vs полный аудит исправлений.

5 · Seasonality & seasonal adjustment5 · Сезонность и сезонная корректировка

Many series have predictable intra-year patterns (Dec retail spike, summer hiring). Seasonal adjustment removes that recurring component to expose the trend/cycle. Methods: X-13ARIMA-SEATS, TRAMO/SEATS.

Многие серии имеют предсказуемые внутригодовые паттерны (всплеск розницы в декабре, летний наём). Сезонная корректировка убирает этот повторяющийся компонент, чтобы обнажить тренд/цикл. Методы: X-13ARIMA-SEATS, TRAMO/SEATS.

SA (seasonally adjusted)NSA (not adjusted)
Read forTrend, MoM movesYoY, raw print, contracts
Keep becauseStore both: users need each, some series publish only one way.
SA (seasonally adjusted)NSA (not adjusted)
Читать дляТренд, MoM-движенияYoY, сырое значение, контракты
Хранить потому чтоХранить оба: пользователям нужны оба, некоторые серии публикуют только один способ.
Gotcha — subtle revision sourceSA factors get re-estimated annually. The seasonally-adjusted history can revise even when the raw data did not change. Don't assume "raw unchanged" ⇒ "series unchanged."
Подвох — тонкий источник ревизийSA-факторы переоцениваются ежегодно. Сезонно-скорректированная история может ревизироваться, даже когда сырые данные не менялись. Не предполагай «сырые не изменились» ⇒ «серия не изменилась».

6 · Observation vs release date · fiscal vs calendar · frequency6 · Дата наблюдения vs дата релиза · фискальный vs календарный · частота

Observation vs release date

Дата наблюдения vs дата релиза

  • Observation/reference period: what the number describes (CPI for May 2026).
  • Release/publication date: when published (12 Jun 2026).
  • Differ by the publication lag. PIT logic keys off release_date.
  • Observation/reference period: что описывает число (CPI за май 2026).
  • Release/publication date: когда опубликовано (12 июн 2026).
  • Различаются на publication lag. PIT-логика ключуется по release_date.

Fiscal vs calendar

Фискальный vs календарный

  • US federal FY = Oct 1–Sep 30; UK = Apr 6; companies vary.
  • Store actual calendar start/end dates + a period_type + fiscal convention as metadata.
  • Never compute period math off the label string.
  • US федеральный FY = 1 окт–30 сен; UK = 6 апр; компании варьируются.
  • Хранить фактические календарные даты start/end + period_type + фискальную конвенцию как метаданные.
  • Никогда не вычислять период-математику из строки метки.

Mixed frequency (daily / weekly / monthly / quarterly)

Смешанная частота (дневная / недельная / месячная / квартальная)

  • Store frequency as explicit metadata — don't infer from row spacing.
  • Mixed-frequency alignment: up/down-sample (aggregate vs interpolate) is a transform decision — keep native frequency, resample at serving.
  • Period semantics differ: end-of-period vs period-average vs flow vs stock — store the semantic.
  • Calendar edges: week-numbering, partial periods, holidays, business-day counts.
  • Хранить частоту как явные метаданные — не выводить из интервала между строками.
  • Выравнивание смешанной частоты: up/down-sample (агрегация vs интерполяция) — это решение преобразования — хранить родную частоту, передискретизировать при сервинге.
  • Семантика периода различается: end-of-period vs period-average vs flow vs stock — хранить семантику.
  • Края календаря: нумерация недель, частичные периоды, праздники, счёт бизнес-дней.

7 · Survey vs forecast/consensus data7 · Опросные данные vs прогнозы/консенсус

Survey dataОпросные данные

Responses from many respondents (PMI, consumer confidence, business sentiment).

Ответы от множества респондентов (PMI, потребительская уверенность, настроение бизнеса).

  • Grain: respondent/panel × question × response, with weighting.
  • Diffusion-index construction (% reporting improvement).
  • Methodology + sample metadata matter; often anonymized/aggregated.
  • Гранулярность: респондент/панель × вопрос × ответ, с весами.
  • Построение diffusion-индекса (% сообщающих об улучшении).
  • Методология + метаданные выборки важны; часто анонимизированные/агрегированные.

Forecast / consensusПрогноз / консенсус

Predictions of a future value of a known indicator, from many forecasters.

Предсказания будущего значения известного индикатора от многих прогнозистов.

  • Grain: (indicator, target_period, forecaster_id, value, forecast_date).
  • Aggregate → consensus (mean/median) + dispersion (high/low/std).
  • Forecasts are vintaged too — a forecaster updates over time.
  • Гранулярность: (indicator, target_period, forecaster_id, value, forecast_date).
  • Агрегировать → консенсус (mean/median) + дисперсия (high/low/std).
  • Прогнозы тоже версионированы — прогнозист обновляет во времени.
Interviewer will probeWhat is a "surprise"? surprise = actual − consensus (often standardized by dispersion). Markets react to the surprise, not the level. So you must freeze consensus before release and join actual↔consensus on the right target period the instant the actual prints. This is a flagship dataset in financial data providers.
О чём спросит интервьюерЧто такое «сюрприз»? сюрприз = actual − консенсус (часто стандартизировано на дисперсию). Рынки реагируют на сюрприз, а не на уровень. Поэтому нужно заморозить консенсус до релиза и присоединить actual↔консенсус по правильному target period в момент, когда actual печатается. Это флагманский датасет в финансовых данных.

8 · Vendor-supplied data quirks & defenses8 · Причуды вендорных данных и защита

QuirkDefense
Identifiers / mappings — vendor codes, drift, breakageCanonical crosswalk layer (vendor_code → series_id/geo/ccy) with coverage validation
Units & scale — thousands vs millions, index vs level vs %Units as enforced metadata; validate transforms against unit
Currencies — local/USD/EUR, nominal vs realFX + base metadata; explicit conversion rules
Geographies — ISO2/ISO3/vendor, EU aggregate vs membersGeo dimension + mapping; handle changing boundaries
Calendar conventions — EOP vs avg, business vs calendar, holidaysStore semantic; holiday calendars per geo
Silent revisions — vendor re-sends "full file", history quietly changedFull-file diff vs last load; ingest as new vintage; never overwrite
Format instability — schema/encoding/late filesSchema-change detection; contract/SLA monitoring; reconcile vs 2nd source
ПричудаЗащита
Идентификаторы / маппинги — вендорные коды, дрифт, поломкаКанонический crosswalk слой (vendor_code → series_id/geo/ccy) с валидацией покрытия
Единицы и масштаб — тысячи vs миллионы, index vs level vs %Единицы как принудительные метаданные; валидировать преобразования против unit
Валюты — local/USD/EUR, nominal vs realFX + базовые метаданные; явные правила конверсии
Географии — ISO2/ISO3/вендор, агрегат EU vs членыGeo измерение + маппинг; обрабатывать меняющиеся границы
Календарные конвенции — EOP vs avg, бизнес vs календарь, праздникиХранить семантику; календари праздников на гео
Тихие ревизии — вендор переотправляет «полный файл», история тихо измененаПолный diff файла vs последняя загрузка; заливать как новую версию; никогда не перезаписывать
Нестабильность формата — схема/кодировка/поздние файлыОбнаружение изменения схемы; мониторинг контракта/SLA; сверка vs 2-го источника
Scenario they may give"A vendor re-sends a full file and 3 years of numbers changed." Detect via diff → classify (legitimate benchmark revision vs error) → if legit, new vintage + preserve old + log lineage + check base-year/unit change; if suspect, quarantine + reconcile + escalate. Never silently overwrite vintage history.
Сценарий, который могут дать«Вендор переотправил полный файл, и 3 года цифр изменились.» Обнаружить через diff → классифицировать (легитимная benchmark-ревизия vs ошибка) → если легитимно, новая версия + сохранить старое + залогировать lineage + проверить изменение base-year/unit; если подозрительно, карантин + сверка + эскалация. Никогда не перезаписывать тихо историю версий.

9 · Why timeliness matters & how to design for it9 · Почему своевременность важна и как проектировать под неё

Releases (CPI, NFP, FOMC, GDP) move markets in seconds. Users, algos and analysts need the number the instant it's public. Late or wrong = competitive + reputational failure. That's a core value prop for financial data providers.

Релизы (CPI, NFP, FOMC, GDP) двигают рынки за секунды. Пользователи, алгоритмы и аналитики нуждаются в числе в момент, когда оно публично. Поздно или неправильно = конкурентный и репутационный провал. Это ключевое предложение ценности для провайдеров финансовых данных.

release calendar ─► schedule + poll source ─► fast parse (mapping pre-built) ─► inline validation gates ─► publish headline ─► async enrich (sub-components, SA) │ │ └─ embargo (08:30 ET) └─ exception → queue → versioned correction
календарь релизов ─► расписание + поллинг источника ─► быстрый парсинг (маппинг предсобран) ─► inline-валидация ─► публикация заголовка ─► async-обогащение (подкомпоненты, SA) │ │ └─ эмбарго (08:30 ET) └─ исключение → очередь → версионированное исправление
  • Releases are scheduled but format-variable → event-driven, pre-staged pipelines.
  • Release calendar = first-class data asset; freshness/SLA monitoring ("did CPI land at 08:30 ET?").
  • Speed vs accuracy tension → resolve by embedding fast inline controls on the critical path, human escalation only on exceptions.
  • Corrections happen → clean, versioned re-publish (no silent overwrite).
  • Релизы запланированы, но формат переменный → event-driven, предварительно настроенные пайплайны.
  • Календарь релизов = первоклассный data asset; мониторинг свежести/SLA («CPI приземлился в 08:30 ET?»).
  • Напряжение скорость vs точность → решается встраиванием быстрых inline-контролей на критическом пути, человеческая эскалация только на исключениях.
  • Исправления случаются → чистая, версионированная переиздание (не тихая перезапись).

10 · Automated quality controls (layered) core10 · Автоматизированные контроли качества (слоистые) ядро

LayerChecks
Schema/structureType/nullability; schema-change detection (vendor add/rename/remove). Fail-closed on breaking, alert on additive.
Domain rulesUnit/currency consistency, sign sanity (unemployment ≥ 0), frequency continuity (no missing months), period alignment, mapping completeness.
Statistical / anomalyValue vs historical range, MoM/YoY delta vs distribution, vs-consensus deviation, seasonality-aware outliers. Light ML flags for human review.
Cross-series / referentialComponents sum to headline; related-series consistency; vintage monotonicity where expected.
Completeness / timelinessExpected release landed on schedule? freshness; missing-release alerts.
СлойПроверки
Схема/структураТип/nullable; обнаружение изменений схемы (вендор добавил/переименовал/удалил). Fail-closed на ломающих, алерт на добавляющих.
Доменные правилаКонсистентность unit/currency, санитарность знака (unemployment ≥ 0), непрерывность частоты (нет пропущенных месяцев), выравнивание периода, полнота маппинга.
Статистические / аномалияЗначение vs исторический диапазон, MoM/YoY-дельта vs распределение, отклонение vs консенсус, выбросы с учётом сезонности. Лёгкие ML-флаги для человеческого ревью.
Кросс-серии / референтныеКомпоненты суммируются к заголовку; консистентность связанных серий; монотонность версии где ожидается.
Полнота / своевременностьОжидаемый релиз приземлился по расписанию? свежесть; алерты пропущенных релизов.

Operational: inline where cheap, async where heavy; exceptions → queue + runbook; every correction versioned; observability dashboards + alerting; idempotent re-runs.

Операционно: inline где дёшево, async где тяжело; исключения → очередь + runbook; каждое исправление версионировано; дашборды наблюдаемости + алертинг; идемпотентные перезапуски.

Your bridge: at Meta you owned DQ monitors gating publication, protecting 100+ downstream metrics. Same "controls as code, fail loud, version every fix" — tuned for SA-awareness and vintage monotonicity.
Твой мост: в Meta ты владел DQ-мониторами, блокирующими публикацию, защищая 100+ downstream-метрик. То же самое «контроли как код, падай громко, версионируй каждый фикс» — настроено на SA-осведомлённость и монотонность версий.

11 · Reference schema (enterprise-scale)11 · Референсная схема (корпоративный масштаб)

-- GRAIN: observation = (series_id, observation_period, release_date/vintage)  ← bitemporal heart

CREATE TABLE dim_series (        -- SCD2: definition revises when base year/units change
  series_id        STRING,
  indicator        STRING,   -- 'CPI'
  geography        STRING,   -- ISO + canonical
  unit             STRING,   -- index(1982-84=100) / pct / count
  frequency        STRING,   -- M/Q/W/D
  sa_flag          BOOLEAN,  -- SA vs NSA
  currency         STRING,
  base_year        STRING,
  period_semantic  STRING,   -- EOP / avg / flow / stock
  source           STRING,
  valid_from       DATE, valid_to DATE );

CREATE TABLE fct_observation (   -- APPEND-ONLY, never UPDATE
  series_id        STRING,
  obs_start        DATE, obs_end DATE,  -- the period described
  value            DOUBLE,
  release_date     TIMESTAMP,  -- when published
  vintage_id       STRING,
  status           STRING,      -- prelim / final
  source_file      STRING );    -- lineage

-- LATEST view: pick newest vintage per period
SELECT series_id, obs_start, value
FROM (
  SELECT *, ROW_NUMBER() OVER (
           PARTITION BY series_id, obs_start
           ORDER BY release_date DESC) AS rn
  FROM fct_observation )
WHERE rn = 1;

-- AS-OF view: what we knew on :asof_date
SELECT series_id, obs_start, value
FROM (
  SELECT *, ROW_NUMBER() OVER (
           PARTITION BY series_id, obs_start
           ORDER BY release_date DESC) AS rn
  FROM fct_observation
  WHERE release_date <= :asof_date )   -- ← no look-ahead
WHERE rn = 1;
-- ГРАНУЛЯРНОСТЬ: observation = (series_id, observation_period, release_date/vintage)  ← битемпоральное сердце

CREATE TABLE dim_series (        -- SCD2: определение ревизируется при изменении base year/units
  series_id        STRING,
  indicator        STRING,   -- 'CPI'
  geography        STRING,   -- ISO + канонический
  unit             STRING,   -- index(1982-84=100) / pct / count
  frequency        STRING,   -- M/Q/W/D
  sa_flag          BOOLEAN,  -- SA vs NSA
  currency         STRING,
  base_year        STRING,
  period_semantic  STRING,   -- EOP / avg / flow / stock
  source           STRING,
  valid_from       DATE, valid_to DATE );

CREATE TABLE fct_observation (   -- APPEND-ONLY, никогда UPDATE
  series_id        STRING,
  obs_start        DATE, obs_end DATE,  -- период, который описывается
  value            DOUBLE,
  release_date     TIMESTAMP,  -- когда опубликовано
  vintage_id       STRING,
  status           STRING,      -- prelim / final
  source_file      STRING );    -- lineage

-- LATEST вьюха: выбрать новейшую версию на период
SELECT series_id, obs_start, value
FROM (
  SELECT *, ROW_NUMBER() OVER (
           PARTITION BY series_id, obs_start
           ORDER BY release_date DESC) AS rn
  FROM fct_observation )
WHERE rn = 1;

-- AS-OF вьюха: что мы знали на :asof_date
SELECT series_id, obs_start, value
FROM (
  SELECT *, ROW_NUMBER() OVER (
           PARTITION BY series_id, obs_start
           ORDER BY release_date DESC) AS rn
  FROM fct_observation
  WHERE release_date <= :asof_date )   -- ← нет look-ahead
WHERE rn = 1;

Scale: partition by source/frequency/date; columnar; as-of prunes on release_date; compress unchanged vintages; full vintages only for revision-prone series. Also: dim_release (calendar, embargo) and vendor crosswalk tables.

Масштаб: партиция по source/frequency/date; колоночное; as-of прунит по release_date; сжимать неизменённые версии; полные версии только для склонных к ревизии серий. Также: dim_release (календарь, эмбарго) и вендорные crosswalk-таблицы.

12 · The gap-bridge script (rehearse cold) do this12 · Скрипт пробела-моста (отрепетировать наизусть) сделай это

They've read your CV; they will raise the missing macro/time-series experience. Pre-empt it. Calm, specific, zero defensiveness.

Они читали твоё CV; они поднимут отсутствие опыта макро/временны́х рядов. Опереди это. Спокойно, конкретно, без защиты.

  1. Name it plainly: "I haven't worked with macro, survey or forecast datasets; my closest time-series-adjacent work is the bank default model, not true series modelling. I want to be upfront."
  2. PIT instinct from credit: the top-10 bank factoring default model lived on point-in-time correctness — you cannot train on info unavailable at decision time. Same look-ahead/vintage discipline econ demands.
  3. Modelling at scale: 10 logging systems / 3.6B events/day into one model; entity-resolution fix across 6.2B records. "Nail the grain, fix identity, restore downstream trust" — here on a new temporal axis.
  4. Legacy modernization (direct match): McMakler triple migration (Snowflake, Airflow, dbt), EUR 1M+ saved, no BI downtime — parallel-run + reconcile + incremental cutover.
  5. Messy multi-source: Salesforce sync layer, 8-brand customer-spine convergence = the vendor crosswalk problem.
  6. Proof of fast ramp: EMEA DE Hackathon win (Untangler multi-agent, picked for internal tooling); Kafka + GPT-4 production at IU in months; Azure OpenAI case study.
  7. Show you started: "I've already studied vintages/PIT, seasonal adjustment, release calendars, and the BLS/BEA/Eurostat/central-bank model — happy to go deep."
  1. Назови прямо: «Я не работал с макро-, опросными или прогнозными датасетами; моя ближайшая time-series-смежная работа — банковская модель дефолта, не настоящее моделирование серий. Хочу быть честным.»
  2. PIT-инстинкт из кредита: модель дефолта факторинга топ-10 банка жила на point-in-time корректности — нельзя тренировать на информации, недоступной в момент решения. Та же look-ahead/vintage дисциплина, которую требует экономика.
  3. Моделирование на масштабе: 10 систем логирования / 3.6B событий/день в одну модель; entity-resolution фикс на 6.2B записях. «Пробей гранулярность, почини идентичность, восстанови доверие downstream» — здесь на новой временно́й оси.
  4. Модернизация легаси (прямое попадание): McMakler тройная миграция (Snowflake, Airflow, dbt), EUR 1M+ сэкономлено, никакого простоя BI — параллельный запуск + сверка + инкрементальная переключка.
  5. Грязный мульти-источник: Salesforce-синк-слой, 8-брендовая customer-spine конвергенция = проблема вендорного crosswalk.
  6. Доказательство быстрого вката: победа в EMEA DE Hackathon (Untangler мультиагент, выбран для внутренних инструментов); Kafka + GPT-4 в продакшн в IU за месяцы; Azure OpenAI кейс.
  7. Покажи, что начал: «Я уже изучил vintages/PIT, сезонную корректировку, календари релизов и модели BLS/BEA/Eurostat/центробанков — готов углубиться.»

13 · Self-quiz — flip to reveal13 · Самопроверка — переверни, чтобы открыть

Tap a card to flip. Define each in one sentence, fast.

Нажми на карточку, чтобы перевернуть. Определи каждое в одном предложении, быстро.

What is a data vintage?Что такое vintage (версия) данных?
tap to flipнажми, чтобы открыть
The snapshot of a series as it existed at a particular point in time. Revisions produce successive vintages; PIT queries reconstruct a chosen one.Снэпшот серии, каким он существовал в определённой точке времени. Ревизии создают последовательные версии; PIT-запросы восстанавливают выбранную.
Observation date vs release date?Дата наблюдения vs дата релиза?
tap to flipнажми, чтобы открыть
Observation = the period the number describes (CPI for May). Release = when it was published (12 Jun). Differ by the publication lag; PIT keys off release_date.Observation = период, который описывает число (CPI за май). Release = когда опубликовано (12 июн). Различаются на publication lag; PIT ключуется по release_date.
Why never overwrite values in place?Почему никогда не перезаписывать значения на месте?
tap to flipнажми, чтобы открыть
Destroys reproducibility, audit and as-of queries; injects look-ahead bias into backtests; makes corrections indistinguishable from revisions. Append new vintage instead.Уничтожает воспроизводимость, аудит и as-of запросы; вносит look-ahead bias в бэктесты; делает исправления неотличимыми от ревизий. Вместо этого дописывать новую версию.
SA vs NSA — and the subtle gotcha?SA vs NSA — и тонкий подвох?
tap to flipнажми, чтобы открыть
SA removes recurring seasonal pattern (read for trend/MoM); NSA is raw (YoY/contracts). Gotcha: SA factors re-estimate annually, so SA history revises even when raw data didn't.SA убирает повторяющийся сезонный паттерн (читать для тренда/MoM); NSA сырой (YoY/контракты). Подвох: SA-факторы переоцениваются ежегодно, поэтому SA-история ревизируется, даже когда сырые данные нет.
The two axes of bitemporal data?Две оси битемпоральных данных?
tap to flipнажми, чтобы открыть
Valid time (when the fact is true in the world / observation period) and transaction/system time (when we recorded it). As-of = filter both.Valid time (когда факт верен в мире / период наблюдения) и transaction/system time (когда мы записали его). As-of = фильтровать оба.
What is a "surprise"?Что такое «сюрприз»?
tap to flipнажми, чтобы открыть
actual − consensus, often standardized by dispersion. Markets react to it. So freeze consensus before release and join actual↔consensus on the right target period instantly.actual − консенсус, часто стандартизировано на дисперсию. Рынки реагируют на него. Поэтому заморозить консенсус до релиза и присоединить actual↔консенсус по правильному target period мгновенно.
Grain of an observation table?Гранулярность таблицы наблюдений?
tap to flipнажми, чтобы открыть
(series_id, observation_period, release_date/vintage) — bitemporal, append-only. Not (series_id, period).(series_id, observation_period, release_date/vintage) — битемпоральное, append-only. Не (series_id, period).
Vendor re-sends full file, history changed. First move?Вендор переотправил полный файл, история изменена. Первый шаг?
tap to flipнажми, чтобы открыть
Full-file diff to detect, then classify benchmark-revision vs error. Legit → new vintage + preserve old + log lineage. Suspect → quarantine + reconcile + escalate. Never silently overwrite.Полный diff файла для обнаружения, затем классифицировать benchmark-ревизия vs ошибка. Легитимно → новая версия + сохранить старое + залогировать lineage. Подозрительно → карантин + сверка + эскалация. Никогда не перезаписывать тихо.
Fiscal vs calendar — modelling rule?Фискальный vs календарный — правило моделирования?
tap to flipнажми, чтобы открыть
Store actual calendar start/end dates + period_type + fiscal convention as metadata. Never compute YoY/QoQ off the label string.Хранить фактические календарные даты start/end + period_type + фискальную конвенцию как метаданные. Никогда не вычислять YoY/QoQ из строки метки.
Why does timeliness matter?Почему своевременность важна?
tap to flipнажми, чтобы открыть
Releases move markets in seconds; users need the number instantly. Scheduled-but-variable → event-driven pre-staged pipelines with inline controls so speed doesn't cost accuracy.Релизы двигают рынки за секунды; пользователи нуждаются в числе мгновенно. Запланированные-но-переменные → event-driven предварительно настроенные пайплайны с inline-контролями, чтобы скорость не стоила точности.

14 · Final pre-call checklist14 · Финальный чеклист перед звонком

Can I define the 6 must-knows in one sentence each, fast?
vintage · point-in-time · observation vs release date · SA vs NSA · surprise · bitemporal. Drill with the flip cards above.
Могу ли я определить 6 обязательных знаний в одном предложении каждое, быстро?
vintage · point-in-time · дата наблюдения vs дата релиза · SA vs NSA · сюрприз · битемпоральное. Тренируйся с карточками-перевёртышами выше.
Can I state and defend the bitemporal grain?
(series_id, observation_period, release_date), append-only, latest = window on max(release_date), as-of = filter release_date ≤ asof. Defend append-only over UPDATE.
Могу ли я заявить и защитить битемпоральную гранулярность?
(series_id, observation_period, release_date), append-only, latest = window на max(release_date), as-of = фильтр release_date ≤ asof. Защити append-only против UPDATE.
Can I deliver the gap-bridge in 45 seconds, honest + confident?
Name gap → PIT from bank credit → modelling at Meta scale → legacy migration at McMakler → fast-ramp proof. No defensiveness.
Могу ли я выдать скрипт пробела-моста за 45 секунд, честно + уверенно?
Назови пробел → PIT из банковского кредита → моделирование на масштабе Meta → миграция легаси в McMakler → доказательство быстрого вката. Без защиты.
Can I tie every domain answer to a real CV line?
Bank PIT correctness · Meta unified model / entity-res / DQ monitors · McMakler Snowflake/Airflow/dbt migration · Untangler + Azure OpenAI for AI-assisted controls.
Могу ли я привязать каждый доменный ответ к реальной строке CV?
Банк PIT-корректность · Meta унифицированная модель / entity-res / DQ-мониторы · McMakler Snowflake/Airflow/dbt миграция · Untangler + Azure OpenAI для AI-ассистированных контролей.
Industry awareness?
Financial data providers serve traders, algos, analysts. Query/serving layers must produce clean, correctly-aligned series. Consensus/ECO = flagship datasets. CDMP/DAMA-DMBOK = governance framework (nice-to-have).
Осведомлённость об индустрии?
Провайдеры финансовых данных обслуживают трейдеров, алгоритмы, аналитиков. Запрос/сервинг слои должны производить чистые, правильно выровненные серии. Консенсус/ECO = флагманские датасеты. CDMP/DAMA-DMBOK = фреймворк управления (nice-to-have).