BigQuery Cross Join永远运行

问题描述 投票:1回答:3

我想问一下BigQuery上的交叉联接。我执行交叉联接,其中2个表实际上非常大(比如说2百万和1百万),查询一直都在运行。要进行交叉联接,是否有其他方法或替代方法?

sql google-bigquery cross-join
3个回答
0
投票

如果从第一行开始有M行,从第二行开始有N行,则结果为M * N行。在您的情况下,1M * 1M会很大,查询将永远运行。请通过下面的链接定义交叉链接以避免反模式:https://cloud.google.com/bigquery/docs/best-practices-performance-patterns

或者,您可以编写您正在研究的特定问题,并且这里的人员可能会为您提供帮助。


0
投票

交叉联接意味着服务器需要将表A 每行与表B 每行映射,以获取所有可能的数据组合。在您的情况下,这将导致2 Million x 1 Million = 2×10¹²行供服务器生成!如果您确实需要交叉连接之类的东西,请使用random()函数对大表进行采样,以获取合理的小型测试集,然后稍后对其进行交叉连接,以减少输出集。


0
投票

如果需要将一个表中的每个元素与另一个表中的每个元素相关联,则必须使用交叉联接。在这种情况下,如果使用交叉联接,您将获得2万亿条记录的答案。在此page中,您可以找到BigQuery中的所有查询及其用法。

尝试更好地描述您的问题,因为交叉连接在这种情况下不太可能,因此我可以帮助您找到可行的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.