SEARCH_INDEXES_BY_ORGANIZATION 视图

在组织在给定区域达到限额之前,BigQuery 搜索索引提供免费的索引管理。您可以使用 INFORMATION_SCHEMA.SEARCH_INDEXES_BY_ORGANIZATION 视图了解当前用量与该限制之间的差距,并按项目和表进行细分。INFORMATION_SCHEMA.SEARCH_INDEXES_BY_ORGANIZATION 视图包含与当前项目关联的整个组织的每个搜索索引对应的一行。

所需权限

如需查询 INFORMATION_SCHEMA.SEARCH_INDEXES_BY_ORGANIZATION 视图,您需要拥有您的组织的以下 Identity and Access Management (IAM) 权限:

  • bigquery.tables.get
  • bigquery.tables.list

以下每个预定义的 IAM 角色均可提供上述权限:

  • roles/bigquery.admin
  • roles/bigquery.dataViewer
  • roles/bigquery.dataEditor
  • roles/bigquery.metadataViewer

此架构视图仅可供已定义Google Cloud 组织的用户使用。

如需详细了解 BigQuery 权限,请参阅使用 IAM 进行访问权限控制

架构

INFORMATION_SCHEMA.SEARCH_INDEXES_BY_ORGANIZATION 视图具有如下架构:

列名 数据类型
project_id STRING 包含数据集的项目的名称。
project_number STRING 包含相应数据集的项目编号。
index_catalog STRING 包含数据集的项目的名称。
index_schema STRING 包含索引的数据集的名称。
table_name STRING 在其中创建索引的基表的名称。
index_name STRING 搜索索引的名称。
index_status STRING 指数的状态可以是以下值之一:
  • ACTIVE:索引可用或正在创建。
  • PENDING DISABLEMENT:已编入索引的基表的总大小超过组织的限制;索引正在排队等待删除。处于该状态时,索引可用于搜索查询,但会向您收取搜索索引存储费用。
  • TEMPORARILY DISABLED:已编入索引的基表的总大小超过您组织的限制,或者编入索引的基表小于 10 GB。处于该状态时,不会在搜索查询中使用索引,并且您不需要为搜索索引存储付费。
  • PERMANENTLY DISABLED:基表存在不兼容的架构更改,例如将编入索引的列的类型从 STRING 更改为 INT64
index_status_details RECORD 相应记录包含以下字段:
  • throttle_status:表示搜索索引的节流状态,可能的值如下:
    • UNTHROTTLED:索引可用。
    • BASE_TABLE_TOO_SMALL:基表大小小于 10 GB。无论您是否将自己的预留用于索引管理作业,此限制都适用。在这种情况下,索引会暂时停用,搜索查询不会使用该索引。
    • BASE_TABLE_TOO_LARGE:基本表的大小超过了组织的限制
    • ORGANIZATION_LIMIT_EXCEEDED:组织中已编入索引的基表的总大小超过组织的限制
  • message:描述索引状态的详细消息。
use_background_reservation BOOL 指示索引维护是否使用 BACKGROUND 预留。如果索引维护使用限制,则设置为 FALSE

范围和语法

针对此视图的查询必须包含区域限定符。下表说明了此视图的区域范围:

视图名称 资源范围 区域范围
[`PROJECT_ID`.]`region-REGION`.INFORMATION_SCHEMA.SEARCH_INDEXES_BY_ORGANIZATION 包含指定项目的组织 REGION

替换以下内容:

  • 可选:PROJECT_ID:您的Google Cloud 项目的 ID。如果未指定,则使用默认项目。

  • REGION:项目的区域。例如 `myproject`.`region-us`.INFORMATION_SCHEMA.SEARCH_INDEXES_BY_ORGANIZATION

索引节流

如果某个索引受到限制,则其表大小不会计入组织的限制。当基表大小小于 10 GB 或超过组织的限制时,系统会进行限制。当索引受到限制时,其管理作业会暂停,导致索引过时,最终暂时停用。因此,搜索查询无法使用该索引。

示例

本部分包含 INFORMATION_SCHEMA.SEARCH_INDEXES_BY_ORGANIZATION 视图的示例查询。

确定指定区域的消耗量是否超出限制

