BigQuery 中的搜索简介
借助 BigQuery 搜索索引,您可以使用 GoogleSQL 轻松找到嵌入非结构化文本和半结构化 JSON 数据的唯一数据元素,而无需提前知道表架构。
通过搜索索引,BigQuery 在一个平台中提供强大的列式存储和文本搜索功能,在您需要查找各行数据时可实现高效的行查询。一种常见的使用场景是日志分析。例如,您可能想要确定与用户关联的数据行以进行一般数据保护条例 (GDPR) 报告,或在文本载荷中查找特定错误代码。
BigQuery 会存储和管理索引,因此当数据在 BigQuery 中可用时,您可以使用 SEARCH
函数立即检索这些数据。
使用场景
BigQuery 搜索索引可帮助您执行以下任务:
- 搜索存储在 BigQuery 表中的系统、网络或应用日志。
- 识别要删除的数据元素,以符合监管流程。
- 支持开发者排查问题。
- 执行安全审核。
- 创建需要高选择性搜索过滤条件的信息中心。
- 搜索预处理的数据以找到完全匹配项。
价格
当组织中编入索引的表的总大小低于您地区的限制时,构建和刷新搜索索引所需的处理无需付费。为支持超出此限制的索引,您需要提供自己的预留来处理索引管理作业。搜索索引在处于活跃状态时会产生存储费用。您可以在 INFORMATION_SCHEMA.SEARCH_INDEXES
视图中找到索引存储空间大小。
角色与权限
要创建搜索索引,您需要对要在其中创建索引的表拥有 bigquery.tables.createIndex
IAM 权限。要删除搜索索引,您需要拥有 bigquery.tables.deleteIndex
权限。以下每个预定义的 IAM 角色都包含使用搜索索引所需的权限:
- BigQuery Data Owner (
roles/bigquery.dataOwner
) - BigQuery Data Editor (
roles/bigquery.dataEditor
) - BigQuery Admin (
roles/bigquery.admin
)
限制
- 无法直接在视图或具体化视图上创建搜索索引,但对已编入索引的表的视图调用
SEARCH
函数会使用底层搜索索引。 - 如果您在表上创建搜索索引后重命名表,则该索引将无效。
SEARCH
函数专为点查询而设计。未提供模糊搜索、错别字更正功能、通配符和其他类型的文档搜索。- 如果搜索索引尚未达到 100% 覆盖率,您仍需要为
INFORMATION_SCHEMA.SEARCH_INDEXES
视图中报告的所有索引存储付费。 - 包含
SEARCH
函数的查询无法通过 BigQuery BI Engine 加速。 如果 DML 语句修改了编入索引的表,则不使用搜索索引,但当
SEARCH
函数是 DML 语句中的子查询的一部分时,可以使用该索引。- 以下查询未使用搜索索引:
DELETE FROM my_dataset.indexed_table WHERE SEARCH(user_id, '123');
- 搜索索引可用于以下查询:
DELETE FROM my_dataset.other_table WHERE user_id IN ( SELECT user_id FROM my_dataset.indexed_table WHERE SEARCH(user_id, '123') );
后续步骤
- 详细了解如何创建搜索索引。
- 详细了解如何如何使用搜索索引在表中进行搜索。