Sql 如何查询Google BigQuery表并基于列的子集删除重复项?
我有一个查询,它连接两个google表并生成一个包含6列的表(Sql 如何查询Google BigQuery表并基于列的子集删除重复项?,sql,google-bigquery,Sql,Google Bigquery,我有一个查询,它连接两个google表并生成一个包含6列的表(a,b,c,d,e,f)。接下来,我将该表移动到一个google bucket,然后将该google bucket下载到一堆CSV。最后,我将这些CV插入一个postgres数据库表,该表有两个主键,a和b 问题是google表中没有主键,有些行只有一个不同的值,因此我需要生成一个查询结果,即在a和b中没有重复项。我试过以下方法 SELECT DISTINCT A.a, A.b, A.c
a
,b
,c
,d
,e
,f
)。接下来,我将该表移动到一个google bucket,然后将该google bucket下载到一堆CSV。最后,我将这些CV插入一个postgres
数据库表,该表有两个主键,a
和b
问题是google表中没有主键,有些行只有一个不同的值,因此我需要生成一个查询结果,即在a
和b
中没有重复项。我试过以下方法
SELECT
DISTINCT A.a,
A.b,
A.c AS c,
A.d AS d,
B.c AS e,
B.d AS f
FROM
`my_proj.my_table_A` A
FULL OUTER JOIN
`my_proj.my_table_B` B
ON
A.a = B.a
AND A.b = B.b
…但它仍然允许a
和b
具有重复项,例如,如果f
不同。我只需要一个重复的行,不管是哪一行
如何仅基于
a
和b
删除重复项?使用分组依据和任意值:
SELECT
A.a,
A.b,
ANY_VALUE(A.c) AS c,
ANY_VALUE(A.d) AS d,
ANY_VALUE(B.c) AS e,
ANY_VALUE(B.d) AS f
FROM
`my_proj.my_table_A` A
FULL OUTER JOIN
`my_proj.my_table_B` B
ON
A.a = B.a
AND A.b = B.b
GROUP BY
A.a,
A.b
如果仅基于a
和b
进行重复数据消除,则不同的f
值会发生什么情况?你打算放弃其中一个吗?@ElliottBrossard,是的,只要放弃其中一个,因为我只需要其中一个。这可能会起作用,但BigQuery
会终止作业并请求执行“大作业”的权限,而我不愿意给予。我认为我的方法是消除表的重复,然后在表上运行我的查询。这可能是一个单独的问题,但您知道如何仅基于两列(如a
和b
)消除表中的重复吗?我不知道“大任务”是什么意思。这个答案已经说明了如何基于a
和b
进行重复数据消除。只需将GROUP BY
与任意值一起使用,您也可以将此模式应用于单个表。通过“大作业”我的意思是我得到了错误error:查询执行期间超出了资源:查询无法在分配的内存中执行。GROUPBY运算符使用了太多内存,因此我需要一种不使用GROUPBY
子句的方法