BigQuery分区表:为何Extract函数查询扫描量远高于直接日期范围查询?
BigQuery分区表扫描量差异原因解析
核心原因在于BigQuery的分区剪枝机制是否能生效:
当使用
where inserted_date between '2025-01-01' and '2025-01-31'时,过滤条件直接作用于分区列inserted_date的原始值,BigQuery能精准识别出需要扫描的分区(2025年1月对应的分区),只会读取该分区内的30MB数据,这就是分区剪枝生效的表现。而使用
where extract(year from inserted_date) = 2025 and extract(month from inserted_date) = 1时,你对分区列inserted_date做了函数运算(extract),这会让BigQuery的查询优化器无法直接通过条件推导出对应的分区范围。优化器没办法确定哪些分区的inserted_date经过extract运算后会满足条件,只能扫描全表所有分区,最终扫描量达到2GB(也就是整个表的数据量)。
简单来说:分区剪枝只对直接基于分区列原始值的过滤条件生效,一旦分区列被函数包装,就会失去分区剪枝的优化效果。
内容的提问来源于stack exchange,提问作者user3122771
相关产品推荐
相关产品推荐

