Visualização SEARCH_INDEXES_BY_ORGANIZATION

Os índices de pesquisa do BigQuery oferecem gerenciamento de índice gratuito até que sua organização atinja o limite em uma determinada região. Use a visualização INFORMATION_SCHEMA.SEARCH_INDEXES_BY_ORGANIZATION para entender seu consumo atual em relação a esse limite, dividido por projetos e tabelas. A visualização INFORMATION_SCHEMA.SEARCH_INDEXES_BY_ORGANIZATION contém uma linha para cada índice de pesquisa de toda a organização associada ao projeto atual.

Permissões necessárias

Para consultar a visualização INFORMATION_SCHEMA.SEARCH_INDEXES_BY_ORGANIZATION, você precisa das seguintes permissões do Identity and Access Management (IAM) para sua organização:

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

Cada um dos seguintes papéis predefinidos do IAM inclui as permissões anteriores:

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

Essa visualização de esquema está disponível apenas para usuários com organizações Google Cloud definidas.

Para mais informações sobre as permissões do BigQuery, consulte Controle de acesso com o IAM.

Esquema

A visualização INFORMATION_SCHEMA.SEARCH_INDEXES_BY_ORGANIZATION tem o seguinte esquema:

Nome da coluna Tipo de dados Valor
project_id STRING Nome do projeto que contém o conjunto de dados.
project_number STRING O número do projeto que contém o conjunto de dados.
index_catalog STRING Nome do projeto que contém o conjunto de dados.
index_schema STRING O nome do conjunto de dados que contém o índice.
table_name STRING O nome da tabela base em que o índice é criado.
index_name STRING O nome do índice de pesquisa.
index_status STRING O status do índice pode ser um dos seguintes:
  • ACTIVE: o índice pode ser usado ou está sendo criado.
  • PENDING DISABLEMENT: o tamanho total das tabelas base indexadas excede o limite da sua organização. O índice está na fila para exclusão. Nesse estado, o índice pode ser usado em consultas de pesquisa, e há cobrança pelo armazenamento do índice de pesquisa.
  • TEMPORARILY DISABLED: o tamanho total das tabelas base indexadas excede o limite da sua organização ou a tabela base indexada é menor que 10 GB. Nesse estado, o índice não é usado em consultas de pesquisa, e não há cobrança pelo armazenamento do índice de pesquisa.
  • PERMANENTLY DISABLED: há uma mudança de esquema incompatível na tabela de base, como a mudança do tipo de uma coluna indexada de STRING para INT64.
index_status_details RECORD O registro contém os seguintes campos:
  • throttle_status: indica o status de limitação do índice de pesquisa. Os valores possíveis são:
    • UNTHROTTLED: o índice pode ser usado.
    • BASE_TABLE_TOO_SMALL: o tamanho da tabela de base é menor que 10 GB. Esse limite se aplica independente de você usar ou não sua própria reserva para os jobs de gerenciamento de índice. Nesse caso, o índice é desativado temporariamente, e as consultas de pesquisa não o usam.
    • BASE_TABLE_TOO_LARGE: o tamanho da tabela de base excede o limite da sua organização.
    • ORGANIZATION_LIMIT_EXCEEDED: o tamanho total das tabelas base indexadas na sua organização excede o limite da organização.
  • message: mensagem detalhada que descreve o status do índice.
use_background_reservation BOOL Indica se a manutenção do índice usa a reserva BACKGROUND. É definido como FALSE quando a manutenção do índice usa o limite.

Escopo e sintaxe

As consultas nessa visualização precisam incluir um qualificador de região. A tabela a seguir explica o escopo da região dessa visualização:

Nome da visualização Escopo do recurso Escopo da região
[`PROJECT_ID`.]`region-REGION`.INFORMATION_SCHEMA.SEARCH_INDEXES_BY_ORGANIZATION Organização que contém o projeto especificado REGION

Substitua:

  • Opcional: PROJECT_ID: o ID do seu projetoGoogle Cloud . Se não for especificado, o projeto padrão será usado.

  • REGION: a região do projeto. Por exemplo, `myproject`.`region-us`.INFORMATION_SCHEMA.SEARCH_INDEXES_BY_ORGANIZATION.

Limitação de indexação

Se um índice for limitado, o tamanho da tabela dele não será contabilizado no limite da sua organização. Essa limitação ocorre quando o tamanho da tabela base fica abaixo de 10 GB ou excede o limite da sua organização. Quando um índice é limitado, os jobs de gerenciamento dele são pausados, fazendo com que o índice fique desatualizado e, eventualmente, seja desativado temporariamente. Consequentemente, as consultas de pesquisa não podem usar o índice.

Exemplos

Esta seção inclui exemplos de consultas da visualização INFORMATION_SCHEMA.SEARCH_INDEXES_BY_ORGANIZATION.

Descobrir se o consumo excede o limite em uma determinada região

O exemplo a seguir ilustra se o tamanho total da tabela base indexada em uma organização, usando slots compartilhados na multirregião dos EUA, excede 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

O resultado será semelhante ao seguinte:

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

Encontrar o tamanho total da tabela base indexada por projetos em uma região

O exemplo a seguir mostra o detalhamento de cada projeto em uma região múltipla dos EUA com o tamanho total das tabelas de base indexadas:

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

O resultado será semelhante ao seguinte:

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

Encontrar índices de pesquisa limitados

O exemplo a seguir retorna todos os índices de pesquisa que estão sendo limitados na organização e na região:

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

O resultado será semelhante ao seguinte:

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