Пять этапов миграции
Внутри проекта сверху идут вкладки этапов. Проходят их слева направо — каждый следующий открывается, когда подтверждён предыдущий. Mapping — центральный: именно там вы принимаете решения, всё остальное их исполняет.
1 · Profiles
Автоматический разбор файлов: колонки, типы, примеры значений.
2 · Mapping главный
Сопоставление полей, Entity Indexes и связи между файлами.
3 · Transform
Прогон данных по маппингу, просмотр результата по батчам.
4 · Import SQL
Генерация SQL, вставка в изолированную схему и сверка.
Mapping — сопоставление полей
На этом этапе вы говорите системе, куда в Ambula ложится каждое поле из файлов клиники. Слева — целевое поле таблицы Ambula (TARGET FIELD), справа — откуда берётся значение (TRANSFORM / EXPRESSION): колонка исходника, формула, значение по умолчанию или константа.
Как читать выражения полей
computed Формула
TRIM({"patients_clean.csv"."first_name"}) — значение берётся из колонки и преобразуется (обрезка пробелов, парсинг даты и т.п.).
DEF Значение БД
DB default (now()) — поле заполнит сама база при вставке. Указывать источник не нужно.
Прямая колонка
{"patients_clean.csv"."email"} — значение переносится как есть, без преобразований.
Entity Indexes — идентичность и связи
Справа от таблицы маппинга — панель ENTITY INDEXES. Это ключевые поля целевой сущности: по ним запись опознаётся (кто это), получает контекст (клиника, филиал) и связывается с другими сущностями. Именно эти поля делают из набора отдельных файлов единую связанную базу.
Типы индекс-полей
Идентичность записи
По каким полям запись считается уникальной. Это же — ключ поиска дубликатов.
first_name + last_nameЗначение из контекста
Берётся из настроек проекта (медцентр, филиал), а не из файла — одинаково для всех строк.
medical_center_id, branch_idСвязь с другой сущностью
Внешний ключ: ссылка на запись другой таблицы. Значение подставляется на импорте.
medical_id → medicalСвязи между файлами
Данные клиники приходят разными файлами: пациенты, обращения, заметки. Чтобы обращение «знало» своего пациента, файлы соединяются по общей колонке. Эти связи вы видите и подтверждаете в маппинге — блок FILES показывает, какой файл к какой сущности привязан.
Файл → сущность
charges_clean.csv → claims, patients_clean.csv → patients. Один файл = одна сущность Ambula.
Связь по ключу
Обращение ссылается на пациента через FK →. На импорте ссылка превращается в реальный ID.
Проверка целостности
После импорта видно «осиротевшие» ссылки — записи без пары. В примере ниже их 0.
Дубликаты
В экспортах клиники один и тот же пациент нередко встречается несколько раз. Система находит такие повторы по PRIMARY-полю из Entity Indexes — тому самому ключу идентичности. Из группы одинаковых записей в базу попадает одна, остальные помечаются как дубликаты и не создают лишних записей.
Как это связано с Entity Indexes
Где смотреть и разбирать
На этапе Transform откройте любой батч (кнопка Open batch). В панели батча сверху есть фильтр Duplicates — он оставляет только строки-дубликаты этого куска.
Для дубликата видно, какая строка оставлена, а какая отброшена — их можно сравнить бок о бок. Если решение неверное, его можно переопределить вручную (оставить другую строку).
Просмотр данных по батчам
После маппинга данные прогоняются и разбиваются на батчи по 500 строк. Любой кусок — даже в файле на миллионы строк — открывается мгновенно: система заранее запоминает, где лежит каждая строка, и прыгает сразу к нужной.
Выберите файл и кусок
На вкладке Transform, в блоке Processing files: в Source file — файл (видно число батчей), в Batch — диапазон строк, затем Open batch.
Читайте строки и фильтруйте
Справа откроется панель со сводкой (rows 69501–70000 · ok 500 · skip 0) и таблицей строк. Фильтры: All / OK / Issues / Duplicates / SQL skips.
Импорт и проверка целостности
На вкладке Import SQL генерируется SQL, данные вставляются в изолированную схему и сверяются. Видно количество строк по каждой таблице (уже без дубликатов) и есть ли «осиротевшие» связи.
Частые вопросы
Что такое Entity Indexes простыми словами?
Это набор ключевых полей сущности, который отвечает на три вопроса: кто это (PRIMARY — идентичность), в каком контексте (CTX — клиника, филиал) и с чем связано (FK — ссылка на другую таблицу). Без них файлы остаются отдельными таблицами; с ними получается связанная база.
Чем PRIMARY отличается от обычного поля?
PRIMARY задаёт идентичность записи — по нему система понимает, что две строки описывают один и тот же объект. Он же используется для поиска дубликатов. Обычные поля просто переносят значения.
Как настроить связь между файлами?
В панели Entity Indexes у поля-связи (FK →) нажмите «Настроить связь». Дальше выберите колонку в этом файле или найдите соответствие через другой файл. Если связь не настроена, система пометит это как «No matching index found».
Как система решает, какие строки — дубликаты?
По PRIMARY-полю из Entity Indexes. Строки с одинаковым значением ключа считаются одной записью — в базу попадает одна, остальные помечаются дубликатами. Чтобы изменить логику, скорректируйте состав PRIMARY (например, добавьте дату рождения).
Что означает «skip» у строки?
Строку нельзя вставить, потому что пусто обязательное поле. Такие строки собраны на вкладке SQL skips в панели батча — их видно до импорта. В примере пропусков нет (skip 0).
Почему просмотр середины большого файла быстрый?
При загрузке система один раз запоминает, где начинается каждая строка, и дальше прыгает сразу к нужному месту вместо перечитывания файла с начала. Отдельно ничего включать не нужно.