gpt4 book ai didi

google-bigquery - 可并行化 OVER EACH BY

转载 作者:行者123 更新时间:2023-12-02 03:36:17 27 4
gpt4 key购买 nike

我一次又一次地遇到这个障碍......

JOIN EACH and GROUP EACH BY clauses can't be used on the output of window functions

对于无法在单个节点上处理的非常大的数据集,是否有关于如何使用窗口函数 (Over()) 的最佳实践或建议?

分段我的数据并使用不同的过滤器运行相同的查询可以工作,但它非常有限,需要大量时间(和人工)并且成本高(对相同的数据集运行相同的查询 30 次而不是一次)。

引用下面 Jeremy 的回答...好多了,但仍然不能正常工作。如果我采用原始查询示例:

select title,count (case when contributor_id<>LeadContributor then 1 else null end) as different,
count (case when contributor_id=LeadContributor then 1 else null end) as same,
count(*) as total
from
(
SELECT title,contributor_id,lead(contributor_id)over(partition by title order by timestamp) as LeadContributor
FROM [publicdata:samples.wikipedia]
where regexp_match(title,r'^[A,B]')=true
)
group by title

现在工作...但是

select title,count (case when contributor_id<>LeadContributor then 1 else null end) as different,
count (case when contributor_id=LeadContributor then 1 else null end) as same,
count(*) as total
from
(
SELECT title,contributor_id,lead(contributor_id)over(partition by title order by timestamp) as LeadContributor
FROM [publicdata:samples.wikipedia]
where regexp_match(title,r'^[A-Z]')=true
)
group each by title

再次给出资源超出错误...

最佳答案

窗口函数现在可以根据 OVER 中给出的 PARTITION BY 子句以分布式方式执行。如果您为窗口函数提供 PARTITION BY,您的数据将被并行处理,类似于 JOIN EACH 和 GROUP EACH BY 的处理方式。

此外,您可以在不序列化执行的情况下对 JOIN EACH 或 GROUP EACH BY 的输出使用 PARTITION BY。为 PARTITION BY 使用与 JOIN EACH 或 GROUP EACH BY 相同的键特别有效,因为数据不需要在连接/聚合和窗口函数执行之间重新洗牌。

关于google-bigquery - 可并行化 OVER EACH BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23262753/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com