Présentation de la recherche dans BigQuery
Les index de recherche BigQuery vous permettent d'utiliser GoogleSQL pour trouver efficacement 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 vos index. Ainsi, lorsque les données deviennent disponibles dans BigQuery, vous pouvez les récupérer immédiatement avec la fonction SEARCH
ou d'autres opérateurs et fonctions, tels que les opérateurs égal (=
), IN
ou LIKE
, ainsi que certaines fonctions de chaîne et JSON. Pour optimiser vos recherches, consultez les bonnes pratiques.
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 dans votre organisation est inférieure à la limite de votre région. Pour accepter l'indexation au-delà de cette limite, vous devez fournir votre propre réservation pour la gestion des jobs 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 l'espace de stockage de l'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 le prédicat optimisable par les index de recherche 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') );
Les index de recherche ne sont pas utilisés lorsque la requête fait référence à des vues matérialisées.
Les index de recherche ne sont pas utilisés dans une requête de transaction multi-instruction.
Étape suivante
- Apprenez-en plus sur la création d'un index de recherche
- En savoir plus sur la recherche dans une table avec un index de recherche.