如果我们在 BigQuery 中使用具有相同分区类型(天)的另一列进行过滤,where 子句中的分区列是不是不是必需的?
Posted
技术标签:
【中文标题】如果我们在 BigQuery 中使用具有相同分区类型(天)的另一列进行过滤,where 子句中的分区列是不是不是必需的?【英文标题】:Is partition column in where clause not mandatory in case we are filtering using another column which is of same partition type(day) in BigQuery?如果我们在 BigQuery 中使用具有相同分区类型(天)的另一列进行过滤,where 子句中的分区列是否不是必需的? 【发布时间】:2020-06-29 09:54:51 【问题描述】:我有一个基于 BigQuery 中的 month(月份开始日期)列分区的表,当我尝试根据另一列 last_updated 过滤记录时,我可以观察到(date) 列,但未指定分区发生的月份,BigQuery 仅获取 last_updated 范围所在的分区的记录
-
如果我们基于相似列进行过滤,是否不强制使用分区列?
架构:名称、状态、last_updated、月、季度、年。 表按月份列分区,包含 11 条记录,其中 5 条记录为 6 月。 我可以在执行详细信息中看到选择为 5 的输入行并输出为 1
SELECT
*
FROM
<dataset>.test_part
WHERE last_updated = '2020-06-16
即使没有明确提及月份列,正在选择分区
【问题讨论】:
【参考方案1】:当您创建分区表时,它被划分为不同的段,称为分区,这使您更容易管理数据,因为当您使用分区列查询数据时,您只需要检查该分区而无需检查其他分区。但是,如果您在 where 子句中使用另一列,则无法保证 dremel 将处理比在 where 子句中使用分区列更多的数据。
您可以参考此文档以更好地了解其工作原理 [1]。
[1]https://cloud.google.com/bigquery/docs/partitioned-tables
【讨论】:
以上是关于如果我们在 BigQuery 中使用具有相同分区类型(天)的另一列进行过滤,where 子句中的分区列是不是不是必需的?的主要内容,如果未能解决你的问题,请参考以下文章
在 Bigquery 中使用 Job Config 创建范围分区表