Google BigQuery GROUP BY 超时

Posted

技术标签:

【中文标题】Google BigQuery GROUP BY 超时【英文标题】:Google BigQuery GROUP BY timeout 【发布时间】:2016-04-05 10:06:45 【问题描述】:

我正在尝试通过 Google BigQuery 从 github 存档中查询协作者登录信息、存储库语言和名称。如果我排除 GROUP BY,则以下查询可以正常工作,但是使用 GROUP BY,查询将永远持续下去,直到我从 google bigquery 获得超时。由于 Google BigQuery 没有 DISTINCT,我尝试使用 GROUP BY 作为 DISTINCT,这样我就不会得到重复的行。这是我正在使用的查询:

SELECT
    a1.actor_attributes_login,
    a2.actor_attributes_login,
    a1.repository_language,
    a1.repository_name,
FROM
    [githubarchive:year.2014] AS a1
LEFT JOIN
    [githubarchive:year.2014] AS a2
ON
    a1.repository_name = a2.repository_name
WHERE
    a1.actor_attributes_login != a2.actor_attributes_login
    AND a1.actor_attributes_location = "California"
    AND (a1.repository_language = "Java"
      OR a1.repository_language = "Python")
GROUP BY
    a1.actor_attributes_login,
    a2.actor_attributes_login,
    a1.repository_language,
    a1.repository_name
LIMIT
    10000

【问题讨论】:

【参考方案1】:

嗯。您可以尝试在 进行连接之前删除重复项:

SELECT a1.actor_attributes_login, a2.actor_attributes_login,
       a1.repository_language, a1.repository_name
FROM (SELECT a.actor_attributes_login, a.repository_language, a1.repository_name
      FROM githubarchive:year.2014] a
      WHERE a.actor_attributes_location = 'California AND
            a.repository_language IN ('Java', 'Python')
      GROUP BY a.actor_attributes_login, a.repository_language, a.repository_name
     ) a1 LEFT JOIN
     (SELECT a1.actor_attributes_login, a1.repository_language, a1.repository_name
      FROM githubarchive:year.2014] a1
      GROUP BY a1.actor_attributes_login, a1.repository_language, a1.repository_name
     ) a2
     ON a1.repository_name = a2.repository_name
WHERE a1.actor_attributes_login <> a2.actor_attributes_login
LIMIT 10000;

如果您消除子查询中的重复项,我认为您不需要外部 GROUP BY

此外,如果您使用的是LIMIT,您应该有一个ORDER BY

【讨论】:

啊传奇!我不得不在第一个内部选择中更改名称 a1,因为它用于该表中的 2 个表,并且它被拒绝,因为它模棱两可,但除此之外它工作得很好。谢谢!

以上是关于Google BigQuery GROUP BY 超时的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery GROUP BY/GROUP EACH BY 资源超出错误,但查询不包含 GROUP BY 运算符

BIGQUERY 中的 COUNT() 和 GROUP BY

BigQuery 和 GROUP BY 子句

Bigquery:选择具有不在group by子句中的任何值的列

GROUP by 查询(三元组)的 BigQuery 内部错误

BigQuery 对两列使用 Group By 函数,顺序无关紧要