Introduzione alla ricerca in BigQuery

Gli indici di ricerca di BigQuery ti consentono di utilizzare GoogleSQL per trovare in modo efficiente elementi di dati unici 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 la ricerca testuale in un'unica piattaforma, consentendo ricerche di righe efficienti quando ne hai bisogno per 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 la creazione di report sul Regolamento sulla protezione dei dati (GDPR) o per trovare codici di errore specifici un payload di testo.

BigQuery archivia e gestisce gli indici, in modo che quando i dati diventano disponibili in BigQuery, puoi recuperarli immediatamente con la funzione SEARCH o con altri operatori e funzioni, come gli operatori uguale (=), IN o LIKE e alcune funzioni di stringhe e JSON. Per ottimizzare le ricerche, scopri di più best practice.

Casi d'uso

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

  • Cerca i log di sistema, di rete o di applicazione archiviati nelle tabelle BigQuery.
  • Identifica gli elementi di dati da eliminare per rispettare le procedure di regolamentazione.
  • Supporta la risoluzione dei problemi per gli sviluppatori.
  • Esegui audit della sicurezza.
  • Crea una dashboard che richiede filtri di ricerca altamente selettivi.
  • Cerca corrispondenze esatte nei dati pre-elaborati.

Per ulteriori informazioni, vedi Crea un indice di ricerca e Effettua una ricerca con un indice.

Prezzi

L'elaborazione necessaria per creare e aggiornare gli indici di ricerca non comporta alcun addebito se le dimensioni totali delle tabelle indicizzate nella tua organizzazione sono inferiori al limite della tua regione. Per supportare l'indicizzazione oltre questo limite, è necessario fornire una prenotazione per la gestione dei job di gestione degli indici. Gli indici di ricerca comportano costi di archiviazione quando sono attivi. Puoi trovare le dimensioni dello spazio di archiviazione dell'indice nella visualizzazione INFORMATION_SCHEMA.SEARCH_INDEXES.

Ruoli e autorizzazioni

Per creare un indice di ricerca, è necessario Autorizzazione IAM bigquery.tables.createIndex nella tabella in cui stai creando l'indice. Per rilasciare un indice di ricerca, l'autorizzazione bigquery.tables.deleteIndex. Ciascuno dei seguenti valori predefiniti I ruoli IAM includono le autorizzazioni con cui devi lavorare 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 chiamando il Funzione SEARCH di una tabella indicizzata utilizza l'indice di ricerca sottostante.
  • Se rinomini una tabella dopo aver creato un indice di ricerca, l'indice diventa non valido.
  • La funzione SEARCH è progettata per le ricerche di punti. La ricerca fuzzy, la correzione degli errori ortografici, i caratteri jolly e altri tipi di ricerche nei documenti non sono disponibili.
  • Se l'indice di ricerca non ha ancora raggiunto la copertura del 100%, ti verrà comunque addebitato tutto lo spazio di archiviazione dell'indice indicato nella visualizzazione INFORMATION_SCHEMA.SEARCH_INDEXES.
  • Le query che contengono la funzione SEARCH non sono accelerate da BigQuery BI Engine.
  • Gli indici di ricerca non vengono utilizzati quando la tabella indicizzata viene modificata da un'istruzione DML, ma possono essere utilizzati quando il predicato ottimizzabile tramite gli indici di ricerca 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');
    • Un indice di ricerca può essere utilizzato nella seguente query:
    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 visualizzazioni con dati materiali.

  • Gli indici di ricerca non vengono utilizzati in una query di transazione con più istruzioni.

Passaggi successivi