Удалить повторяющиеся одинаковые строки в BigQuery - PullRequest
0 голосов
/ 28 апреля 2020

Существует таблица с дублирующимися строками, в которой все значения столбцов равны:

+------+---------+------------+
|  id  |  value  | timestamp  |
+------+---------+------------+
| 1    |  500    | 2019-10-12 |
| 2    |  400    | 2019-10-11 |
| 1    |  500    | 2019-10-12 |
+------+---------+------------+

Я хочу сохранить одну из этих равных строк и удалить остальные. Я придумал:

DELETE
FROM
  `table` t1
WHERE (
  SELECT
    ROW_NUMBER() OVER (PARTITION BY id),
  FROM
    `table` t2
  WHERE
    t1.id = t2.id 
) > 1

Однако это не работает:

Коррелированные подзапросы, которые ссылаются на другие таблицы, не поддерживаются, если их нельзя декоррелировать, например, путем преобразования их в эффективное объединение.

Есть идеи, как удалить повторяющиеся строки?

1 Ответ

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

Ниже для BigQuery Standard SQL

... где все значения столбцов равны
Таким образом, вы можете использовать простой DISTINCT * и вместо DELETE использовать CREATE / REPLACE для обратной записи в ту же таблицу

#standardSQL
CREATE OR REPLACE TABLE `project.dataset.table`   
PARTITION BY date
SELECT DISTINCT * 
FROM `project.dataset.table`     

В предложении PARTITION BY - вы должны добавить поля, которые вы используете для разбиения исходной таблицы

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