Перейти к содержанию

Справочник: режимы 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/таблиц отклоняется с перечислением доступных имён.

Связанное