BigQuery 中的搜索简介

借助 BigQuery 搜索索引,您可以使用 GoogleSQL 有效找到嵌入非结构化文本和半结构化 JSON 数据的唯一数据元素,而无需提前知道表架构。

通过搜索索引,BigQuery 在一个平台中提供强大的列式存储和文本搜索功能,在您需要查找各行数据时可实现高效的行查询。一种常见的使用场景是日志分析。例如,您可能想要确定与用户关联的数据行以进行一般数据保护条例 (GDPR) 报告,或在文本载荷中查找特定错误代码。

BigQuery 会存储和管理索引,因此当数据在 BigQuery 中可用时,您可以使用 SEARCH 函数其他运算符和函数(例如等号 [=]、INLIKE 运算符以及某些字符串和 JSON 函数)立即检索这些数据。如需优化搜索,请参阅最佳实践

使用场景

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 视图中报告的所有索引存储付费。
  • BigQuery BI Engine 无法加速包含 SEARCH 函数的查询。
  • 如果 DML 语句修改了已编入索引的表,则不会使用搜索索引,但是,如果可通过搜索索引优化的谓词是 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')
      );
  • 当查询引用物化视图时,不会使用搜索索引。

  • 多语句事务查询中不使用搜索索引。

后续步骤