在SQL中,我使用以下代码根据唯一ID从表中删除重复项:
1. SELECT Unique_ID INTO holdkey FROM [Origination] GROUP BY Unique_ID HAVING count(*) > 1
2. SELECT DISTINCT Origination.*
INTO holddups
FROM [Origination], holdkey
WHERE [Origination].Unique_ID = holdkey.Unique_ID
3. DELETE Origination
FROM Origination, holdkey
WHERE Origination.Unique_ID = holdkey.Unique_ID
4. INSERT Origination SELECT * FROM holddups
Run Code Online (Sandbox Code Playgroud)
第二个过程不适用于BigQuery。无论我如何更改查询,对于无法识别的列和表,都会出现错误。
很显然,我删除了“ select into”查询,只是手动设置了目标表。我有SQL经验,并且知道该过程有效。是否有人有语法样本,可用于根据BQ的唯一ID删除重复记录的过程?还是修改它的方式使其运行?
所以,关键是在具有适度的SELECT这里
以下示例适用于BigQuery标准SQL
#standardSQL
SELECT row[OFFSET(0)].* FROM (
SELECT ARRAY_AGG(t ORDER BY value DESC LIMIT 1) row
FROM `project.dataset.table_with_dups` t
GROUP BY id
)
Run Code Online (Sandbox Code Playgroud)
您可以使用以下虚拟数据来测试/玩游戏
#standardSQL
WITH `project.dataset.table_with_dups` AS (
SELECT 1 id, 2 value UNION ALL SELECT 1,3 UNION ALL SELECT 1,4 UNION ALL
SELECT 2,5 UNION ALL
SELECT 3,6 UNION ALL SELECT 3,7 UNION ALL
SELECT 4,8 UNION ALL
SELECT 5,9 UNION ALL SELECT 5,10
)
SELECT row[OFFSET(0)].* FROM (
SELECT ARRAY_AGG(t ORDER BY value DESC LIMIT 1) row
FROM `project.dataset.table_with_dups` t
GROUP BY id
)
Run Code Online (Sandbox Code Playgroud)
结果为
Row id value
1 1 4
2 2 5
3 3 7
4 4 8
5 5 10
Run Code Online (Sandbox Code Playgroud)
如您所见,通过id使行具有最大的值,它很容易重复删除表。不管该表中还有多少其他列-上面的方法仍然有效(它不在乎架构,而不是ID和值)
因此,现在,您可以使用上面的SELECT并将结果插入到新表中或覆盖原始表等,这些操作全部合而为一!
| 归档时间: |
|
| 查看次数: |
2267 次 |
| 最近记录: |