聚簇表简介

本文档简要介绍 BigQuery 中的表聚簇支持。

概览

在 BigQuery 中创建聚簇表时,系统会根据表架构中一个或多个列的内容自动整理表数据。您指定的列用于共置相关数据。使用多个列对表进行聚簇时,指定列时的顺序很重要。指定列时的先后顺序决定了数据的排序顺序。

聚簇可以提高某些类型的查询(例如,使用过滤条件子句的查询和聚合数据的查询)的性能。当通过查询作业或加载作业将数据写入聚簇表时,BigQuery 会使用聚簇列中的值对这些数据进行排序。这些值用于将数据整理到 BigQuery 存储的多个块中。当您提交的查询包含基于聚簇列过滤数据的子句时,BigQuery 会使用已排序的块来避免扫描不必要的数据。

同样,当您提交的查询基于聚簇列中的值来聚合数据时,因为已排序的块会共置包含类似值的行,所以性能会得到改进。

何时使用聚簇

目前,BigQuery 支持对分区表进行聚簇。在以下情况下,您可以对分区表使用聚簇:

  • 您的数据已按日期或时间戳列进行分区。
  • 您在查询中通常针对特定列进行过滤或聚合。

提取时间分区的表和按 DATETIMESTAMP分区的表都支持表聚簇。目前,非分区表不支持聚簇。

当您结合使用聚簇和分区时,可以按日期或时间戳列对数据进行分区,然后按不同的列组合对该数据进行聚簇。在这种情况下,每个分区中的数据都基于聚簇列的值进行聚簇。通过分区,您可以了解查询作业的准确费用估算值(基于已扫描的分区)。

对分区表进行聚簇

按日期或时间戳列分区的表中,每个分区都包含一天的数据。存储数据时,BigQuery 可确保一个块中的所有数据都属于单个分区。在对分区表进行的所有修改操作中,分区表都会维护这些属性:查询作业、数据操纵语言 (DML) 语句、数据定义语言 (DDL) 语句、加载作业和复制作业。这要求 BigQuery 维护比非分区表更多的元数据。随着分区数量的增加,元数据开销量也会增加。

虽然必须维护更多元数据,但通过确保在全局范围内对数据进行分区,BigQuery 可以在您运行查询之前更准确地估算查询将处理的字节数。这种费用计算方式会对查询的最终费用设置上限。

在聚簇表中,BigQuery 会根据聚簇列中的值自动排序数据,并将数据整理为大小最为合适的存储块。您可以通过创建进行了聚簇和分区的表来实现更精细的排序。在对聚簇表进行修改的每个操作的上下文中,聚簇表都维护排序属性。因此,BigQuery 可能无法准确地估算查询处理的字节数或查询费用。如果在查询执行期间消除数据块,BigQuery 即可最大限度地降低查询费用。

一段时间后,由于越来越多的操作修改了表,数据的排序程度开始变弱,表会变为部分排序。在部分排序的表中,使用聚簇列的查询可能需要扫描更多的块(与完全排序的表相比)。您可以通过运行 SELECT * 查询来重新对整个表中的数据进行聚簇,该查询会从表中选择数据并重写该表(或其中的任何特定分区)。此外,您可以使用 DML MERGE 语句对该表的任意部分重新进行聚簇。

聚簇表配额和限制

将聚簇表功能与分区表一起使用时,您需要遵循分区表限制

配额和限制也适用于针对聚簇表运行的不同类型的作业,包括:

要详细了解所有配额和限制,请参阅配额和限制

聚簇表价格

在 BigQuery 中创建和使用聚簇表时,您应支付的费用取决于表中存储的数据量以及对数据运行的查询:

很多聚簇表操作都是免费的,包括将数据加载到聚簇表、复制表和分区,以及导出数据。这些操作虽然是免费的,但受 BigQuery 的配额和限制的约束。要了解所有免费操作,请参阅价格页面上的免费操作

要查看详细的聚簇表价格示例,请参阅价格页面。

开发中的功能

以下功能正在开发中,未在测试版中提供:

  • 支持对非分区表进行聚簇。

后续步骤

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
需要帮助?请访问我们的支持页面