Как очистить таблицу BigQuery, удалив дубликаты на основе 2 из 8 столбцов? - PullRequest
0 голосов
/ 06 июня 2018

У меня есть таблица Google BigQuery со столбцами col_1_id, col_2_id, col_3, col_4, col_5, col_6, col_7, col_8

Проблема в том, что есть много строк с одинаковыми col_1_id и col_2_id, которые я должен сделать уникальными.Я попытался сгруппировать таблицу на основе двух столбцов, а затем выбрать первый, но это занимает слишком много памяти.

Как очистить таблицу, чтобы не было двух строк с одинаковыми col_1_id, col_2_id?

Это то, что я попытался и потерпел неудачу:

SELECT
  col_1_id,
  col_2_id,
  ANY_VALUE(col_3), 
  ANY_VALUE(col_4),
  ANY_VALUE(col_5),
  ANY_VALUE(col_6),
  ANY_VALUE(col_7),
  ANY_VALUE(col_8)
FROM
  `my_proj.my_table` A
GROUP BY
  A.col_1_id,
  A.col_2_id

но я получаю сообщение вроде:

Ошибка: ресурсы превышены во время выполнения запроса: запрос не может быть выполнен в выделенной памяти.Оператор GROUP BY использовал слишком много памяти

, а также я не уверен, как это приведет к удалению строк.

Как получить запрос, который либо удаляет дубликаты на месте, либо создает новую таблицу с результатами?

1 Ответ

0 голосов
/ 06 июня 2018

Я бы попытался воссоздать таблицу:

CREATE TABLE new_tab_name
AS
SELECT * EXCEPT rn
FROM(SELECT *,ROW_NUMBER() OVER(PARTITION BY col_1_id,col_2_id ORDER BY 1) AS rn
     FROM tab_name) sub
WHERE rn = 1;

После этого удалите старую таблицу и переименуйте.

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