Справочник: режимы reconciliation¶
Проверки reconciliation охватывают несколько entity в поставке — например, файл проводок, который должен балансировать против файла итогов. Эти правила живут на Project (не на трансформерах, которые остаются чистыми мапперами) и выполняются во время Session после трансформации.
Два способа выразить правило¶
Правило reconciliation бывает одного из двух типов:
- Expression (
type: "expression"или безtype) — написано на языке выражений и распарсено в DuckDB-SQL. - SQL (
type: "sql") — сырой DuckDB-SELECTв полеsql, проверяемый SQL-валидатором (sqlglot AST) перед выполнением.
Оба выполняются в одном общем DuckDB-соединении на сессию — после того, как Parquet'ы ролей зарегистрированы как views, а словарные и контекстные таблицы загружены.
Как SQL-правило отчитывается¶
SQL-правило — это запрос, возвращающий нарушающие строки:
- 0 строк → правило проходит.
- есть строки → правило падает, с
total_mismatchesравным числу строк и первыми 10 строками как samples. Если в результате есть колонкаreconcile_key, эти ключи собираются вmismatched_keys.
-- Счета из файла проводок без соответствия в плане счетов
SELECT b."account" AS reconcile_key
FROM buchungen b
LEFT JOIN dict_buchungen_kontenplan d ON b."account" = d."code"
WHERE d."code" IS NULL
Что доступно правилу¶
- Views ролей — трансформированный Parquet каждой роли entity регистрируется
как view, доступный по имени роли (например,
buchungen). - Словарные таблицы — каждый словарь entity роли загружается как
dict_{role}_{dictionary_name}(например,dict_buchungen_kontenplan). - Контекстные таблицы — табличный контекст сессии материализуется как
ctx_{table_name}(например,ctx_sap_balances), чтобы сверять против референсного баланса, присланного с поставкой.
Концептуальные режимы¶
Две формы покрывают большинство сверок:
- Keyed — заджойнить две роли по ключу группировки и сравнить по каждому ключу (несопоставленные / несбалансированные ключи становятся нарушениями).
- Global — сравнить скалярные агрегаты между ролями (например, сумму одного файла против итога), обычно cross join однострочных агрегатов.
Безопасность¶
SQL-правила проходят те же ограждения: DDL/DML вроде DROP TABLE отклоняется при
парсинге, заблокированные функции вроде READ_PARQUET / READ_CSV отвергаются, а
ссылка на таблицу не из набора зарегистрированных views/таблиц отклоняется с
перечислением доступных имён.