Улучшения комментариев

This commit is contained in:
2026-01-18 21:56:17 +03:00
parent 761cf5dd93
commit e5a9a07f01
10 changed files with 16 additions and 9 deletions
+3 -2
View File
@@ -89,7 +89,7 @@
- Для snapshot-справочников (`airports`, `airplanes`, `routes`, `seats`) пустой источник считаем ошибкой:
это почти всегда признак проблем с PXF/источником.
### 3.2. Комментарии в `*_load.sql`: точнее формулировать “идемпотентность”, а не “дедупликацию источника”
### 3.2. Комментарии в `*_load.sql`: точнее формулировать “идемпотентность”, а не “дедупликацию источника” (статус: исправлено)
Типовой паттерн:
```sql
@@ -101,7 +101,8 @@ WHERE NOT EXISTS (
Это в первую очередь защита от повторного запуска того же таска в рамках одного `batch_id` (retry),
а не “лечение” дублей в источнике.
Рекомендация: заменить формулировку комментариев на “идемпотентность для текущего батча”.
Что сделано:
- В `sql/stg/*_load.sql` комментарии приведены к формулировке “идемпотентность при повторном запуске/ретрае”.
### 3.3. Проверка составных ключей: избегать склейки строк
+1 -1
View File
@@ -20,7 +20,7 @@ SELECT
'{{ run_id }}'::text
FROM stg.airplanes_ext AS ext
WHERE NOT EXISTS (
-- Защита от дублей в рамках одного batch_id
-- Идемпотентность: при повторном запуске/ретрае не вставляем повторно те же строки в рамках текущего batch_id.
SELECT 1
FROM stg.airplanes AS a
WHERE a.batch_id = '{{ run_id }}'::text
+1 -1
View File
@@ -24,7 +24,7 @@ SELECT
'{{ run_id }}'::text
FROM stg.airports_ext AS ext
WHERE NOT EXISTS (
-- Защита от дублей в рамках одного batch_id
-- Идемпотентность: при повторном запуске/ретрае не вставляем повторно те же строки в рамках текущего batch_id.
SELECT 1
FROM stg.airports AS a
WHERE a.batch_id = '{{ run_id }}'::text
+2 -1
View File
@@ -23,7 +23,8 @@ SELECT
'{{ run_id }}'::text
FROM stg.boarding_passes_ext AS ext
WHERE NOT EXISTS (
-- Защита от дублей в рамках одного batch_id
-- Идемпотентность: при повторном запуске/ретрае не вставляем повторно те же строки в рамках текущего batch_id.
-- Считаем ключом строки (ticket_no, flight_id).
SELECT 1
FROM stg.boarding_passes AS bp
WHERE bp.batch_id = '{{ run_id }}'::text
+1
View File
@@ -29,6 +29,7 @@ FROM stg.bookings_ext AS ext
CROSS JOIN max_batch_ts AS mb
WHERE ext.book_date > mb.max_ts
AND NOT EXISTS (
-- Идемпотентность: при повторном запуске/ретрае не вставляем повторно те же строки в рамках текущего batch_id.
SELECT 1
FROM stg.bookings AS b
WHERE b.batch_id = '{{ run_id }}'::text
+1
View File
@@ -37,6 +37,7 @@ FROM stg.flights_ext AS ext
CROSS JOIN max_batch_ts AS mb
WHERE ext.scheduled_departure > mb.max_ts
AND NOT EXISTS (
-- Идемпотентность: при повторном запуске/ретрае не вставляем повторно те же строки в рамках текущего batch_id.
SELECT 1
FROM stg.flights AS f
WHERE f.batch_id = '{{ run_id }}'::text
+2 -1
View File
@@ -28,7 +28,8 @@ SELECT
'{{ run_id }}'::text
FROM stg.routes_ext AS ext
WHERE NOT EXISTS (
-- Защита от дублей в рамках одного batch_id по составному ключу (route_no, validity)
-- Идемпотентность: при повторном запуске/ретрае не вставляем повторно те же строки в рамках текущего batch_id.
-- Считаем ключом строки (route_no, validity).
SELECT 1
FROM stg.routes AS r
WHERE r.batch_id = '{{ run_id }}'::text
+2 -1
View File
@@ -18,7 +18,8 @@ SELECT
'{{ run_id }}'::text
FROM stg.seats_ext AS ext
WHERE NOT EXISTS (
-- Защита от дублей в рамках одного batch_id по составному ключу (airplane_code, seat_no)
-- Идемпотентность: при повторном запуске/ретрае не вставляем повторно те же строки в рамках текущего batch_id.
-- Считаем ключом строки (airplane_code, seat_no).
SELECT 1
FROM stg.seats AS s
WHERE s.batch_id = '{{ run_id }}'::text
+2 -1
View File
@@ -32,7 +32,8 @@ 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
-- Идемпотентность: при повторном запуске/ретрае не вставляем повторно те же строки в рамках текущего batch_id.
-- Считаем ключом строки (ticket_no, flight_id).
SELECT 1
FROM stg.segments AS s
WHERE s.batch_id = '{{ run_id }}'::text
+1 -1
View File
@@ -32,7 +32,7 @@ JOIN stg.bookings_ext AS b ON ext.book_ref = b.book_ref
CROSS JOIN max_batch_ts AS mb
WHERE b.book_date > mb.max_ts
AND NOT EXISTS (
-- Защита от дублей: ticket_no в источнике уникален, и в stg его не дублируем.
-- Идемпотентность: ticket_no — бизнес-ключ билета, не вставляем его повторно (включая ретраи/повторные запуски DAG).
SELECT 1
FROM stg.tickets AS t
WHERE t.ticket_no = ext.ticket_no