Introduzione alla ricerca in BigQuery

Gli indici di ricerca BigQuery ti consentono di utilizzare GoogleSQL per trovare in modo efficiente elementi di dati unici nascosti in testi non strutturati e dati JSON semi-strutturati, senza dover conoscere in anticipo gli schemi delle tabelle.

Con gli indici di ricerca, BigQuery fornisce un potente archivio a colonne e la ricerca di testo 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 per trovare codici di errore specifici in un payload di testo.

BigQuery archivia e gestisce gli indici, in modo che quando i dati diventano disponibili in BigQuery, tu possa recuperarli immediatamente con la funzione SEARCH o con altri operatori e funzioni, come gli operatori di uguaglianza (=), IN o LIKE e alcune funzioni di stringa e JSON. Per ottimizzare le tue ricerche, leggi le best practice.

Casi d'uso

Gli indici di ricerca di BigQuery ti aiutano a svolgere le seguenti attività:

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

Per saperne di più, vedi Creare un indice di ricerca e Eseguire ricerche con un indice.

Prezzi

Non è previsto alcun addebito per l'elaborazione necessaria per creare e aggiornare gli indici di ricerca quando le dimensioni totali delle tabelle indicizzate nella tua organizzazione sono inferiori al limite della tua regione. Per supportare l'indicizzazione oltre questo limite, devi fornire la tua 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, devi disporre dell'autorizzazione IAM bigquery.tables.createIndex per la tabella in cui stai creando l'indice. Per eliminare un indice di ricerca, devi disporre dell'autorizzazione bigquery.tables.deleteIndex. Ognuno dei seguenti ruoli IAM predefiniti include le autorizzazioni necessarie per lavorare con gli indici di ricerca:

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

Limitazioni

  • Non puoi creare un indice di ricerca direttamente su una vista o una vista materializzata, ma chiamando la funzione SEARCH su una vista di una tabella indicizzata viene utilizzato l'indice di ricerca sottostante.
  • Non puoi creare un indice di ricerca in una tabella esterna.
  • Se rinomini una tabella dopo aver creato un indice di ricerca, l'indice diventa non valido.
  • La funzione SEARCH è progettata per le ricerche puntuali. La ricerca approssimativa, la correzione degli errori di battitura, i caratteri jolly e altri tipi di ricerche di documenti non sono disponibili.
  • Se l'indice di ricerca non ha ancora raggiunto una copertura del 100%, ti viene comunque addebitato l'intero spazio di archiviazione dell'indice segnalato nella visualizzazione INFORMATION_SCHEMA.SEARCH_INDEXES.
  • Le query che utilizzano la funzione SEARCH o sono ottimizzate dagli indici di ricerca non vengono 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 dagli indici di ricerca fa parte di una sottoquery in un'istruzione DML.

    • Nella seguente query 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 viste materializzate.

  • Gli indici di ricerca non vengono utilizzati in una query di transazione multi-statement.

  • Gli indici di ricerca non vengono utilizzati in una query time travel.

Passaggi successivi