BigQuery Cross Join永远运行

时间:2020-01-03 06:57:58

标签: sql google-bigquery cross-join

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

3 个答案:

答案 0 :(得分:1)

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

或者,您可以写出您正在处理的特定问题,这里的人也许可以为您提供帮助。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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