为 BigQuery 表编入元数据索引
本文档介绍了如何在 BigQuery 中为列元数据编入索引,并说明了如何分配专用资源来提高索引新鲜度和查询性能。
BigQuery 会自动为超过 1 GB 的 BigQuery 表的元数据编入索引。这些元数据包括文件位置、分区信息和列级属性,BigQuery 会使用这些元数据来优化和加速查询。
默认情况下,在 BigQuery 中为元数据编入索引是一项免费的后台操作,您无需执行任何操作。不过,索引新鲜度取决于可用的空闲资源,并且没有性能服务等级目标 (SLO)。如果索引新鲜度对您的应用场景至关重要,我们建议您配置 BACKGROUND
预留。
查看元数据索引刷新时间
如需查看表的上次元数据索引刷新时间,请查询 INFORMATION_SCHEMA.TABLE_STORAGE
视图的 LAST_METADATA_INDEX_REFRESH_TIME
列。为此,请按以下步骤操作:
在 Trusted 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
:您的 Trusted Cloud by S3NS 项目的 ID。 如果未指定,则使用默认项目。REGION
:项目所在的区域,例如region-us
。
点击
运行。
查看列元数据索引使用情况
如需查看作业完成后是否使用了列元数据索引,请检查作业资源的 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;
设置专用索引编入资源
如需在项目中为元数据索引更新设置资源,您首先需要为该项目分配预留。为此,请按以下步骤操作:
设置预留后,请选择以下方法之一为元数据索引编入作业分配槽。默认情况下,如果槽处于空闲状态,您以这种方式分配的槽会与其他作业共享。如需了解详情,请参阅空闲槽。
控制台
在 Trusted 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 语句。
在 Trusted 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 集成,然后点击查看详情。
在提醒标签页中,选择槽用量 - 后台元数据缓存槽用量过高。
可选:如需进一步自定义此提醒,请依次点击显示选项 > 自定义提醒政策。
在配置通知中,选择您的通知渠道。
点击创建。
过时提醒
当平均列元数据索引过时与现有平均值相比增加过多时,此提醒会通知您。默认阈值为:如果超过 4 小时的平均值超过之前平均值的两倍,且持续时间超过 30 分钟。当此提醒触发时,我们建议您增加预留大小,或者如果您没有后台预留,请创建一个。
如需配置此提醒,请执行以下操作:
- 如果您尚未设置监控通知渠道,请先设置。
前往集成页面。
找到 BigQuery 集成,然后点击查看详情。
在提醒标签页中,选择列元数据索引过时 - 百分比增幅过大。
可选:如需进一步自定义此提醒,请依次点击显示选项 > 自定义提醒政策。
在配置通知中,选择您的通知渠道。
点击创建。
限制
元数据查询性能增强仅适用于 SELECT
、INSERT
和 CREATE TABLE AS SELECT
语句。数据操纵语言 (DML) 语句不会由于为元数据编入索引而得到改进。