Google bigquery 如何从Google BigQuery中的非唯一记录生成唯一id

Google bigquery 如何从Google BigQuery中的非唯一记录生成唯一id,google-bigquery,Google Bigquery,我在BigQuery中有一个表,有5列,其中没有一列是唯一的id列。 我想检查一下这个表中是否有重复的行。目前,我使用下面的查询来实现这一点 选择conc,COUNT(*)作为总计 从(选择CONCAT(强制转换(col1作为字符串), 铸造(col2作为字符串), 铸造(col3作为字符串), 铸造(col4作为字符串), 铸造(col5作为管柱))作为混凝土 从) 按浓度分组 总数大于1 有没有更简单的方法?因为我实际上想对一个有几十列的表执行此操作 我想检查一下这个表中是否有重复的行 在这

我在BigQuery中有一个表,有5列,其中没有一列是唯一的id列。 我想检查一下这个表中是否有重复的行。目前,我使用下面的查询来实现这一点

选择conc,COUNT(*)作为总计
从(选择CONCAT(强制转换(col1作为字符串),
铸造(col2作为字符串),
铸造(col3作为字符串),
铸造(col4作为字符串),
铸造(col5作为管柱))作为混凝土
从)
按浓度分组
总数大于1

有没有更简单的方法?因为我实际上想对一个有几十列的表执行此操作

我想检查一下这个表中是否有重复的行

在这种情况下是有用的

#standardSQL
SELECT TO_JSON_STRING(t) AS row, COUNT(1) AS total
FROM `project.dataset.your_table` t
GROUP BY row
HAVING total > 1
更新

我认为使用可以提高性能。比如说

#standardSQL
SELECT 
  MD5(TO_JSON_STRING(t)) AS id, 
  ANY_VALUE(TO_JSON_STRING(t)) AS row, 
  COUNT(1) AS total
FROM `project.dataset.your_table` t
GROUP BY id
HAVING total > 1

为什么是CONCAT()而不是按col1,col2,col3分组?是的,这样更好,我大部分时间都这样做。我想我的问题是,真的有办法按*分组,而不是写出所有的列名吗?你可以使用数字列引用,这比键入列名快一点,例如
groupby 1,3,4,5,7,8,9
谢谢你,本,我不知道数字列引用。将会很有用。米哈伊尔-你做过任何性能测试来将这种方法与group by进行比较吗?@AlexeyMaloletkin-不,我没有。我想这真的取决于很多因素(比如列的数量、行甚至列的名称——短或宽,等等),所以把它留给OP:o)谢谢米哈伊尔,工作得很好。它在25秒内处理了一个包含35列(主要是浮点和整数)和180万行的表。查询是760MB。Group By在9秒钟内完成了同样的操作,但编写起来不太方便。太棒了!有道理。谢谢你的统计数据。考虑一下如果还没有投票:O)@ Balkan——见Update——很高兴知道这是否能提高性能(基于前面评论中的STATS表)