-- Загрузка ODS по airports: Полная перезагрузка (TRUNCATE + INSERT).
-- Почему: для справочников-снимков в Greenplum на AO-таблицах 
-- эффективнее перетереть данные целиком, чем делать медленный UPDATE.

TRUNCATE TABLE ods.airports;

INSERT INTO ods.airports (
    airport_code,
    airport_name,
    city,
    country,
    coordinates,
    timezone,
    _load_id,
    _load_ts
)
WITH src AS (
    -- Выбираем последний снимок из STG для текущего батча
    SELECT
        s.airport_code,
        s.airport_name::json->>'ru' AS airport_name,
        s.city::json->>'ru' AS city,
        s.country::json->>'ru' AS country,
        s.coordinates,
        s.timezone,
        ROW_NUMBER() OVER (
            PARTITION BY s.airport_code
            ORDER BY s._load_ts DESC, s.event_ts DESC NULLS LAST
        ) AS rn
    FROM stg.airports AS s
    WHERE s._load_id = '{{ ti.xcom_pull(task_ids="resolve_stg_batch_id") }}'::text
)
SELECT
    s.airport_code,
    s.airport_name,
    s.city,
    s.country,
    s.coordinates,
    s.timezone,
    '{{ ti.xcom_pull(task_ids="resolve_stg_batch_id") }}'::text,
    now()
FROM src AS s
WHERE s.rn = 1;

ANALYZE ods.airports;
