Google BigQuery 中超出的资源
Posted
技术标签:
【中文标题】Google BigQuery 中超出的资源【英文标题】:Resources Exceeded in Google BigQuery 【发布时间】:2019-07-08 15:25:48 【问题描述】:我正在尝试根据组织所在的城市和州从我们的数据库中检索组织列表,并按属性 org_name
分组。这些组织具有多个嵌套数组作为其他属性。我必须取消嵌套 LOCATIONS
聚合数组才能查询正确的位置。由于我按组织名称进行分组,因此我将每个数组的剩余所需属性与 ARRAY_CONCAT_AGG
聚合,然后运行名为 dedup
的用户定义函数以删除任何重复值,因为必须对所有所需属性进行分组或聚合。这在一张小桌子上完美运行,但当我扩大规模时,我收到以下错误。
Resources exceeded during query execution: The query could not be executed in the allotted memory. Peak usage: 116% of limit. Top memory consumer(s): aggregate functions and GROUP BY clauses: 95% other/unattributed: 5%
。
代码如下:
CREATE TEMP FUNCTION
dedup(val ANY TYPE) AS ((
SELECT
ARRAY_AGG(t)
FROM (
SELECT
DISTINCT *
FROM
UNNEST(val) v) t ));
SELECT
org_name,
dedup(ARRAY_CONCAT_AGG(sizes)) AS sizes,
dedup(ARRAY_CONCAT_AGG(org_nums)) AS org_nums,
dedup(ARRAY_CONCAT_AGG(location)) AS location,
dedup(ARRAY_CONCAT_AGG(types_of_professionals)) AS types_of_professionals,
dedup(ARRAY_CONCAT_AGG(specialties)) AS specialties
FROM
`merging_npi_medicare.practices`,
UNNEST(location) AS loc
WHERE
loc.professional_city = "HARRISBURG"
AND loc.professional_state = "PA"
GROUP BY
org_name
我的预期结果将是一张包含各种规模、电话号码、位置、专业人员类型和专长的独特组织的表格。但是,当我运行此代码时,我收到了超出内存的错误。我知道错误必须与我的许多聚合数组和 UDF 函数调用有关,但我根本不知道如何实现我想要的。
以下链接演示了我希望结果的外观。它是通过运行与上面相同的查询来实现的,只是使用了一个额外的参数,该参数只查找名称包含PINNACLE
的组织。
https://i.stack.imgur.com/8nJpb.png
我们将不胜感激!
【问题讨论】:
样本数据真的很有帮助。 【参考方案1】:我必须推测一下数据的样子。但是这样改写能解决问题吗?
select org_name,
(select array_agg(s.size)
from `merging_npi_medicare.practices` p cross join
unnest(sizes) s
where p.org_name = o.org_name
) as sizes
from (select distinct org_name
from `merging_npi_medicare.practices` cross join
unnest(location) AS loc
where loc.professional_city = 'HARRISBURG' and
loc.professional_state = 'PA'
) o;
【讨论】:
这样改写,然后为每个所需属性添加选择块,非常感谢!以上是关于Google BigQuery 中超出的资源的主要内容,如果未能解决你的问题,请参考以下文章
Big Query 着陆页数字与 Google Analytics 界面不一致
如何从 Google App Script 中的文件运行保存的 Big Query 脚本? [关闭]
如何将 Google 工作区数据自动导入 Big Query 数据库?