Sql 如何查询Google BigQuery表并基于列的子集删除重复项?

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

我有一个查询,它连接两个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 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
子句的方法