以下示例说明了如果组织中利用美国多区域内的共享槽的索引基表总大小超过 100 TB,会发生什么情况:

WITH
 indexed_base_table_size AS (
 SELECT
   SUM(base_table.total_logical_bytes) AS total_logical_bytes
 FROM
   `region-us`.INFORMATION_SCHEMA.SEARCH_INDEXES_BY_ORGANIZATION AS search_index
 JOIN
   `region-us`.INFORMATION_SCHEMA.TABLE_STORAGE_BY_ORGANIZATION AS base_table
 ON
   (search_index.table_name = base_table.table_name
     AND search_index.project_id = base_table.project_id
     AND search_index.index_schema = base_table.table_schema)
 WHERE
   TRUE
   -- Excludes search indexes that are permanently disabled.
   AND search_index.index_status != 'PERMANENTLY DISABLED'
   -- Excludes BASE_TABLE_TOO_SMALL search indexes whose base table size is
   -- less than 10 GB. These tables don't count toward the limit.
   AND search_index.index_status_details.throttle_status != 'BASE_TABLE_TOO_SMALL'
   -- Excludes search indexes whose project has BACKGROUND reservation purchased
   -- for search indexes.
   AND search_index.use_background_reservation = false
 -- Outputs the total indexed base table size if it exceeds 100 TB,
 -- otherwise, doesn't return any output.
)
SELECT * FROM indexed_base_table_size
WHERE total_logical_bytes >= 109951162777600 -- 100 TB

结果类似于以下内容:

+---------------------+
| total_logical_bytes |
+---------------------+
|     109951162777601 |
+---------------------+

按区域中的项目查找编入索引的基表的总大小

以下示例显示了美国多区域中每个项目的细分信息,包括已编入索引的基本表的总大小:

SELECT
 search_index.project_id,
 search_index.use_background_reservation,
 SUM(base_table.total_logical_bytes) AS total_logical_bytes
FROM
 `region-us`.INFORMATION_SCHEMA.SEARCH_INDEXES_BY_ORGANIZATION AS search_index
JOIN
 `region-us`.INFORMATION_SCHEMA.TABLE_STORAGE_BY_ORGANIZATION AS base_table
ON
 (search_index.table_name = base_table.table_name
   AND search_index.project_id = base_table.project_id
   AND search_index.index_schema = base_table.table_schema)
WHERE
 TRUE
  -- Excludes search indexes that are permanently disabled.
  AND search_index.index_status != 'PERMANENTLY DISABLED'
  -- Excludes BASE_TABLE_TOO_SMALL search indexes whose base table size is
  -- less than 10 GB. These tables don't count toward limit.
 AND search_index.index_status_details.throttle_status != 'BASE_TABLE_TOO_SMALL'
GROUP BY search_index.project_id, search_index.use_background_reservation

结果类似于以下内容:

+---------------------+----------------------------+---------------------+
|     project_id      | use_background_reservation | total_logical_bytes |
+---------------------+----------------------------+---------------------+
| projecta            |     true                   |     971329178274633 |
+---------------------+----------------------------+---------------------+
| projectb            |     false                  |     834638211024843 |
+---------------------+----------------------------+---------------------+
| projectc            |     false                  |     562910385625126 |
+---------------------+----------------------------+---------------------+

查找受到限制的搜索索引

以下示例返回组织和区域内受到限制的所有搜索索引:

SELECT project_id, index_schema, table_name, index_name
FROM
 `region-us`.INFORMATION_SCHEMA.SEARCH_INDEXES_BY_ORGANIZATION
WHERE
 -- Excludes search indexes that are permanently disabled.
 index_status != 'PERMANENTLY DISABLED'
 AND index_status_details.throttle_status IN ('ORGANIZATION_LIMIT_EXCEEDED', 'BASE_TABLE_TOO_LARGE')

结果类似于以下内容:

+--------------------+--------------------+---------------+----------------+
|     project_id     |    index_schema    |  table_name   |   index_name   |
+--------------------+--------------------+---------------+----------------+
|     projecta       |     dataset_us     |   table1      |    index1      |
|     projectb       |     dataset_us     |   table1      |    index1      |
+--------------------+--------------------+---------------+----------------+