我正在尝试在两个大表之间执行内部联接,其中每个表包含近3000万条记录。当我尝试在这两个表之间运行一个简单的INNER JOIN时,我得到一个错误,如下所示,要求我使用JOIN EACH语法,但我没有找到关于JOIN EACH的google引用的任何适当文档。有人可以分享一下这个想法吗?这是我的错误如下。
Error: Table too large for JOIN. Consider using JOIN EACH. For more details, please see https://developers.google.com/bigquery/docs/query-reference#joins
答案 0 :(得分:7)
看看你的问题,似乎只需要在doc available上阅读一下。
现在,在阅读了Jordan Tigani的书后,我可以告诉您,当您加入时,系统实际上会在处理查询的每个分片中发送较小的表。由于你的桌子都没有8 Mb以下,所以它不能简单地发送你的桌子(因为它太大了)。
方式"加入每个"工作是它告诉系统"散列两个表上的连接标准,并将每个表的子集发送到特定的碎片"。散列意味着无论您使用什么作为内部联接的条件,实际上都会在同一个分片中结束。它对性能有影响,但它是唯一可以使两个表大于8 mb的JOIN通过的方式。