-- Загрузка всех строк из stg.routes_ext в stg.routes (full load).
-- Используем batch_id для отслеживания загрузки.

INSERT INTO stg.routes (
    route_no,
    validity,
    departure_airport,
    arrival_airport,
    airplane_code,
    days_of_week,
    scheduled_time,
    duration,
    src_created_at_ts,
    load_dttm,
    batch_id
)
SELECT
    ext.route_no::text,
    ext.validity::text,
    ext.departure_airport::text,
    ext.arrival_airport::text,
    ext.airplane_code::text,
    ext.days_of_week::text,
    ext.scheduled_time::text,
    ext.duration::text,
    now()::timestamp,
    now()::timestamp,
    '{{ run_id }}'::text
FROM stg.routes_ext AS ext
WHERE NOT EXISTS (
    -- Идемпотентность: при повторном запуске/ретрае не вставляем повторно те же строки в рамках текущего batch_id.
    -- Считаем ключом строки (route_no, validity).
    SELECT 1
    FROM stg.routes AS r
    WHERE r.batch_id = '{{ run_id }}'::text
        AND r.route_no = ext.route_no::text
        AND r.validity = ext.validity::text
);

-- Обновляем статистику для оптимизатора Greenplum
-- Это критично для корректной работы оптимизатора и выбора оптимального плана выполнения
ANALYZE stg.routes;
