当前位置: 首页 > 面试题库 >

查询执行错误期间超出了资源,Google BigQuery

边永贞
2023-03-14
问题内容

有什么想法可以使该查询在Google
BigQuery上返回结果吗?我收到超出资源的错误…数据集中大约有2B行。我正在尝试获取每个user_id最多出现的艺术家ID。

select user_id, artist, count(*) as count
from [legacy20130831.merged_data] as d
group each by user_id, artist
order by user_id ASC, count DESC

问题答案:

对公共数据的等效查询,引发相同的错误:

SELECT actor, repository_name, count(*) AS count
FROM [githubarchive:github.timeline] AS d
GROUP EACH BY actor, repository_name
ORDER BY actor, count desc

与相同的查询进行比较,再加上要返回的结果的限制。这有效(对我来说是14秒):

SELECT actor, repository_name, count(*) as count
FROM [githubarchive:github.timeline] as d
GROUP EACH BY actor, repository_name
ORDER BY actor, count desc
LIMIT 100

除了使用LIMIT之外,您还可以使用user_id的一小部分。在我的情况下,1/3有效:

SELECT actor, repository_name, count(*) as count
FROM [githubarchive:github.timeline] as d
WHERE ABS(HASH(actor) % 3)  = 0
GROUP EACH BY actor, repository_name

但是,您真正想要的是“获取对于每个user_id最多出现的艺术家ID”。让我们更进一步,并获得:

SELECT actor, repository_name, count FROM (
  SELECT actor, repository_name, count, ROW_NUMBER() OVER (PARTITION BY actor ORDER BY count DESC) rank FROM (
    SELECT actor, repository_name, count(*) as count
    FROM [githubarchive:github.timeline] as d
    WHERE ABS(HASH(actor) % 10) = 0
    GROUP EACH BY actor, repository_name
))
WHERE rank=1

请注意,这次我使用了%10,因为它可以使我更快地获得结果。但是您可能想知道“我想通过一个查询而不是10个查询来获得结果”。

您可以执行以下两项操作:

  • 合并分区表(FROM表达式中的逗号进行并集,而不是BigQuery中的联接)。
  • 如果仍然超出资源,则可能需要实现该表。运行原始查询,然后将结果保存到新表中。在该表上而不是内存组中运行RANK()算法。

如果您愿意与我共享您的数据集,我可以提供特定于数据集的建议(很大程度上取决于基数)。



 类似资料:
  • 执行获取HQL查询时出现异常。查询大部分时间都有效,但有时会显示此异常 数据库是MySQL,使用的服务器是JBoss 5.1.0 GA 显示的错误是: 组织。冬眠例外GenericJDBCException:无法在组织上执行查询。冬眠例外SQLStateConverter。在组织中处理非特定异常(SQLStateConverter.java:126)。冬眠例外SQLStateConverter。o

  • 使用执行hql查询时出现错误 我的疑问是 堆栈跟踪是

  • 你能帮我解决这个错误吗? 2017-08-05 18:54:18,421 INFOsqlalchemy.engine.base.Engine(4L,)2017-08-05 18:54:18,424 INFOsqlalchemy.engine.base.Engine COMMIT127.0.0.1--[05/Aug/2017 18:54:18]"GET/HTTP/1.1"200-127.0.0.1

  • 当“事件ID”与“用户ID”匹配时,im会尝试从我的“事件”表中选择所有数据。然而,我得到一个错误1242,子查询返回超过1行。 我理解我的子查询将返回多行,因为一个用户可以参加多个事件。那么我如何使我的查询接受多行呢?

  • 我目前使用的是mysql 我有两个名为person和zim_list_id的表,这两个表都有超过200万行

  • 我对Neo4J花了不少心思,但对graphql却一筹莫展 我通过运行以下操作创建了graphql模式: 我有一个带有三个标签的节点类型。我尝试在graphiql中运行以下查询,得到了同样的错误。由于堆栈的原因,我想知道graphiql是否在添加meta并移动到了neo4j浏览器--同样的错误。 查询: 错误: 我可能做了一些明显错误的事情,但任何帮助都将是感激的