【问题标题】:Deduplication of rows that almost the same in BigQueryBigQuery 中几乎相同的行的重复数据删除
【发布时间】:2020-10-01 22:02:54
【问题描述】:

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

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

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

【问题讨论】:

    标签: mysql sql database google-bigquery duplicates


    【解决方案1】:

    ...除了获取日期不同之外,这些行完全相同
    ...如何删除重复数据并保留任何获取日期都很好

    以下是 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])))    
    

    有输出

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

    如果您需要保留最近的收购日期 - 您可以使用以下版本:

    #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    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-01
      • 2019-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-18
      • 1970-01-01
      相关资源
      最近更新 更多