Visualizzazione SEARCH_INDEX_COLUMNS

La visualizzazione INFORMATION_SCHEMA.SEARCH_INDEX_COLUMNS contiene una riga per ogni colonna indicizzata alla ricerca su ogni tabella di un set di dati.

Autorizzazioni obbligatorie

Per visualizzare i metadati dell'indice di ricerca, devi disporre dell'autorizzazione bigquery.tables.get o bigquery.tables.list Identity and Access Management (IAM) nella tabella con l'indice. Ciascuno dei seguenti ruoli IAM predefiniti include almeno una di queste autorizzazioni:

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

Per maggiori informazioni sulle autorizzazioni BigQuery, consulta Controllo dell'accesso con IAM.

Schema

Quando esegui una query sulla vista INFORMATION_SCHEMA.SEARCH_INDEX_COLUMNS, i risultati della query contengono una riga per ogni colonna indicizzata su ogni tabella in un set di dati.

La vista INFORMATION_SCHEMA.SEARCH_INDEX_COLUMNS ha il seguente schema:

Nome colonna Tipo di dati Valore
index_catalog STRING Il nome del progetto che contiene il set di dati.
index_schema STRING Il nome del set di dati che contiene l'indice.
table_name STRING Il nome della tabella di base in base a cui viene creato l'indice.
index_name STRING Il nome dell'indice.
index_column_name STRING Il nome della colonna indicizzata di primo livello.
index_field_path STRING Il percorso completo del campo indicizzato espanso, che inizia con il nome della colonna. I campi sono separati da un punto.

Ambito e sintassi

Le query in questa vista devono avere un qualificatore del set di dati. La tabella seguente spiega l'ambito della regione per questa visualizzazione:

Visualizza nome Ambito risorsa Ambito regione
[PROJECT_ID.]DATASET_ID.INFORMATION_SCHEMA.SEARCH_INDEX_COLUMNS Livello set di dati Posizione del set di dati
Sostituisci quanto segue:

  • (Facoltativo) PROJECT_ID: l'ID del tuo progetto Google Cloud. Se non specificato, viene utilizzato il progetto predefinito.
  • DATASET_ID: l'ID del set di dati. Per ulteriori informazioni, consulta la sezione Qualificatore del set di dati.

Esempio

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

Esempi

L'esempio seguente crea un indice di ricerca su tutte le colonne di 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 seguente query estrae informazioni sui campi indicizzati. index_field_path indica quale campo di una colonna viene indicizzato. Si differenzia da index_column_name solo nel caso di un STRUCT, in cui viene fornito il percorso completo del campo indicizzato. In questo esempio, la colonna c contiene un campo ARRAY<STRING> e e un altro STRUCT denominato f che contiene un campo STRING g, ognuno dei quali indicizzato.

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

Il risultato è simile al seguente:

+------------+------------+-------------------+------------------+
| 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 seguente query unisce la vista INFORMATION_SCHEMA.SEARCH_INDEX_COUMNS alle viste INFORMATION_SCHEMA.SEARCH_INDEXES e INFORMATION_SCHEMA.COLUMNS per includere lo stato dell'indice di ricerca e il tipo di dati di ogni colonna:

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;

Il risultato è simile al seguente:

+------------+------------+----------+------------+--------+-------------+------------+---------------------------------------------------------------+
| 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>> |
+------------+------------+----------+------------+--------+-------------+------------+---------------------------------------------------------------+