基本上我在 BQ 中有两种不同类型的查询。第一个:
select q2.name, q1.* , q2.val1 from table1 as q1
inner join
(select name,val1, val2 from table2) as q2
on q1.name = q2.name
第二个是:
select q2.name, q1.* , q2.val1 from table1 as q1
inner join
(select name,val1, val2 from table2 where val1 = "X") as q2
on q1.name = q2.name
如您所见,唯一的区别是过滤 X 值。当我过滤 table2 内的 X 值时,table2 的大小几乎是一半。因此,当我应用“where”子句时,我的期望是减少数据字节。但是,当我--dry_run
在 BQ cli 中运行时。我得到了完全相同的数据字节。
Query successfully validated. Assuming the tables are not modified, running this query will process 6958332498714 bytes of data.
那么有人可以解释为什么我得到完全相同的处理数据大小吗?
BigQuery 减少了在以下几种情况下扫描的数据量:
但是,对于其他类型的过滤器,例如,如果您不对表进行分区或集群,则会产生扫描整个表的成本。有关更多信息,请参阅查询定价文档。