优化存储以提升查询性能

本页介绍了优化 BigQuery 存储以提升查询性能的最佳实践。您还可以优化存储空间以降低费用。虽然这些最佳实践主要侧重于使用 BigQuery 存储空间的表,但也可以应用于外部表。

BigQuery 以列式格式存储数据。列式数据库针对跨大量记录汇总数据的分析工作负载进行了优化。由于列通常具有比行更多的冗余,因此该特征通过使用运行长度编码等技术来提高数据压缩性能。如需详细了解 BigQuery 如何存储数据,请参阅 BigQuery 存储概览。优化 BigQuery 存储可以提高查询性能控制费用

BigQuery 提供有关资源的存储使用量的详细信息。如需查看表存储元数据,请查询以下 INFORMATION_SCHEMA 视图:

对表数据进行聚簇

最佳做法:创建聚簇表。

如需优化查询存储,请先对表数据进行聚簇。通过对常用的列进行聚簇,您可以减少查询扫描的总数据量。如需了解如何创建聚簇,请参阅创建和使用聚簇表

对表数据进行分区

最佳做法:使用分区划分大型表。

分区使您可以按一组定义的列特征(例如整数列、时间单位列或注入时间)对数据进行分组和排序。分区可减少查询读取的字节数,从而提高查询性能并控制费用。

如需详细了解分区,请参阅分区表简介

使用表和分区到期时间设置

最佳做法:如需优化存储,请配置数据集分区表的默认到期时间设置。

通过为数据集内新创建的表设置默认的表有效期,您可以控制存储费用,还可以优化存储空间使用情况。表到期后,系统会删除表及其包含的所有数据。如果您在创建数据集时设置该属性,则在有效期过后,系统会删除数据集内创建的所有已到期的表。如果您在创建数据集之后设置该属性,则在有效期过后,系统只会删除已到期的新表。

例如,如果您将默认的表有效期设置为 7 天,系统会在一周后自动删除较早的数据。

如果您只需访问最新数据,则此选项会非常有用。此外,如果您只是测试数据而无需保留数据,则此选项也会非常有用。

如果您按日期划分表,则数据集的默认表有效期将应用于各个分区。您还可以在 bq 命令行工具中使用 time_partitioning_expiration 标志或在 API 中使用 expirationMs 配置来控制分区到期时间。分区到期后,系统会删除分区中的数据,但不会删除分区表,即使该表为空也是如此。

例如,以下命令会使分区在 3 天后过期:

bq mk \
--time_partitioning_type=DAY \
--time_partitioning_expiration=259200 \
project_id:dataset.table

汇总长期数据

最佳实践:确定是否需要长期存储行级数据,如果不需要,则仅长期存储汇总数据。

在许多情况下,事务型数据或行级数据中包含的详细信息在短期内非常有用,但长期来看引用频率较低。在这些情况下,您可以构建汇总查询来计算和存储与此数据关联的指标,然后使用表或分区到期时间有系统地移除行级数据。这样可以降低存储费用,同时确保指标可供长期使用。

后续步骤