Инженерные вопросы и задачи: EDWH и финансовые данные
Сценарии на архитектуру, финансовую семантику, SQL, историзацию и проверку корректности.
3 мин чтения·База знаний
Справочный материал. Контракты данных, архитектурные решения и ограничения применения. Источники приведены в материалах, где используются внешние основания.
Каждый сценарий разбирается по схеме контракт данных → гипотеза решения → граничные случаи → проверки → компромиссы. Решение должно сохранять финансовую семантику и выдерживать проверку на пограничных данных.
1. Чем EDWH отличается от отдельной аналитической базы?#
Проверяется понимание межсистемной интеграции, единой модели сущностей, историчности, управления качеством и прослеживаемости. Недостаточно ответить «EDWH больше по размеру».
2. Почему нельзя объединить в один факт операцию, проводку и ежедневный остаток?#
У этих сущностей различное зерно. Соединение без предварительной агрегации порождает дублирование мер; остатки имеют иные правила аддитивности по времени.
3. Как выбрать между нормализованным Core, Data Vault и размерной моделью?#
Рассмотреть число и качество источников, требования к истории, изменения бизнес-ключей, запросы, прослеживаемость и стоимость сопровождения. Универсального выбора нет.
4. В январе внесли документ, в феврале его исправили с январской датой. Как строить отчёт?#
Уточнить, нужен ли срез «как было известно на конец января» или пересчитанное состояние января. Разделить деловое и системное время, сохранить исправление и пересчитать зависимые показатели.
5. Почему watermark по максимальной дате в приёмнике может потерять данные?#
Поздние события, нарушенный порядок доставки, исправления старых записей. Решения: CDC, пересекающиеся окна, контроли полноты, контракт последовательностей, целевой backfill.
Что выполнен один из инвариантов на корректном уровне документа/учётного контура/валюты. Оно не доказывает полноту источника, верность счетов или отсутствие компенсирующих ошибок.
8. Чем обороты отличаются от остатков как меры EDWH?#
Обороты - движения за период. Остатки - состояния на дату; сумма ежедневных остатков не равна остатку на последний день.
9. Почему нельзя складывать суммы без валютного измерения?#
Разные валюты имеют разные размерности; нужна явная процедура конвертации, дата курса, метод округления и учётные правила.
10. После JOIN суммы стали вдвое больше. Что проверять?#
Сравнить зерно фактов и кардинальность связей, посмотреть дубли бизнес-ключей и GROUP BY. Исправлять модель соединения, а не маскировать результат DISTINCT без анализа.
11. Greenplum-запрос медленный, хотя PostgreSQL-аналог быстрый. Почему?#
Нужно анализировать распределение, skew, межсегментные движения, планы, статистику и партиционирование. Нельзя выводить производительность MPP только из локального плана PostgreSQL.
12. Как доказать, что сверка действительно обнаружит потери?#
Проверить набор контрольных случаев: пропущенная запись, лишняя запись, конфликт payload, две компенсирующие ошибки, неверная валюта и историческое исправление. Затем автоматизировать проверки на синтетических входных данных.
Work through each scenario using data contract → solution hypothesis → edge cases → checks → trade-offs. A solution must preserve financial semantics and withstand boundary-case data.
1. How does an EDWH differ from a standalone analytical database?#
Look for understanding of cross-system integration, a shared entity model, history, quality management, and lineage. “The EDWH is larger” is not enough.
2. Why not combine an operation, journal entry, and daily balance into one fact?#
They have different grains. A join without prior aggregation duplicates measures; balances also have different time-additivity rules.
3. How do you choose between a normalized Core, Data Vault, and a dimensional model?#
Consider the number and quality of sources, history requirements, business-key changes, query patterns, lineage, and maintenance cost. There is no universal choice.
4. A document entered in January is corrected in February but backdated to January. How should a report work?#
Clarify whether the user needs “known at January month-end” or a restated January. Separate business and system time, retain the correction, and recalculate dependent metrics.
5. Why can a watermark based on the maximum target date lose data?#
Late events, out-of-order delivery, and corrections to old records can be missed. Options include CDC, overlapping windows, completeness checks, sequence contracts, and targeted backfills.
Reprocessing the same input does not change the logical result. A different payload under an existing ID must not be silently discarded; investigate it as a conflict.
7. What does equality of debits and credits prove?#
It proves one invariant at the correct document, ledger, and currency grain. It does not prove source completeness, correct accounts, or the absence of offsetting errors.
8. How does turnover differ from balances as an EDWH measure?#
Turnover is movement over a period. A balance is a state at a date; summing daily balances is not the ending balance.
9. Why cannot amounts be summed without a currency dimension?#
Currencies have different units. Conversion requires an explicit process, rate date, rounding method, and accounting rules.
10. Amounts doubled after a JOIN. What should you inspect?#
Compare fact grains and relationship cardinality, inspect duplicate business keys and GROUP BY, and fix the join model. Do not mask the result with DISTINCT without analysis.
11. Why can a Greenplum query be slow when its PostgreSQL analogue is fast?#
Analyze distribution, skew, inter-segment movement, plans, statistics, and partitioning. A local PostgreSQL plan does not establish MPP performance.
12. How can you show that reconciliation detects losses?#
Test a missing record, extra record, payload conflict, two offsetting errors, wrong currency, and historical correction. Automate these checks with synthetic input.