如何通过删除基于8列中的2列的重复项来清理BigQuery表?

时间:2018-06-06 15:58:02

标签: sql google-bigquery

我有一个包含BigQuerycol_1_idcol_2_idcol_3col_4col_5列的Google col_6表格,col_7col_8

问题在于,有许多行具有相同的col_1_idcol_2_id,并且我必须使其唯一。我已尝试基于两列的GROUP BY表,然后选择第一列,但这需要太多内存。

如何清理表格,使得没有两行具有相同的col_1_idcol_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 :(得分:2)

我会尝试重新创建表格:

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;

之后删除旧表并重命名。