[英]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.