CDC в pandas: идемпотентный MERGE с проверкой
Одна и та же пачка изменений может прийти повторно. Напишите обработчик CDC на pandas, который применяет вставки, обновления и удаления, сохраняя результат при повторе той же пачки. Схема входных таблиц и правила выбора события приведены в условии.
Продолжить практику с Kafka, Airflow и Spark можно в платном курсе Data Engineering Fast-Track.
Условие
Задача. Реализуйте идемпотентное применение порции CDC к «серебряной» таблице.
Вам даны два pandas.DataFrame:
-
silver: текущее состояние таблицы
колонки:id: str,name: str,price: float,updated_at: datetime -
cdc: пакет изменений (может содержать несколько событий на одинid, порядок не гарантирован)
колонки:op: {'I','U','D'},id: str,name: str?,price: float?,event_ts: datetime,source_lsn: int
Нужно:
-
Нормализовать пакет CDC: для каждого
idоставить последнее событие по(event_ts, source_lsn)(latest-wins). -
Применить MERGE:
-
op='D'→ удалить строку сidизsilver. -
op in {'I','U'}→ upsert: еслиidесть — обновить; если нет — вставить. -
updated_at = event_ts. -
Если в CDC для поля
name/priceзначение отсутствует (NaN), сохранить старое значение (не затиратьNaN).
-
-
Вернуть кортеж
(silver_next, plan_str), гдеplan_strсодержит меткуMERGE_OK.
Требование по идемпотентности: повторное применение того же cdc к silver_next не должно менять результат.
Сигнатура:
def apply_cdc_merge(silver: pd.DataFrame, cdc: pd.DataFrame) -> tuple[pd.DataFrame, str]:
...
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
