首页 文章

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

提问于
浏览
0

我有一个谷歌 BigQuery 表,列 col_1_id ,_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

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

如何清理表格,以便没有两行具有相同的 col_1_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 回答

  • 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;
    

    之后删除旧表并重命名 .

相关问题