Introdução à pesquisa no BigQuery

Os índices de pesquisa do BigQuery permitem-lhe usar o GoogleSQL para encontrar de forma eficiente elementos de dados únicos que estão ocultos em texto não estruturado e dados JSON semiestruturados, sem ter de conhecer os esquemas das tabelas antecipadamente.

Com os índices de pesquisa, o BigQuery oferece um poderoso armazenamento em colunas e pesquisa de texto numa única plataforma, o que permite pesquisas de linhas eficientes quando precisa de encontrar linhas de dados individuais. Um exemplo de utilização comum são as estatísticas de registos. Por exemplo, pode querer identificar as linhas de dados associadas a um utilizador para relatórios do Regulamento Geral sobre a Proteção de Dados (RGPD) ou encontrar códigos de erro específicos num payload de texto.

O BigQuery armazena e gere os seus índices, para que, quando os dados ficarem disponíveis no BigQuery, possa obtê-los imediatamente com a função SEARCH ou outros operadores e funções, como os operadores igual (=), IN ou LIKE e determinadas funções de strings e JSON. Para otimizar as suas pesquisas, leia as práticas recomendadas.

Exemplos de utilização

Os índices de pesquisa do BigQuery ajudam a realizar as seguintes tarefas:

  • Pesquise registos de sistemas, redes ou aplicações armazenados em tabelas do BigQuery.
  • Identificar elementos de dados para eliminação de modo a agir em conformidade com os processos regulamentares.
  • Apoiar a resolução de problemas por parte dos programadores.
  • Realizar auditorias de segurança.
  • Criar um painel de controlo que requer filtros de pesquisa altamente seletivos.
  • Pesquise dados pré-processados para encontrar correspondências exatas.

Para mais informações, consulte os artigos Crie um índice de pesquisa e Pesquise com um índice.

Preços

Não existe qualquer custo para o processamento necessário para criar e atualizar os seus índices de pesquisa quando o tamanho total das tabelas indexadas na sua organização for inferior ao limite da sua região. Para suportar a indexação além deste limite, tem de fornecer a sua própria reserva para processar as tarefas de gestão de índices. Os índices de pesquisa incorrem em custos de armazenamento quando estão ativos. Pode encontrar o tamanho do armazenamento do índice na vista INFORMATION_SCHEMA.SEARCH_INDEXES.

Funções e permissões

Para criar um índice de pesquisa, precisa da bigquery.tables.createIndex autorização de IAM na tabela onde está a criar o índice. Para eliminar um índice de pesquisa, precisa da autorização bigquery.tables.deleteIndex. Cada uma das seguintes funções de IAM predefinidas inclui as autorizações de que precisa para trabalhar com índices de pesquisa:

  • Proprietário de dados do BigQuery (roles/bigquery.dataOwner)
  • Editor de dados do BigQuery (roles/bigquery.dataEditor)
  • Administrador do BigQuery (roles/bigquery.admin)

Limitações

  • Não pode criar um índice de pesquisa diretamente numa vista ou numa vista materializada, mas chamar a função SEARCH numa vista de uma tabela indexada usa o índice de pesquisa subjacente.
  • Não pode criar um índice de pesquisa numa tabela externa.
  • Se mudar o nome de uma tabela depois de criar um índice de pesquisa na mesma, o índice torna-se inválido.
  • A função SEARCH foi concebida para pesquisas de pontos. A pesquisa aproximada, a correção de erros ortográficos, os carateres universais e outros tipos de pesquisas de documentos não estão disponíveis.
  • Se o índice de pesquisa ainda não tiver uma cobertura de 100%, continua a ser cobrado por todo o armazenamento de índice comunicado na visualização INFORMATION_SCHEMA.SEARCH_INDEXES.
  • As consultas que usam a função SEARCH ou são otimizadas por índices de pesquisa não são aceleradas pelo BigQuery BI Engine.
  • Os índices de pesquisa não são usados quando a tabela indexada é modificada por uma declaração DML, mas podem ser usados quando o predicado que é otimizável por índices de pesquisa faz parte de uma subconsulta numa declaração DML.

    • Não é usado um índice de pesquisa na seguinte consulta:
    DELETE FROM my_dataset.indexed_table
    WHERE SEARCH(user_id, '123');
    • Pode usar um índice de pesquisa na seguinte consulta:
    DELETE FROM my_dataset.other_table
    WHERE
      user_id IN (
        SELECT user_id
        FROM my_dataset.indexed_table
        WHERE SEARCH(user_id, '123')
      );
  • Os índices de pesquisa não são usados quando a consulta faz referência a vistas materializadas.

  • Os índices de pesquisa não são usados numa consulta de transação com várias declarações.

  • Os índices de pesquisa não são usados numa consulta de viagem no tempo.

O que se segue?