Вступить в клуб →
средняявопросСлои DWH и моделирование витрин

Как оставить актуальную версию записи из потока CDC

В ODS из CDC-потока приезжают все изменения клиентов: на один client_id может быть несколько строк (вставка и последующие обновления), у каждой есть время события event_ts и порядковый номер изменения. В DDS нужна одна строка на клиента — самая свежая.

SELECT *
FROM (
  SELECT t.*,
         row_number() OVER (PARTITION BY /* ? */ ORDER BY /* ? */) AS rn
  FROM ods.clients_cdc t
) x
WHERE rn = 1;

Чем корректно заполнить пропуски?

  • PARTITION BY client_id, ORDER BY event_ts DESC
  • PARTITION BY event_ts, ORDER BY client_id
  • PARTITION BY всем колонкам строки, ORDER BY client_id DESC
  • Оконная функция здесь лишняя: достаточно SELECT DISTINCT по всем колонкам

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела