Vue SEARCH_INDEX_COLUMNS

La vue INFORMATION_SCHEMA.SEARCH_INDEX_COLUMNS contient une ligne pour chaque colonne indexée pour la recherche sur chaque table d'un ensemble de données.

Autorisations requises

Pour afficher les métadonnées d'index de recherche, vous devez disposer de l'autorisation IAM (gestion de l'authentification et des accès) bigquery.tables.get ou bigquery.tables.list sur la table contenant l'index. Chacun des rôles IAM prédéfinis suivants inclut au moins l'une de ces autorisations :

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

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

Schéma

Lorsque vous interrogez la vue INFORMATION_SCHEMA.SEARCH_INDEX_COLUMNS, les résultats de la requête contiennent une ligne pour chaque colonne indexée de chaque table d'un ensemble de données.

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

Nom de la colonne Type de données Valeur
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.
index_column_name STRING Nom de la colonne indexée de niveau supérieur.
index_field_path STRING Chemin complet du champ indexé développé, commençant par le nom de la colonne. Les champs sont séparés par un point.

Champ d'application et syntaxe

Les requêtes exécutées sur cette vue doivent être associées à un qualificatif d'ensemble de données. 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.]DATASET_ID.INFORMATION_SCHEMA.SEARCH_INDEX_COLUMNS Niveau de l'ensemble de données Emplacement d'un ensemble de données
Remplacez les éléments suivants :

  • Facultatif : PROJECT_ID : ID de votre projet Google Cloud. Si non spécifié, le projet par défaut est utilisé.

Exemple

-- Returns metadata for search indexes in a single dataset.
SELECT * FROM myDataset.INFORMATION_SCHEMA.SEARCH_INDEX_COLUMNS;

Exemples

L'exemple suivant permet de créer un index de recherche sur toutes les colonnes de my_table.

CREATE TABLE dataset.my_table(
  a STRING,
  b INT64,
  c STRUCT <d INT64,
            e ARRAY<STRING>,
            f STRUCT<g STRING, h INT64>>) AS
SELECT 'hello' AS a, 10 AS b, (20, ['x', 'y'], ('z', 30)) AS c;

CREATE SEARCH INDEX my_index
ON dataset.my_table(ALL COLUMNS);

La requête suivante extrait des informations sur les champs indexés. index_field_path indique le champ d'une colonne indexée. Cela diffère de index_column_name uniquement dans le cas d'un STRUCT, où le chemin d'accès complet au champ indexé est fourni. Dans cet exemple, la colonne c contient un champ ARRAY<STRING> e et un autre STRUCT appelé f contenant un champ STRING g. Chacune d'elles est indexée.

SELECT table_name, index_name, index_column_name, index_field_path
FROM my_project.dataset.INFORMATION_SCHEMA.SEARCH_INDEX_COLUMNS

Le résultat ressemble à ce qui suit :

+------------+------------+-------------------+------------------+
| table_name | index_name | index_column_name | index_field_path |
+------------+------------+-------------------+------------------+
| my_table   | my_index   | a                 | a                |
| my_table   | my_index   | c                 | c.e              |
| my_table   | my_index   | c                 | c.f.g            |
+------------+------------+-------------------+------------------+

La requête suivante joint la vue INFORMATION_SCHEMA.SEARCH_INDEX_COUMNS aux vues INFORMATION_SCHEMA.SEARCH_INDEXES et INFORMATION_SCHEMA.COLUMNS afin d'inclure l'état de l'index de recherche et le type de données de chaque colonne :

SELECT
  index_columns_view.index_catalog AS project_name,
  index_columns_view.index_SCHEMA AS dataset_name,
  indexes_view.TABLE_NAME AS table_name,
  indexes_view.INDEX_NAME AS index_name,
  indexes_view.INDEX_STATUS AS status,
  index_columns_view.INDEX_COLUMN_NAME AS column_name,
  index_columns_view.INDEX_FIELD_PATH AS field_path,
  columns_view.DATA_TYPE AS data_type
FROM
  mydataset.INFORMATION_SCHEMA.SEARCH_INDEXES indexes_view
INNER JOIN
  mydataset.INFORMATION_SCHEMA.SEARCH_INDEX_COLUMNS index_columns_view
  ON
    indexes_view.TABLE_NAME = index_columns_view.TABLE_NAME
    AND indexes_view.INDEX_NAME = index_columns_view.INDEX_NAME
LEFT OUTER JOIN
  mydataset.INFORMATION_SCHEMA.COLUMNS columns_view
  ON
    indexes_view.INDEX_CATALOG = columns_view.TABLE_CATALOG
    AND indexes_view.INDEX_SCHEMA = columns_view.TABLE_SCHEMA
    AND index_columns_view.TABLE_NAME = columns_view.TABLE_NAME
    AND index_columns_view.INDEX_COLUMN_NAME = columns_view.COLUMN_NAME
ORDER BY
  project_name,
  dataset_name,
  table_name,
  column_name;

Le résultat ressemble à ce qui suit :

+------------+------------+----------+------------+--------+-------------+------------+---------------------------------------------------------------+
| project    | dataset    | table    | index_name | status | column_name | field_path | data_type                                                     |
+------------+------------+----------+------------+--------+-------------+------------+---------------------------------------------------------------+
| my_project | my_dataset | my_table | my_index   | ACTIVE | a           | a          | STRING                                                        |
| my_project | my_dataset | my_table | my_index   | ACTIVE | c           | c.e        | STRUCT<d INT64, e ARRAY<STRING>, f STRUCT<g STRING, h INT64>> |
| my_project | my_dataset | my_table | my_index   | ACTIVE | c           | c.f.g      | STRUCT<d INT64, e ARRAY<STRING>, f STRUCT<g STRING, h INT64>> |
+------------+------------+----------+------------+--------+-------------+------------+---------------------------------------------------------------+