如果我们在 BigQuery 中使用另一个具有相同分区类型(天)的列进行过滤,where 子句中的分区列是否不是强制性的



我在 BigQuery 中有一个基于月(月开始日期(列分区的表,我可以观察到,当我尝试根据另一列last_updated(日期(列过滤记录并且不指定分区发生的列月份时,BigQuery 只获取last_updated范围所在的分区的记录

  1. 如果我们基于类似列进行过滤,是否必须使用分区列?

架构:名称、状态、last_updated、月、季度、年。 表按月列分区,包含 11 条记录,其中 5 条记录用于 6 月。 我可以在执行详细信息中看到输入行被选为 5 并输出为 1

SELECT 
*
FROM 
<dataset>.test_part 
WHERE  last_updated = '2020-06-16

即使没有明确提到月份列,也正在选择分区

创建分区表时,会将其划分为不同的段(称为分区(,以便更轻松地管理数据,因为当您使用分区列查询数据时,您只需要检查该分区,而不需要检查其他分区。但是,如果在 where 子句中使用另一列,则不能保证 dremel 处理的数据比在 where 子句中使用分区列的数据多。

您可以参考此文档以更好地了解其工作原理 [1]。

[1] https://cloud.google.com/bigquery/docs/partitioned-tables

最新更新