Удалить повторные данные в Bigquery - PullRequest
0 голосов
/ 03 апреля 2020

Я оптимизирую запрос в Bigquery, который показывает неповторяющиеся данные, в настоящее время это так, и он работает.

select * from (select ROW_NUMBER() OVER (PARTITION BY id) as num, id, created_at, operator_id, description from NAME_TABLE where created_at >='2018-01-01') where num=1

Я хотел спросите, возможно ли сделать GROUP BY со всеми столбцами (простым способом это невозможно сделать, так как crated_at не позволяет сгруппировать его), и сохраните первые данные create_at, которые появляются для каждого идентификатора

PD: DISTINCT не работает, поскольку существует более 80 миллионов записей (они увеличиваются на 2 миллиона в день), и он возвращает повторные данные

Ответы [ 2 ]

1 голос
/ 03 апреля 2020

Ниже для BigQuery Standard SQL

#standardSQL
SELECT AS VALUE ARRAY_AGG(t ORDER BY created_at LIMIT 1)[OFFSET(0)]
FROM `project.dataset.NAME_TABLE` t
WHERE created_at >='2018-01-01'
GROUP BY id

Вместо обработки / возврата всех столбцов - вы можете указать точный список, который вам нужен, как в примере ниже

#standardSQL
SELECT AS VALUE ARRAY_AGG(STRUCT(id,created_at,operator_id,description) ORDER BY created_at LIMIT 1)[OFFSET(0)]
FROM `project.dataset.NAME_TABLE`
WHERE created_at >='2018-01-01'
GROUP BY id   
0 голосов
/ 03 апреля 2020

Ваш запрос должен быть в порядке. Но вы можете сделать это без подзапроса:

select array_agg(nt order by created_at desc limit 1)[ordinal(1)].*
from name_table nt
where created_at >='2018-01-01'
group by id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...