Files
airflow-greenplum/sql/stg/segments_load.sql
T

46 lines
1.6 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- Загрузка инкремента из stg.segments_ext в stg.segments.
-- Инкремент определяется по дате бронирования (book_date из bookings.bookings)
-- через JOIN с таблицей tickets.
-- CTE для определения максимальной даты загрузки предыдущего батча
WITH max_batch_ts AS (
SELECT COALESCE(MAX(src_created_at_ts), TIMESTAMP '1900-01-01 00:00:00') AS max_ts
FROM stg.segments
WHERE batch_id <> '{{ run_id }}'::text
OR batch_id IS NULL
)
INSERT INTO stg.segments (
ticket_no,
flight_id,
fare_conditions,
price,
src_created_at_ts,
load_dttm,
batch_id
)
SELECT
ext.ticket_no,
ext.flight_id,
ext.fare_conditions,
ext.price::text,
b.book_date::timestamp,
now(),
'{{ run_id }}'::text
FROM stg.segments_ext AS ext
JOIN stg.tickets_ext AS t ON ext.ticket_no = t.ticket_no
JOIN stg.bookings_ext AS b ON t.book_ref = b.book_ref
CROSS JOIN max_batch_ts AS mb
WHERE b.book_date > mb.max_ts
AND NOT EXISTS (
-- Защита от дублей в рамках одного batch_id
SELECT 1
FROM stg.segments AS s
WHERE s.batch_id = '{{ run_id }}'::text
AND s.ticket_no = ext.ticket_no
AND s.flight_id = ext.flight_id
);
-- Обновляем статистику для оптимизатора Greenplum
-- Это критично для корректной работы оптимизатора и выбора оптимального плана выполнения
ANALYZE stg.segments;