来自文档:
正常的JOIN操作要求右侧表包含较少的内容 超过8 MB的压缩数据。 EACH修饰符是一个提示通知 JOIN可能引用两个大的查询执行引擎 表。 EACH修饰符不能用于CROSS JOIN子句。
如果可能,请使用JOIN而不使用EACH修饰符 性能。当表格大小对于JOIN来说太大时,请使用JOIN EACH。
为什么不自动?
有没有办法简化这个?我可以总是使用JOIN EACH 或者总是使用JOIN(由于上面写的8mb限制,似乎我不能总是使用join)
答案 0 :(得分:1)
BigQuery将许多服务器中的信息处理并行化,这些服务器将压缩信息传递到树形拓扑中的其他服务器上。一切都以根节点结束,并且一些BigQuery限制来自这个瓶颈:您可以读取“无限”数量的数据,但查询的输出必须适合单个服务器。
(2010年Dremel论文http://research.google.com/pubs/pub36632.html中的更多细节)
为了克服这个限制,引入了EACH关键字:它强制在起始级别进行随机播放,允许任务并行化 - 无需单个输出节点 - 并允许无限大小的JOINing表。这种方法有一些缺点,比如失去ORDER BY最终结果的能力,因为没有一个节点可以看到整个输出。
BigQuery是否可以检测何时自动使用EACH?理想情况下,但是现在EACH关键字允许您完成以前不可能的操作 - 缺点是需要您了解它。