Как оставить актуальную версию записи из потока 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 по всем колонкам
