Централизованное хранилище данных для аналитики и отчётности. Содержит данные из множества источников (АБС, CRM, процессинг), организованные по слоям (staging→ODS→mart). В банках: 100-5000 таблиц, 10TB-500TB данных.
Полный путь каждого поля от источника до отчёта, включая все трансформации. Без lineage: расследование расхождения = 3-5 дней. С lineage: 30 минут. Инструменты: DataHub, dbt lineage, Atlas, ручной Excel.
Подход к проектированию DWH: dimensional modeling (star schema), bottom-up (начинать с витрин). Преимущества: простые запросы, быстрая разработка. Используется для аналитических витрин.
Агрегированные данные для конкретного потребителя: финансы, риски, BI, ЦБ. Star schema, оптимизирована для чтения. Обычно 10-50 витрин в банке. Каждая — отдельный SQL с бизнес-логикой.
Второй слой: очищенные, типизированные, дедуплицированные данные в 3NF. Единая модель для всех источников. Содержит историю (SCD Type 2). Основа для построения витрин и отчётности.
Разбиение большой таблицы на физические части (обычно по дате: monthly/daily). 500M строк без партиций = full scan на каждый запрос. С партициями: сканируется только нужный период. Эффект: 10-50x.
Методы хранения исторических изменений: Type 1 (перезапись, без истории), Type 2 (новая строка + effective_from/to, полная история), Type 3 (доп. колонка prev_value), Type 6 (гибрид). В банках обычно Type 2 для клиентов и Type 1 для справочников.
Первый слой DWH: данные «как есть» из источников без трансформаций. Цель — изоляция источника и возможность перезагрузки. Обычно хранится 30-90 дней. Все поля — varchar, без бизнес-логики.
В MPP-системах (Greenplum, Redshift): определяет, как строки распределяются по нодам. Неоптимальный ключ = data skew = 1 нод загружен на 100%, остальные простаивают. Выбор: по PK или по FK для JOIN.
Мёртвые строки после UPDATE/DELETE в PostgreSQL. Autovacuum не успевает → таблица в 2-3 раза больше, чем нужно. Диагностика: pg_stat_user_tables.n_dead_tup. Лечение: VACUUM FULL (downtime).
Единые правила именования объектов DWH: таблицы (stg_, ods_, mart_), поля (snake_case), индексы (idx_), views (vw_). Без стандарта: 3 стиля в одном слое, невозможно найти таблицу.
Платформа оркестрации ETL: DAG (Python) определяет зависимости, scheduler запускает по расписанию, UI показывает статус. Альтернативы: Prefect, Dagster, Luigi, cron.
Автоматический цикл: push code → lint (sqlfluff) → test (dbt test) → deploy. Без CI/CD: ручной copy-paste через pgAdmin → ошибки в production. С CI/CD: откат за 5 минут.
Современная альтернатива ETL: сырые данные загружаются в DWH «как есть», трансформации выполняются внутри хранилища (SQL/dbt). Преимущество: переиспользование вычислительных мощностей DWH, version control SQL.
Свойство ETL: повторный запуск даёт тот же результат. TRUNCATE + INSERT = идемпотентно. INSERT без проверки = дубликаты при retry. Критично для надёжных пайплайнов.
Линтер и форматтер SQL. Проверяет стиль (naming, aliasing, whitespace), находит антипаттерны (SELECT *, implicit JOIN). Интегрируется в CI/CD. Аналог ESLint для SQL.
Время с момента последнего обновления витрины. SLA: T+1 (обновляется на следующий день), T+0 (в тот же день), near-real-time (<1 час). dbt source freshness проверяет автоматически.
Загрузка только новых/изменённых данных (vs full load). Методы: по timestamp (updated_at), по CDC (Change Data Capture), по watermark. В dbt: is_incremental() + merge.
TRUNCATE + INSERT всех данных из источника при каждом запуске. Простой, идемпотентный, но медленный для больших таблиц. Подходит для справочников (<1M строк). Для фактов — incremental.
Оперативная система, из которой данные поступают в DWH: АБС (Diasoft, Colvir), CRM, процессинг карт, казначейство, HR. Банк может иметь 5-20 источников.
Статистический анализ данных: NULL%, дубли, min/max/avg, распределения, outliers, паттерны. Первый шаг любого DQ-аудита. Инструменты: Great Expectations, ydata-profiling, SQL.
Трансфертное ценообразование: внутренняя стоимость фондирования для каждого бизнес-подразделения. Методы: matched maturity (по сроку), pool rate (средневзвешенная), hybrid. Ошибка → искажение маржи.
IFRS 9 (International Financial Reporting Standard 9)
▶
Стандарт учёта финансовых инструментов. Три блока: классификация и оценка (amortized cost / FVOCI / FVTPL), обесценение (ECL), хеджирование. Заменил IAS 39 в 2018. Ключевое изменение: expected loss вместо incurred loss.
Доля потерь при дефолте = 1 - Recovery Rate. Зависит от обеспечения, типа кредита, юрисдикции. Ипотека: 20-30%. Необеспеченные потребы: 60-80%. Корпораты: 40-60%.
Вероятность дефолта заёмщика. Through-the-cycle (средняя за цикл) или point-in-time (текущая с учётом макро). Калибруется на исторических данных (5+ лет). Диапазон: 0.01% (AAA) — 30%+ (near-default).
Проверка модели на исторических данных: PD, которые были предсказаны год назад → совпали ли с фактическими дефолтами? Обязательное требование ЦБ и IFRS 9 для валидации моделей.
Национальные стандарты. Отличия от МСФО: историческая стоимость (vs fair value), РВПС вместо ECL, другие правила амортизации. Банки ведут оба учёта параллельно, трансформация РСБУ→МСФО: 30+ корректировок.
Процесс перевода бухгалтерских данных из РСБУ в МСФО: корректировки на fair value, ECL, амортизацию, лизинг (IFRS 16), консолидацию. Обычно 30-50 трансформационных проводок.
Требования к обработке ПДн: определить перечень, обеспечить маскировку, вести журнал доступа, уведомить Роскомнадзор, назначить ответственного. Штраф с 2024: до 18M ₽.
Резервы по РСБУ (Положение 590-П): категории качества I-V (от 0% до 100%). Отличаются от ECL по IFRS 9: другие модели, другие параметры. Сверка РВПС vs ECL — предмет аудита.
Основная форма ЦБ: баланс банка по счетам 2-го порядка. Ежемесячная. 20+ строк × 12 столбцов = 240+ ячеек. Каждая ячейка = SQL-запрос из DWH. Расхождение с GL = замечание ЦБ.
Отчёт о финансовых результатах для ЦБ. Доходы, расходы, прибыль по символам. Ежеквартальная. Должна совпадать с управленческим ОПУ и МСФО ОПУ (с точностью до корректировок).
Количество людей, уход которых парализует проект. Bus factor=1 = критический риск: один человек знает весь код. Решение: документация, code review, менторинг, парное программирование.
План восстановления после катастрофы: RPO (сколько данных потеряем), RTO (за сколько восстановимся). Тест DR: restore backup на standby-сервер, замерить RPO/RTO. Проводить: ежеквартально.
Персональные данные по 152-ФЗ: ФИО, паспорт, СНИЛС, ИНН, телефон, email, адрес, дата рождения, номер счёта, номер карты. Должны быть замаскированы в непроизводственных средах.
RPO: максимально допустимая потеря данных (в часах). RTO: максимально допустимое время восстановления. Для DWH банка: RPO=4ч, RTO=8ч (типичное). Определяется SLA с бизнесом.
Ограничение видимости строк по роли: аналитик филиала видит только свой филиал. В PostgreSQL: CREATE POLICY. Альтернатива: отдельные view для каждого подразделения.
Логирование всех действий с данными: кто, когда, что сделал (SELECT/INSERT/UPDATE/DELETE). В PostgreSQL: pgaudit. Обязательно для compliance. Хранение: минимум 3 года.
Методы скрытия PII: hashing (SHA-256, необратимый), tokenization (замена на token, обратимый), masking (**** вместо цифр), encryption (AES, с ключом), anonymization (удаление связи с субъектом).
Распределение общих затрат (IT, HR, аренда) на бизнес-подразделения по драйверам: headcount, площадь, транзакции. 20-50 правил аллокации. Ошибка → искажение cost/income по сегментам.
Ключевой KPI банка: операционные расходы / операционные доходы. Benchmark: 40-60%. Рассчитывается из управленческого ОПУ. Зависит от корректности аллокаций и FTP.
Сравнение бюджетных показателей с фактическими: отклонения, причины, тренды. В DWH: две витрины (budget_mart + fact_mart) с общим grain для корректного сравнения.
Разбиение портфеля/клиентов на сегменты: розница, МСБ, корпораты, VIP. Правила: по размеру выручки, по типу продукта, по отрасли. Один клиент = один сегмент (нет пересечений).
Отчёт о доходах и расходах по управленческим статьям: чистый процентный доход, комиссии, операционные расходы, резервы. Детализация по продуктам/сегментам/филиалам.
Баланс для внутреннего управления: может отличаться от РСБУ (другая классификация, другие группировки). Должен быть reconcileable с формой 101 ЦБ и МСФО балансом.
Чистая процентная маржа: (процентные доходы - процентные расходы) / средние активы. Benchmark: 3-5%. Зависит от FTP и ставок. Один из ключевых показателей для ЦБ и инвесторов.
Материализованное представление (Мат. представление)
▶
Предвычисленная таблица с результатом тяжёлого запроса. REFRESH CONCURRENTLY — обновление без блокировки. Эффект: запрос из 45с → 0.5с. Используется для агрегаций в BI.
SQL-запрос или таблица, на которой строится дашборд. Один dataset может питать несколько чартов. Проблемы: SELECT *, отсутствие индексов, CROSS JOIN, nested subqueries.
Бизнес-пользователи сами создают отчёты/дашборды без помощи IT. Требует: semantic layer (единые определения), обученных пользователей, sandbox для экспериментов. Цель: 60%+ запросов без IT.
MPP (Massively Parallel Processing) СУБД на базе PostgreSQL. Распределённая: данные по нодам, параллельное выполнение. Используется для DWH банков в РФ (альтернатива Oracle, Teradata). 10-100TB.
Платформа потоковой передачи данных. Для DWH: CDC (Change Data Capture), near-real-time загрузка, event streaming. Kafka Connect: коннекторы к источникам без кода.
Extension для PostgreSQL: логирование SQL-запросов в audit log. Настройка: по ролям, по типам операций (READ/WRITE/DDL). Обязательно для compliance (152-ФЗ, ЦБ). Без pgaudit — нет audit trail.