● Ambula Migration Helper · руководство

Миграция данных клиники:
маппинг, связи и проверка

Главный этап миграции — Mapping: здесь поля экспорта сопоставляются с таблицами Ambula, а Entity Indexes задают, как записи опознаются и связываются между собой. Ниже — как это настроить и проверить результат.

Сердце процесса: Mapping → Entity Indexes Связи между файлами Дедупликация по ключу
С чего начать

Пять этапов миграции

Внутри проекта сверху идут вкладки этапов. Проходят их слева направо — каждый следующий открывается, когда подтверждён предыдущий. Mapping — центральный: именно там вы принимаете решения, всё остальное их исполняет.

📋

1 · Profiles

Автоматический разбор файлов: колонки, типы, примеры значений.

🧩

2 · Mapping главный

Сопоставление полей, Entity Indexes и связи между файлами.

⚙️

3 · Transform

Прогон данных по маппингу, просмотр результата по батчам.

🗄️

4 · Import SQL

Генерация SQL, вставка в изолированную схему и сверка.

Рабочая область проекта с вкладками этапов
Рабочая область. Слева — проекты, сверху — вкладки Profiles → Mapping → Transform → Import SQL → View in Ambula.
Этап 2 · самый важный

Mapping — сопоставление полей

На этом этапе вы говорите системе, куда в Ambula ложится каждое поле из файлов клиники. Слева — целевое поле таблицы Ambula (TARGET FIELD), справа — откуда берётся значение (TRANSFORM / EXPRESSION): колонка исходника, формула, значение по умолчанию или константа.

Таблица маппинга: целевое поле и выражение-источник
Таблица маппинга для сущности patients. Каждое целевое поле получает значение из исходника. Под формулой — живой предпросмотр примеров (Pilar, Cynthia, Mickel). Сверху — какие файлы к какой сущности привязаны: patients_clean.csv → patients (11).

Как читать выражения полей

computed Формула

TRIM({"patients_clean.csv"."first_name"}) — значение берётся из колонки и преобразуется (обрезка пробелов, парсинг даты и т.п.).

DEF Значение БД

DB default (now()) — поле заполнит сама база при вставке. Указывать источник не нужно.

Прямая колонка

{"patients_clean.csv"."email"} — значение переносится как есть, без преобразований.

Таблица считается готовой, когда подтверждена. Вверху видно прогресс — например Overview · 8/8 confirmed. Пока все нужные таблицы не подтверждены, этап Transform заблокирован.
Ядро маппинга

Entity Indexes — идентичность и связи

Справа от таблицы маппинга — панель ENTITY INDEXES. Это ключевые поля целевой сущности: по ним запись опознаётся (кто это), получает контекст (клиника, филиал) и связывается с другими сущностями. Именно эти поля делают из набора отдельных файлов единую связанную базу.

Панель Entity Indexes для таблицы patients
Entity Indexes для patients. Ключевые поля: PRIMARY идентичность, CTX контекст, FK связь. У связи Medical ID ещё нет пары — предупреждение и кнопка «Настроить связь».

Типы индекс-полей

PRIMARY

Идентичность записи

По каким полям запись считается уникальной. Это же — ключ поиска дубликатов.

Пациент = first_name + last_name
CTX

Значение из контекста

Берётся из настроек проекта (медцентр, филиал), а не из файла — одинаково для всех строк.

medical_center_id, branch_id
FK →

Связь с другой сущностью

Внешний ключ: ссылка на запись другой таблицы. Значение подставляется на импорте.

medical_id → medical
«No matching index found» — связь ещё не настроена. Если у поля-связи нет пары, система подсвечивает это оранжевым. Нажмите «Настроить связь» и выберите колонку в этом файле или найдите её через другой файл — так две сущности соединяются.
Качество данных

Дубликаты

В экспортах клиники один и тот же пациент нередко встречается несколько раз. Система находит такие повторы по PRIMARY-полю из Entity Indexes — тому самому ключу идентичности. Из группы одинаковых записей в базу попадает одна, остальные помечаются как дубликаты и не создают лишних записей.

Как это связано с Entity Indexes

