Google bigquery 在Google BigQuery中连接两个大小相同的表

Google bigquery 在Google BigQuery中连接两个大小相同的表,google-bigquery,Google Bigquery,我正在尝试连接两个表,每个表有57191行。BigQ正在寻找一个内/左侧较大的表,右侧较小的表。当我使用左边的表B运行它时,它会出错为“大表A必须首先出现”。当我切换查询并将表A放在From子句中时,它会出错为“大表B必须首先出现”。所以,当我按照它的指示去做时,它不会修复它,而是建议我的第一次(不正确的)尝试,除非我以某种方式搞砸了它 有点讽刺的是,如果这两个表的大小相同,它会根据一个表不小于另一个表来决定一个表更大。我试图找到一个解决方案,其中不包括我向其中一个表中添加一个无意义的行,然后在

我正在尝试连接两个表,每个表有57191行。BigQ正在寻找一个内/左侧较大的表,右侧较小的表。当我使用左边的表B运行它时,它会出错为“大表A必须首先出现”。当我切换查询并将表A放在From子句中时,它会出错为“大表B必须首先出现”。所以,当我按照它的指示去做时,它不会修复它,而是建议我的第一次(不正确的)尝试,除非我以某种方式搞砸了它

有点讽刺的是,如果这两个表的大小相同,它会根据一个表不小于另一个表来决定一个表更大。我试图找到一个解决方案,其中不包括我向其中一个表中添加一个无意义的行,然后在连接工作后尝试删除它(因为BigQ现在没有加载我的单行csv文件,我确信这是由于我的错误)

Google SQL语法连接规则似乎是

“加入”类型 Bigquery支持内部联接(默认)和左外部联接。 表2 这是联接中的第二个表,必须很小,并且将联接到FROM子句中出现的表。请注意,这可以是表名,也可以是另一个SELECT子句,在这种情况下,必须提供别名。 加入条件1,…,加入条件N。。。 联接条件集,它必须是相等条件的集合,所有这些条件都必须满足才能将行包括在结果中。(也就是说,我们只支持将这些条件与AND连接。)

我正在运行的实际SQL是

SELECT lt.activeprosperloans,[fieldsredacted], ...
FROM prosperloans1.listings2 AS lt
JOIN prosperloans1.zjoinedperfloans as ln
ON lt.key = listingkey;
实际的错误是: 错误:大型表prosperloans1.zjoinedperfloans必须显示为联接查询中最左侧的表

谢谢
Shawn

回答了这个问题后,BigQuery添加了JOIN EACH,这是一种连接两个大表的方法。请参阅Fh的答案,以了解如何使用每个连接的说明

本回复的其余部分用于历史目的: 一个大表(用于连接)的大小超过7MB。为了进行连接,整个小表被发送到集群中的每个节点,因此我们对其进行了相当大的限制。这可能是因为尽管两个表的行数相同,但一个表的行数大于7MB,而另一个表的行数较小


减少其中一个表的大小的一种方法是在查询中应用筛选器和列筛选器,并将结果保存为另一个临时表,然后将联接应用于临时表。例如,如果一个表中有10列数据跨越一个月的数据,但联接查询和最后一天的数据只需要3列,则可以首先选择这三列和最近的数据,并为结果命名。然后,您可以对该表进行联接。

由于回答了这个问题,BigQuery添加了join EACH,这是联接两个大表的一种方法。请参阅Fh的答案,以了解如何使用每个连接的说明

本回复的其余部分用于历史目的: 一个大表(用于连接)的大小超过7MB。为了进行连接,整个小表被发送到集群中的每个节点,因此我们对其进行了相当大的限制。这可能是因为尽管两个表的行数相同,但一个表的行数大于7MB,而另一个表的行数较小


减少其中一个表的大小的一种方法是在查询中应用筛选器和列筛选器,并将结果保存为另一个临时表,然后将联接应用于临时表。例如,如果一个表中有10列数据跨越一个月的数据,但联接查询和最后一天的数据只需要3列,则可以首先选择这三列和最近的数据,并为结果命名。然后可以对该表执行联接。

请注意,现在可以使用join EACH,有效地解决问题

您的查询将变成:

SELECT lt.activeprosperloans,[fieldsredacted], ...
FROM prosperloans1.listings2 AS lt
JOIN prosperloans1.zjoinedperfloans as ln
ON lt.key = listingkey;
从文档中:

如果可能,请在不使用每个修改器的情况下使用“连接”,以获得最佳性能。当表大小太大而无法联接时,请使用“联接”


请注意,现在您可以使用JOIN EACH,有效地解决问题

您的查询将变成:

SELECT lt.activeprosperloans,[fieldsredacted], ...
FROM prosperloans1.listings2 AS lt
JOIN prosperloans1.zjoinedperfloans as ln
ON lt.key = listingkey;
从文档中:

如果可能,请在不使用每个修改器的情况下使用“连接”,以获得最佳性能。当表大小太大而无法联接时,请使用“联接”


不用担心。由于它不是真正的“大数据”,我有幸将其导入Excel或Google Docs排序,并将其合并,现在就这样做。不用担心。由于它不是真正的“大数据”,我有幸将其导入Excel或Google文档排序,并将其合并,所以现在就这样做。