为什么有每个修饰符?

时间:2015-01-08 03:00:44

标签: google-bigquery

来自文档:

  

正常的JOIN操作要求右侧表包含较少的内容   超过8 MB的压缩数据。 EACH修饰符是一个提示通知   JOIN可能引用两个大的查询执行引擎   表。 EACH修饰符不能用于CROSS JOIN子句。

     

如果可能,请使用JOIN而不使用EACH修饰符   性能。当表格大小对于JOIN来说太大时,请使用JOIN EACH。

为什么不自动?

有没有办法简化这个?我可以总是使用JOIN EACH 或者总是使用JOIN(由于上面写的8mb限制,似乎我不能总是使用join)

1 个答案:

答案 0 :(得分:1)

BigQuery将许多服务器中的信息处理并行化,这些服务器将压缩信息传递到树形拓扑中的其他服务器上。一切都以根节点结束,并且一些BigQuery限制来自这个瓶颈:您可以读取“无限”数量的数据,但查询的输出必须适合单个服务器。

(2010年Dremel论文http://research.google.com/pubs/pub36632.html中的更多细节)

为了克服这个限制,引入了EACH关键字:它强制在起始级别进行随机播放,允许任务并行化 - 无需单个输出节点 - 并允许无限大小的JOINing表。这种方法有一些缺点,比如失去ORDER BY最终结果的能力,因为没有一个节点可以看到整个输出。

BigQuery是否可以检测何时自动使用EACH?理想情况下,但是现在EACH关键字允许您完成以前不可能的操作 - 缺点是需要您了解它。