![](/img/trans.png)
[英]BigQuery referencing subquery under WITH clause in WHERE clause
[英]Why does BigQuery do a full table scan for `SELECT *` with a WHERE clause referencing just one column?
提供 WHERE 子句时,为什么 BigQuery SELECT *
执行全表扫描?
SELECT *
FROM `githubarchive.month.202012`
WHERE login='__ThisUserDoesNotExist__'
此查询执行全表扫描,尽管它实际上只需要对登录列进行全扫描以确定没有要返回的记录。 有兴趣参考 BQ 文档的相关部分以及有关列式数据库查询规划的论文。
BigQuery 是一种列式存储,在表上没有分区/集群,它将执行全表扫描。
BigQuery 正在执行全表扫描,因为查询要求所有列都是 output。
您会发现仅使用以下查询扫描login
列:
SELECT login
FROM `githubarchive.month.202012`
WHERE login='__ThisUserDoesNotExist__'
在此处查看公共文档: https://cloud.google.com/bigquery/pricing#on_demand_pricing
BigQuery 使用列式数据结构。 您按照 select 列中处理的总数据量向您收费,每列的总数据量是根据该列中的数据类型计算的。 有关如何计算数据大小的详细信息,请参阅数据大小计算。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.