Vue SEARCH_INDEXES_BY_ORGANIZATION

Les index de recherche BigQuery permettent de gérer les index sans frais jusqu'à ce que votre organisation atteigne la limite dans une région donnée. Vous pouvez utiliser la vue INFORMATION_SCHEMA.SEARCH_INDEXES_BY_ORGANIZATION pour comprendre votre consommation actuelle par rapport à cette limite, ventilée par projets et tables. La vue INFORMATION_SCHEMA.SEARCH_INDEXES_BY_ORGANIZATION contient une ligne pour chaque index de recherche pour l'ensemble de l'organisation associée au projet en cours.

Autorisations requises

Pour interroger la vue INFORMATION_SCHEMA.SEARCH_INDEXES_BY_ORGANIZATION, vous avez besoin des autorisations IAM (Identity and Access Management) suivantes pour votre organisation :

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

Chacun des rôles IAM prédéfinis suivants inclut les autorisations ci-dessus :

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

Cette vue du schéma n'est disponible que pour les utilisateurs associés à des Google Cloud organisations définies.

Pour plus d'informations sur les autorisations BigQuery, consultez la page Contrôle des accès avec IAM.

Schéma

La vue INFORMATION_SCHEMA.SEARCH_INDEXES_BY_ORGANIZATION présente le schéma suivant :

Nom de la colonne Type de données Valeur
project_id STRING Nom du projet qui contient l'ensemble de données.
project_number STRING Numéro du projet contenant l'ensemble de données.
index_catalog STRING Nom du projet qui contient l'ensemble de données.
index_schema STRING Nom de l'ensemble de données contenant l'index.
table_name STRING Nom de la table de base sur laquelle l'index est créé.
index_name STRING Nom de l'index de recherche.
index_status STRING L'état de l'index peut être l'un des suivants :
  • ACTIVE : l'index est utilisable ou en cours de création.
  • PENDING DISABLEMENT : la taille totale des tables de base indexées dépasse la limite de votre organisation. L'index est mis en file d'attente pour suppression. Dans cet état, l'index est utilisable dans les requêtes de recherche et le stockage des index de recherche vous est facturé.
  • TEMPORARILY DISABLED : la taille totale des tables de base indexées dépasse la limite de votre organisation, ou la table de base indexée est inférieure à 10 Go. Dans cet état, l'index n'est pas utilisé dans les requêtes de recherche et le stockage des index de recherche ne vous est pas facturé.
  • PERMANENTLY DISABLED : une modification de schéma incompatible a été apportée à la table de base (par exemple, le type d'une colonne indexée est passé de STRING à INT64).
index_status_details RECORD L'enregistrement contient les champs suivants :
  • throttle_status : indique l'état de limitation de l'index de recherche. Les valeurs possibles sont les suivantes :
    • UNTHROTTLED : l'index est utilisable.
    • BASE_TABLE_TOO_SMALL : la taille de la table de base est inférieure à 10 Go. Cette limite s'applique que vous utilisiez ou non votre propre réservation pour vos tâches de gestion d'index. Dans ce cas, l'index est temporairement désactivé et les requêtes de recherche ne l'utilisent pas.
    • BASE_TABLE_TOO_LARGE : la taille de la table de base dépasse la limite de votre organisation.
    • ORGANIZATION_LIMIT_EXCEEDED : la taille totale des tables de base indexées dans votre organisation dépasse la limite de votre organisation.
  • message : message détaillé décrivant l'état de l'index.
use_background_reservation BOOL Indique si la maintenance de l'index utilise la réservation BACKGROUND. La valeur est définie sur FALSE lorsque la maintenance de l'index utilise la limite.

Champ d'application et syntaxe

Les requêtes exécutées sur cette vue doivent inclure un qualificatif de région. Le tableau suivant explique le champ d'application de la région pour cette vue :

Nom de la vue Champ d'application de la ressource Champ d'application de la région
[`PROJECT_ID`.]`region-REGION`.INFORMATION_SCHEMA.SEARCH_INDEXES_BY_ORGANIZATION Organisation contenant le projet spécifié REGION

Remplacez les éléments suivants :

  • PROJECT_ID (facultatif) : ID de votre projetGoogle Cloud . Si non spécifié, le projet par défaut est utilisé.

  • REGION : région de votre projet. Par exemple, `myproject`.`region-us`.INFORMATION_SCHEMA.SEARCH_INDEXES_BY_ORGANIZATION.

Limitation de l'index

Si un index est limité, la taille de sa table n'est pas comptabilisée dans la limite de votre organisation. Cette limitation se produit lorsque la taille de la table de base est inférieure à 10 Go ou dépasse la limite de votre organisation. Lorsqu'un index est limité, ses tâches de gestion sont suspendues, ce qui le rend obsolète et finit par le désactiver temporairement. Par conséquent, les requêtes de recherche ne peuvent pas utiliser l'index.

Exemples

Cette section inclut des exemples de requêtes de la vue INFORMATION_SCHEMA.SEARCH_INDEXES_BY_ORGANIZATION.

Vérifier si la consommation dépasse la limite dans une région donnée

L'exemple suivant illustre le cas où la taille totale des tables de base indexées dans une organisation, utilisant des emplacements partagés dans la zone multirégionale des États-Unis, dépasse 100 To :

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

Le résultat ressemble à ce qui suit :

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

Trouver la taille totale des tables de base indexées par projet dans une région

L'exemple suivant fournit la répartition de chaque projet dans une région multirégionale des États-Unis avec la taille totale des tables de base indexées :

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

Le résultat ressemble à ce qui suit :

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

Identifier les index de recherche limités

L'exemple suivant renvoie tous les index de recherche limités dans l'organisation et la région :

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')

Le résultat ressemble à ce qui suit :

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