Introdução à pesquisa no BigQuery

Os índices de pesquisa do BigQuery permitem que você use o GoogleSQL para encontrar facilmente elementos de dados exclusivos que estão enterrados em textos não estruturados e dados JSON semiestruturados, sem precisar conhecer os esquemas de tabelas com antecedência.

Com índices de pesquisa, o BigQuery fornece um armazenamento em colunas e pesquisa de texto eficientes em uma plataforma, permitindo pesquisas de linhas eficientes quando você precisa encontrar linhas individuais de dados. Um caso de uso comum é a análise de registros. Por exemplo, você pode identificar as linhas de dados associadas a um usuário para os relatórios do Regulamento geral de proteção de dados (GDPR) ou encontrar códigos de erro específicos em um payload de texto.

O BigQuery armazena e gerencia seus índices para que, quando os dados ficarem disponíveis no BigQuery, seja possível recuperá-los imediatamente com a função SEARCH ou outros operadores e funções, como os operadores de igual (=), IN ou LIKE e determinados tipos de string e funções JSON. Para otimizar suas pesquisas, leia sobre práticas recomendadas.

Casos de uso

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

  • Pesquise registros de sistema, rede ou aplicativo armazenados em tabelas do BigQuery.
  • Identifique os elementos de dados que precisam ser excluídos para obedecer aos processos regulatórios.
  • Suporte à solução de problemas do desenvolvedor.
  • Faça auditorias de segurança.
  • Crie um painel que exija filtros de pesquisa altamente seletivos.
  • Pesquise dados pré-processados para encontrar correspondências exatas.

Para mais informações, consulte Criar um índice de pesquisa e Pesquisar com um índice.

Preços

Não há cobrança para o processamento necessário para criar e atualizar índices de pesquisa quando o tamanho total das tabelas indexadas na sua organização estiver abaixo do limite da sua região. Para permitir a indexação além desse limite, é necessário fornecer sua própria reserva para processar os jobs de gerenciamento de índice. Os índices de pesquisa geram custos de armazenamento quando estão ativos. Você pode encontrar o tamanho de armazenamento do índice na visualização INFORMATION_SCHEMA.SEARCH_INDEXES.

Papéis e permissões

Para criar um índice de pesquisa, é necessário ter a permissão bigquery.tables.createIndex do IAM na tabela em que está criando o índice. Para remover um índice de pesquisa, é necessário ter a permissão bigquery.tables.deleteIndex. Cada um dos papéis do IAM predefinidos a seguir inclui as permissões necessárias 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 é possível criar um índice de pesquisa diretamente em uma visualização ou visualização materializada, mas chamar a função SEARCH na visualização de uma tabela indexada faz uso do índice de pesquisa subjacente.
  • Se você renomear uma tabela depois de criar um índice de pesquisa, esse índice se tornará inválido.
  • A função SEARCH foi projetada para pesquisas de ponto. A pesquisa imprecisa, a correção de digitação, os caracteres curinga e outros tipos de pesquisas em documentos não estão disponíveis.
  • Se o índice de pesquisa ainda não tiver 100% de cobertura, você ainda será cobrado por todo o armazenamento de índice relatado na visualização INFORMATION_SCHEMA.SEARCH_INDEXES.
  • As consultas que contêm a função SEARCH 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 instrução DML, mas podem ser usados quando o predicado que pode ser otimizado por índices de pesquisa faz parte de uma subconsulta em uma instrução DML.

    • Um índice de pesquisa não é usado na seguinte consulta:
    DELETE FROM my_dataset.indexed_table
    WHERE SEARCH(user_id, '123');
    
    • Um índice de pesquisa pode ser usado 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 visualizações materializadas.

  • Os índices de pesquisa não são usados em uma consulta de transação de várias instruções.

A seguir