繁体   English   中英

为什么 BigQuery 使用仅引用一列的 WHERE 子句对“SELECT *”进行全表扫描?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM