繁体   English   中英

BigQuery 中几乎相同的行的重复数据删除

[英]Deduplication of rows that almost the same in BigQuery

我在 BigQuery 中有一个表,表中的每一行都包含一篇文章及其相关信息。

对于同一篇文章,有重复的行。 但是,这些行完全相同,只是它们具有不同的获取日期。

我想知道如何删除重复数据并保留任何获取日期都可以。

...这些行完全相同,只是它们具有不同的获取日期
...如何删除重复数据并保留任何获取日期都可以

以下是 BigQuery 标准 SQL

#standardSQL
SELECT AS VALUE ANY_VALUE(t)
FROM `project.dataset.table` t
GROUP BY FORMAT('%t', (SELECT AS STRUCT * EXCEPT(acquisitionDate) FROM UNNEST([t]))) 

您可以使用完全简化的虚拟数据测试上述方法,如下例所示

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 1 id, 'aaa' info, 1 acquisitionDate UNION ALL
  SELECT 1, 'aaa', 2 UNION ALL
  SELECT 2, 'ccc', 3 UNION ALL
  SELECT 2, 'ccc', 4
)
SELECT AS VALUE ANY_VALUE(t)
FROM `project.dataset.table` t
GROUP BY FORMAT('%t', (SELECT AS STRUCT * EXCEPT(acquisitionDate) FROM UNNEST([t])))    

与 output

Row id  info    acquisitionDate  
1   1   aaa     1    
2   2   ccc     3      

如果您需要保留让我们说最近的 acquireDate - 您可以使用以下版本:

#standardSQL
SELECT AS VALUE ARRAY_AGG(t ORDER BY acquisitionDate DESC LIMIT 1)[OFFSET(0)]
FROM `project.dataset.table` t
GROUP BY FORMAT('%t', (SELECT AS STRUCT * EXCEPT(acquisitionDate) FROM UNNEST([t])))     

这将在下面返回

Row id  info    acquisitionDate  
1   1   aaa     2    
2   2   ccc     4    

最后,如果您需要保留所有获取日期 - 您可以在下面使用

#standardSQL
SELECT 
  ARRAY_AGG(x ORDER BY acquisitionDate DESC LIMIT 1)[OFFSET(0)].*,
  ARRAY_AGG(acquisitionDate) acquisitionDates
FROM `project.dataset.table` t,
UNNEST([(SELECT AS STRUCT * EXCEPT(acquisitionDate) FROM UNNEST([t]))]) x
GROUP BY FORMAT('%t', x)    

哪个输出

Row id  info    acquisitionDates     
1   1   aaa     1    
                2    
2   2   ccc     3    
                4    

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM