聚簇表简介

本文简要介绍 BigQuery 中的表聚簇功能。

概览

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

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

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

何时使用聚簇

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

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

表聚簇适用于按以下元素分区的表:

目前无法对未分区的表进行聚簇。

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

对分区表进行聚簇

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

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

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

自动重新聚簇

当数据添加到聚簇表时,新插入的数据写入到的块包含的键范围,可以与先前写入的块中的键范围重叠。这些重叠的键会削弱表的排序属性。

为了维护聚簇表的性能特征,BigQuery 会在后台执行自动重新聚簇以恢复表的排序属性。对于分区表,系统会为每个分区范围内的数据维护聚簇操作。

聚簇表配额和限制

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

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

如需了解所有配额和限制的详情,请参阅配额和限制

聚簇表价格

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

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

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

开发中的功能

以下功能目前仍在开发中,还无法使用:

  • 对未分区表进行聚簇。

后续步骤

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

发送以下问题的反馈:

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