Выбор ответа Junior SQL дата-инженера спрашивают часто обновлено

Почему DISTINCT не убирает дубли событий

Вопрос

В таблице событий одно и то же событие записано дважды: с одинаковым event_id, но разным received_at (время получения). Почему SELECT DISTINCT * не помогает?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Строки отличаются в receivedat, и для DISTINCT они разные; нужен ROWNUMBER или DISTINCT ON по ключу. DISTINCT сравнивает строки целиком.

Варианты ответа

  1. DISTINCT не работает с временными метками: значения timestamptz с часовым поясом не сравниваются между собой
  2. Строки отличаются в received_at, и для DISTINCT они разные; нужен ROW_NUMBER или DISTINCT ON по ключуправильный ответ
  3. DISTINCT работает только с одной колонкой, а при * он молча сравнивает лишь первую из них
  4. DISTINCT удаляет дубли только при наличии уникального индекса по всем колонкам таблицы

Разбор

DISTINCT сравнивает строки целиком. Технические поля вроде времени получения делают копии разными. Нужно выбрать ключ дедупликации (event_id) и правило, какую копию оставить. С временными метками DISTINCT работает, колонок может быть много, индекс не влияет на результат.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.