首页 > 解决方案 > 如果我们在 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

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

标签: google-bigquery

解决方案


创建分区表时,它被划分为不同的段,称为分区,这使您更容易管理数据,因为当您使用分区列查询数据时,您只需要检查该分区而无需检查其他分区。但是,如果您在 where 子句中使用另一列,则无法保证 dremel 将处理比在 where 子句中使用分区列更多的数据。

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

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


推荐阅读