BigQuery 中的表视图是不是受益于分区/集群优化?

Posted

技术标签:

【中文标题】BigQuery 中的表视图是不是受益于分区/集群优化?【英文标题】:Do views of tables in BigQuery benefit from partitioning/clustering optimization?BigQuery 中的表视图是否受益于分区/集群优化? 【发布时间】:2021-05-10 17:36:11 【问题描述】:

我们在 BigQuery 中有一些表每晚都会更新,然后我们有一个重复数据删除过程来缓慢地进行垃圾收集。

为确保我们的 UI 始终显示最新的,我们为每个表设置了一个视图设置,该视图设置只需对最新的时间戳 record_id 组合执行 SELECT WHERE

我们即将设置分区和集群以优化查询范围/速度,我无法在 Google 文档中找到明确的答案,说明该表的视图是否仍将具有分区查询,或者最终会查询所有数据.

或者,当我们创建视图时,我们可以在构建视图的查询中包含分区和集群吗?

【问题讨论】:

【参考方案1】:

如果您谈论的是逻辑视图,那么是的,如果它引用的基表是集群/分区的,那么如果它们是从 WHERE 子句引用的,它将使用这些功能。逻辑视图没有自己的托管存储,它实际上只是一个 SQL 子查询,只要引用该视图就会运行。

如果您谈论的是物化视图,则不会继承基表的分区/集群,但可以在物化视图上定义。有关详细信息,请参阅 DDL 语法:https://cloud.google.com/bigquery/docs/reference/standard-sql/data-definition-language#create_materialized_view_statement

【讨论】:

是的,逻辑观点谢谢!您是否知道在写入特定分区时我们是否可以写入尚不存在的分区(基于日期),例如摄取之前未摄取的日期的数据,即 bq load --source_format=CSV ' mydataset.mytable$20210510' data.csv 您应该只需要为摄取时间分区执行此操作;任何基于用户列的分区都可以只使用基表。如果您使用的是基于摄取的分区,则它使用当前日期(以 UTC 为单位)作为分区。

以上是关于BigQuery 中的表视图是不是受益于分区/集群优化?的主要内容,如果未能解决你的问题,请参考以下文章

Bigquery BI 引擎是不是适用于分区表

Big Query 中的表未分区

Bigquery 集群不会降低查询成本

是否有元数据表来检查 BigQuery 中的表是否已分区?

bigquery - 自定义字段上的分区 - 仅适用于标准 SQL?

BigQuery 计划数据传输抛出“不兼容的表分区规范”。错误 - 但错误消息被截断