如何允许加入剔除大查询视图?

时间:2017-08-05 23:03:06

标签: google-bigquery

我想确保在谷歌大查询连接中使用视图何时剔除/排除未使用列的表。

例如。

如果视图是

Select  _fact.A
, _Dim.B
from _fact
inner join _dim
on _fact.dim_sk = _dim.Dim_sk

我查询

Select _fact.A 
from _view

它会忽略join

中的_dim

在SQL Server中,如果您创建外部密钥关系,它将执行此操作。

1 个答案:

答案 0 :(得分:1)

BigQuery没有主键的概念,所以没有办法预先形成这样的优化;它事先并不知道_dim中的所有密钥都是唯一的。但是,您可以创建此表单的视图:

#standardSQL
SELECT
  A,
  (SELECT B FROM _dim
   WHERE _dim.dim_sk = _fact.dim_sk) AS B
FROM _fact;

当您从此视图中仅选择A时,查询不应该最终扫描_dim中的任何列。您需要确保在任一表中都没有dim_sk的重复值,否则您将收到标量子查询生成多个元素的错误。