Présentation de la recherche dans BigQuery

Les index de recherche BigQuery vous permettent d'utiliser le langage GoogleSQL pour trouver facilement des éléments de données uniques répartis dans du texte non structuré et des données JSON semi-structurées, sans avoir à connaître les schémas de table à l'avance.

Avec les index de recherche, BigQuery fournit un système de stockage en colonnes et de recherche de texte performant sur une seule plate-forme. La recherche de lignes de données individuelles est ainsi plus efficace. L'analyse de journaux est un cas d'utilisation courant. Par exemple, vous pouvez identifier les lignes de données associées à un utilisateur pour les rapports sur le règlement général sur la protection des données (RGPD) ou trouver des codes d'erreur spécifiques dans une charge utile de type texte.

BigQuery stocke et gère les index. Ainsi, lorsque les données deviennent disponibles dans BigQuery, vous pouvez les récupérer immédiatement avec la fonction SEARCH.

Cas d'utilisation

Les index de recherche BigQuery vous permettent d'effectuer les tâches suivantes :

  • Système de recherche, réseau ou journaux d'application stockés dans des tables BigQuery.
  • Identifier les éléments de données à supprimer afin de respecter des processus réglementaires.
  • Aide au dépannage pour les développeurs.
  • Effectuer des audits de sécurité.
  • Créer un tableau de bord nécessitant des filtres de recherche très sélectifs.
  • Recherche des correspondances exactes dans les données prétraitées.

Pour plus d'informations, consultez les sections Créer un index de recherche et Rechercher avec un index.

Tarifs

Le traitement requis pour créer et actualiser vos index de recherche est gratuit lorsque la taille totale des tables indexées de votre organisation est inférieure à la limite de votre région. Pour permettre l'indexation au-delà de cette limite, vous devez fournir votre propre réservation afin de gérer les tâches de gestion des index. Les index de recherche entraînent des coûts de stockage lorsqu'ils sont actifs. Vous pouvez trouver la taille de stockage des index dans la vue INFORMATION_SCHEMA.SEARCH_INDEXES.

Rôles et autorisations

Pour créer un index de recherche, vous devez disposer de l'autorisation IAM bigquery.tables.createIndex sur la table dans laquelle vous créez l'index. Pour supprimer un index de recherche, vous devez disposer de l'autorisation bigquery.tables.deleteIndex. Chacun des rôles IAM prédéfinis suivants inclut les autorisations dont vous avez besoin pour travailler avec les index de recherche :

  • Propriétaire de données BigQuery (roles/bigquery.dataOwner)
  • Éditeur de données BigQuery (roles/bigquery.dataEditor)
  • Administrateur BigQuery (roles/bigquery.admin)

Limites

  • Vous ne pouvez pas créer un index de recherche directement sur une vue ou une vue matérialisée, mais l'appel de la fonction SEARCH sur une vue d'une table indexée utilise l'index de recherche sous-jacent.
  • Si vous renommez une table de base après avoir créé un index de recherche, l'index devient non valide.
  • La fonction SEARCH est conçue pour les recherches de points. Les recherches floues, la correction des fautes de frappe, les caractères génériques et les autres types de recherches de documents ne sont pas disponibles.
  • Si l'index de recherche n'est pas encore à 100 % de la couverture, vous êtes toujours facturé pour tout le stockage d'index indiqué dans la vue INFORMATION_SCHEMA.SEARCH_INDEXES.
  • Les requêtes contenant la fonction SEARCH ne sont pas accélérées par BigQuery BI Engine.
  • Les index de recherche ne sont pas utilisés lorsque la table indexée est modifiée par une instruction LMD, mais ils peuvent être utilisés lorsque la fonction SEARCH fait partie d'une sous-requête dans une instruction LMD.

    • Un index de recherche n'est pas utilisé dans la requête suivante :
    DELETE FROM my_dataset.indexed_table
    WHERE SEARCH(user_id, '123');
    
    • Un index de recherche peut être utilisé dans la requête suivante :
    DELETE FROM my_dataset.other_table
    WHERE
      user_id IN (
        SELECT user_id
        FROM my_dataset.indexed_table
        WHERE SEARCH(user_id, '123')
      );
    

Étapes suivantes