BigQuery 表的元数据索引
本文档介绍了 BigQuery 中的列元数据索引,并说明了如何分配专用资源以提高索引新鲜度和查询性能。
BigQuery 会自动为超过 1 GB 的 BigQuery 表������元数据索引。此元数据包括文件位置、分区信息和列级属性,BigQuery 会使用这些元数据来优化和加快查询速度。
默认情况下,BigQuery 中的元数据索引编制是一项免费的后台操作,您无需执行任何操作。不过,索引新鲜度取决于可用的空闲资源,并且没有性能服务等级目标 (SLO)。如果索引新鲜度对您的用例至关重要,我们建议您配置 BACKGROUND
预留。
查看元数据索引刷新时间
如需查看表的上次元数据索引刷新时间,请查询 INFORMATION_SCHEMA.TABLE_STORAGE
视图的 LAST_METADATA_INDEX_REFRESH_TIME
列。为此,请执行以下操作:
在 Google Cloud 控制台中,前往 BigQuery 页面。
在查询编辑器中,输入以下语句:
SELECT project_id, project_number, table_name, last_metadata_index_refresh_time FROM [
PROJECT_ID
.]region-REGION
.INFORMATION_SCHEMA.TABLE_STORAGE;替换以下内容:
PROJECT_ID
:您的 Google Cloud 项目的 ID。如果未指定,则使用默认项目。REGION
:项目所在的区域,例如region-us
。
点击
运行。
查看列元数据索引用量
如需查看作业完成后是否使用了列元数据索引,请检查 Job 资源的 TableMetadataCacheUsage
属性。如果 unusedReason
字段为空(未填充),则使用列元数据索引。如果已填充,随附的 explanation
字段会提供未使用列元数据索引的原因。
您还可以使用 INFORMATION_SCHEMA.JOBS
视图中的 metadata_cache_statistics
字段查看列元数据索引用量。
例如,以下命令会显示 my-job
作业的列元数据索引使用情况:
SELECT metadata_cache_statistics FROM `region-US`.INFORMATION_SCHEMA.JOBS WHERE job_id = 'my-job';
再举一个例子,以下代码会显示使用了 my-table
表的列元数据索引的作业数量:
SELECT COUNT(*) FROM `region-US`.INFORMATION_SCHEMA.JOBS, UNNEST(metadata_cache_statistics.table_metadata_cache_usage) AS stats WHERE stats.table_reference.table_id='my-table' AND stats.table_reference.dataset_id='my-dataset' AND stats.table_reference.project_id='my-project' AND stats.unusedReason IS NULL;
设置专用索引编制资源
如需为项目中的元数据索引更新设置资源,您首先需要为项目分配预留。为此,请执行以下操作:
设置预留后,请选择以下方法之一为元数据索引编制作业分配槽位。默认情况下,如果您以这种方式分配的槽处于空闲状态,则会与其他作业共享。如需了解详情,请参阅空闲槽。
控制台
在 Google Cloud 控制台中,前往容量管理页面。
依次点击 > 创建分配。
预订操作选择您的预订项目。
将作业类型设置为后台。
点击创建。
bq
使用 bq mk
命令。
bq mk \ --project_id=ADMIN_PROJECT_ID \ --location=LOCATION \ --reservation_assignment \ --reservation_id=RESERVATION_NAME \ --assignee_id=PROJECT_ID \ --job_type=BACKGROUND \ --assignee_type=PROJECT
替换以下内容:
SQL
如需将预留分配给项目,请使用 CREATE ASSIGNMENT
DDL 语句。
在 Google Cloud 控制台中,前往 BigQuery 页面。
在查询编辑器中,输入以下语句:
替换以下内容:CREATE ASSIGNMENT ADMIN_PROJECT_ID.region-LOCATION.RESERVATION_NAME.ASSIGNMENT_ID OPTIONS ( assignee = 'projects/PROJECT_ID', job_type = 'BACKGROUND');
点击
运行。
查看索引编制作业信息
设置专用索引编制作业后,您可以使用 JOBS
视图查看有关索引编制作业的信息。以下 SQL 示例显示了 PROJECT_NAME 中最新的五个刷新作业。
SELECT * FROM region-us.INFORMATION_SCHEMA.JOBS WHERE project_id = 'PROJECT_NAME' AND SEARCH(job_id, '`metadata_cache_refresh`') ORDER BY creation_time DESC LIMIT 5;
将 PROJECT_NAME
替换为包含元数据索引编制作业的项目的名称。
配置元数据索引编入提醒
当 BigQuery 性能不符合定义的标准时,Cloud Monitoring 提醒流程会通知您。如需了解详情,请参阅提醒概览。借助元数据索引编制,您可以针对槽位使用情况和过时情况配置提醒。
槽用量提醒
当后台预留量超过其分配量的指定百分比时,此提醒会通知您。默认值为 95%。您可以为特定预订或每个后台预订配置此提醒。当此提醒触发时,我们建议您增加预留大小。
如需为每次后台预订配置此提醒,请执行以下操作:
- 如果您尚未设置监控通知渠道,请设置一个。
���往集成页面。
找到 BigQuery 集成,然后点击查看详情。
在提醒标签页中,选择 Slot Usage - Background Metadata Cache Slot Usage Too High。
可选:如需进一步自定义此提醒,请依次点击显示选项 > 自定义提醒政策。
在配置通知中,选择您的通知渠道。
点击创建。
过时提醒
当平均列元数据索引过时时间与现有平均值相比增加过多时,此提醒会通知您。默认阈值是:如果 4 小时内的平均值超过了之前平均值的 2 倍,且持续超过 30 分钟。当此提醒触发时,我们建议您增加预留大小,或者创建后台预留(如果您还没有)。
如需配置此提醒,请执行以下操作:
- 如果您尚未设置监控通知渠道,请设置一个。
前往集成页面。
找到 BigQuery 集成,然后点击查看详情。
在提醒标签页中,选择列元数据索引过时 - 百分比增幅过大。
可选:如需进一步自定义此提醒,请依次点击显示选项 > 自定义提醒政策。
在配置通知中,选择您的通知渠道。
点击创建。
限制
元数据查询性能增强仅适用于 SELECT
、INSERT
和 CREATE TABLE AS SELECT
语句。数据操纵语言 (DML) 语句不会因元数据索引而得到改进。