Ключ дубликата — это PRIMARY. Для пациента это first_name + last_name: две строки с одинаковыми именем и фамилией — кандидаты в дубликаты. Хотите строже или мягче — меняется PRIMARY-поле в Entity Indexes. Например, добавив дату рождения, вы перестанете склеивать тёзок.

Где смотреть и разбирать

1

На этапе Transform откройте любой батч (кнопка Open batch). В панели батча сверху есть фильтр Duplicates — он оставляет только строки-дубликаты этого куска.

AllOKIssues DuplicatesSQL skips
2

Для дубликата видно, какая строка оставлена, а какая отброшена — их можно сравнить бок о бок. Если решение неверное, его можно переопределить вручную (оставить другую строку).

Панель батча с фильтрами, включая Duplicates
Панель батча. Фильтр Duplicates — рядом с SQL skips. В этом примере повторов нет (skip 0), поэтому список чистый.
Итог по дубликатам виден на сверке. На этапе Import SQL количество строк по каждой таблице — это уже без повторов: в базу уходят только уникальные записи.
Этап 3 · проверка

Просмотр данных по батчам

После маппинга данные прогоняются и разбиваются на батчи по 500 строк. Любой кусок — даже в файле на миллионы строк — открывается мгновенно: система заранее запоминает, где лежит каждая строка, и прыгает сразу к нужной.

1

Выберите файл и кусок

На вкладке Transform, в блоке Processing files: в Source file — файл (видно число батчей), в Batch — диапазон строк, затем Open batch.

Transform: выбор файла и батча
Transform → Processing files. Выбор файла и куска. Подсказка предлагает проверить SQL skips, duplicates, issues.
2

Читайте строки и фильтруйте

Справа откроется панель со сводкой (rows 69501–70000 · ok 500 · skip 0) и таблицей строк. Фильтры: All / OK / Issues / Duplicates / SQL skips.

Переход в любой конец файла — мгновенный. Открыть строки 69 501–70 000 в файле на 16 МБ так же быстро, как первые 500.
Этап 4 · сверка

Импорт и проверка целостности

На вкладке Import SQL генерируется SQL, данные вставляются в изолированную схему и сверяются. Видно количество строк по каждой таблице (уже без дубликатов) и есть ли «осиротевшие» связи.

Import SQL: план вставки и результат сверки
Import SQL. План вставки и результат: строки по таблицам и 0 orphans — все связи из Entity Indexes разрешились корректно.
5 227
пациентов
75 161
заметок
32 526
обращений
0
осиротевших связей
Коротко

Частые вопросы

Что такое Entity Indexes простыми словами?

Это набор ключевых полей сущности, который отвечает на три вопроса: кто это (PRIMARY — идентичность), в каком контексте (CTX — клиника, филиал) и с чем связано (FK — ссылка на другую таблицу). Без них файлы остаются отдельными таблицами; с ними получается связанная база.

Чем PRIMARY отличается от обычного поля?

PRIMARY задаёт идентичность записи — по нему система понимает, что две строки описывают один и тот же объект. Он же используется для поиска дубликатов. Обычные поля просто переносят значения.

Как настроить связь между файлами?

В панели Entity Indexes у поля-связи (FK →) нажмите «Настроить связь». Дальше выберите колонку в этом файле или найдите соответствие через другой файл. Если связь не настроена, система пометит это как «No matching index found».

Как система решает, какие строки — дубликаты?

По PRIMARY-полю из Entity Indexes. Строки с одинаковым значением ключа считаются одной записью — в базу попадает одна, остальные помечаются дубликатами. Чтобы изменить логику, скорректируйте состав PRIMARY (например, добавьте дату рождения).

Что означает «skip» у строки?

Строку нельзя вставить, потому что пусто обязательное поле. Такие строки собраны на вкладке SQL skips в панели батча — их видно до импорта. В примере пропусков нет (skip 0).

Почему просмотр середины большого файла быстрый?

При загрузке система один раз запоминает, где начинается каждая строка, и дальше прыгает сразу к нужному месту вместо перечитывания файла с начала. Отдельно ничего включать не нужно.