Introduzione alla ricerca in BigQuery

Gli indici di ricerca di BigQuery consentono di utilizzare GoogleSQL per trovare facilmente elementi di dati univoci nascosti in testo non strutturato e dati JSON semistrutturati, senza dover conoscere in anticipo gli schemi delle tabelle.

Grazie agli indici di ricerca, BigQuery offre un potente archivio a colonne e una ricerca testuale in un'unica piattaforma, consentendo ricerche efficienti di righe quando devi trovare singole righe di dati. Un caso d'uso comune è l'analisi dei log. Ad esempio, potresti voler identificare le righe di dati associate a un utente per i report del Regolamento generale sulla protezione dei dati (GDPR) o trovare codici di errore specifici in un payload di testo.

BigQuery archivia e gestisce gli indici, quindi quando i dati diventano disponibili in BigQuery, puoi recuperarli immediatamente con la funzione SEARCH. Scopri di più sulle best practice per l'utilizzo della funzione SEARCH.

Casi d'uso

Gli indici di ricerca di BigQuery consentono di eseguire le seguenti attività:

  • Cerca i log di sistema, di rete o delle applicazioni archiviati nelle tabelle BigQuery.
  • Identificare gli elementi dei dati da eliminare per rispettare i processi normativi.
  • Assistenza per la risoluzione dei problemi degli sviluppatori.
  • Eseguire controlli di sicurezza.
  • Crea una dashboard che richieda filtri di ricerca altamente selettivi.
  • Cercare i dati pre-elaborati per trovare corrispondenze esatte.

Per ulteriori informazioni, consulta Creare un indice di ricerca e Eseguire ricerche con un indice.

Prezzi

Non viene addebitato alcun costo per l'elaborazione necessaria per creare e aggiornare gli indici di ricerca quando la dimensione totale delle tabelle indicizzate nella tua organizzazione è inferiore al limite della tua regione. Per supportare l'indicizzazione oltre questo limite, devi fornire una prenotazione personalizzata per la gestione dei job di gestione dell'indice. Gli indici di ricerca comportano costi di archiviazione quando sono attivi. Puoi trovare le dimensioni dello spazio di archiviazione dell'indice nella vista INFORMATION_SCHEMA.SEARCH_INDEXES.

Ruoli e autorizzazioni

Per creare un indice di ricerca, devi disporre dell'autorizzazione IAM bigquery.tables.createIndex nella tabella in cui stai creando l'indice. Per rilasciare un indice di ricerca, devi disporre dell'autorizzazione bigquery.tables.deleteIndex. Ciascuno dei seguenti ruoli IAM predefiniti include le autorizzazioni necessarie per lavorare con gli indici di ricerca:

  • Proprietario dati BigQuery (roles/bigquery.dataOwner)
  • Editor dati BigQuery (roles/bigquery.dataEditor)
  • Amministratore BigQuery (roles/bigquery.admin)

Limitazioni

  • Non puoi creare un indice di ricerca direttamente in una vista o in una vista materializzata, ma richiamando la funzione SEARCH in una vista di una tabella indicizzata viene utilizzato l'indice di ricerca sottostante.
  • Se rinomini una tabella dopo aver creato un indice di ricerca al suo interno, l'indice non sarà più valido.
  • La funzione SEARCH è progettata per le ricerche per punto. La ricerca parziale, la correzione di errori ortografici, i caratteri jolly e altri tipi di ricerche nei documenti non sono disponibili.
  • Se l'indice di ricerca non ha ancora una copertura al 100%, ti viene comunque addebitato tutto l'archiviazione dell'indice riportato nella vista INFORMATION_SCHEMA.SEARCH_INDEXES.
  • Le query che contengono la funzione SEARCH non vengono accelerate da BigQuery BI Engine.
  • Gli indici di ricerca non vengono utilizzati se la tabella indicizzata viene modificata da un'istruzione DML, ma possono essere utilizzati quando la funzione SEARCH fa parte di una sottoquery in un'istruzione DML.

    • Nella query seguente non viene utilizzato un indice di ricerca:
    DELETE FROM my_dataset.indexed_table
    WHERE SEARCH(user_id, '123');
    
    • Nella query seguente può essere utilizzato un indice di ricerca:
    DELETE FROM my_dataset.other_table
    WHERE
      user_id IN (
        SELECT user_id
        FROM my_dataset.indexed_table
        WHERE SEARCH(user_id, '123')
      );
    
  • Gli indici di ricerca non vengono utilizzati quando la query fa riferimento alle viste materializzate.

Passaggi successivi