Выберите по одной записи из каждой из двух повторяющихся записей - PullRequest
0 голосов
/ 06 августа 2020

У меня есть приложение для обмена сообщениями, которое регулярно вставляет повторяющиеся сообщения в BigQuery. Имя таблицы 'метрики' , и в ней есть следующие поля: введите описание изображения здесь

Столбец Row - это большой запрос ROW_NUMBER (), который не является частью таблицы metrics . Все остальные столбцы, кроме batch_id , образуют 2 повторяющиеся строки для каждого message_id . Вы можете видеть, что message_id повторяется дважды, и для каждой вставки создается 1 другой batch_id.

Мне нужен такой вывод, только 3 строк должны быть в выбранном результате с 3 разными message_id вместо 6 строк, которые я здесь получаю. Было бы лучше, если бы была выбрана строка, которая была вставлена ​​первой среди дубликатов для каждого идентификатора сообщения (поскольку start_time и end_time одинаковы для дубликатов, я не уверен, как чтобы найти это). Я новичок в Bigquery, видел несколько примеров в sql, но не в Bigquery, поэтому любая помощь приветствуется

Спасибо за вашу помощь.

1 Ответ

1 голос
/ 07 августа 2020

Этот процесс дедупликации становится частью вашей бизнес-логи c, поэтому выберите один метод и оставайтесь последовательными. Я бы сделал что-то вроде этого:

with data as (
  select 
  *,
  row_number() over(partition by message_id order by batch_id asc) as rn
  from `project.dataset.table`
)
select * from data where rn = 1

Этот запрос выбирает строку, которая имеет «минимум» batch_id для каждого message_id. Ваш batch_id кажется случайным / хешированным (и не обязательно в определенном порядке c), поэтому это может или может работать для ваших целей, но он должен воспроизводить одни и те же результаты каждый раз (если не появится третья запись, тогда это может начинают меняться).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...