Importare i dati dell'indice da BigQuery

Questa guida spiega come importare i dati degli indici da BigQuery in Vector Search con l'API ImportIndex, semplificando il processo di compilazione degli indici di Vector Search direttamente dalle tabelle BigQuery che contengono incorporamenti vettoriali.

Preparare i dati di BigQuery per l'importazione

Prima di importare i dati dell'indice, la tabella BigQuery deve avere le seguenti colonne:

  • Identificatori univoci: questa colonna contiene identificatori univoci per ogni punto dati. È mappato al campo id in Vector Search.

  • Incorporamenti vettoriali: questa colonna contiene gli incorporamenti vettoriali, rappresentati come un campo FLOAT ripetuto. Viene mappato al campo embedding in Vector Search.

In via facoltativa, puoi includere le seguenti colonne:

  • Limitazioni: si tratta di colonne per limitazioni numeriche e di stringa, che consentono di filtrare i dati durante le ricerche.

  • Metadati: si tratta di colonne di metadati da restituire con i risultati della query dell'indice di ricerca vettoriale.

Preparazione dell'indice Vector Search per l'importazione

Dopo aver preparato i dati BigQuery, assicurati che l'indice di ricerca vettoriale di destinazione:

  • Esiste in Vector Search all'interno del progetto: questo indice funge da destinazione per i dati importati. L'indice deve essere creato all'interno del progetto.

  • È impostato per sovrascrivere o aggiungere dati: durante il processo di importazione, hai la possibilità di sovrascrivere i dati esistenti all'interno dell'indice di ricerca vettoriale o di aggiungere i dati importati da BigQuery. La sovrascrittura sostituisce i punti dati attuali con i dati importati. L'aggiunta dei nuovi dati all'indice esistente.

  • Corrispondenza della dimensionalità: la dimensionalità degli incorporamenti archiviati nei dati BigQuery deve essere identica a quella configurata per l'indice di ricerca vettoriale.

Specifica del ImportIndexRequest

Prima di importare i dati da BigQuery, crea un oggetto ImportIndexRequest che specifichi l'indice di destinazione, se sovrascrivere i dati esistenti e la configurazione per la connessione a BigQuery. Invia questo oggetto di richiesta all'API ImportIndex.

Di seguito è riportato un esempio di ImportIndexRequest in formato JSON:

{
  "name": "projects/[PROJECT_ID]/locations/[LOCATION]/indexes/[INDEX_ID]",
  "isCompleteOverwrite": true,
  "config": {
    "bigQuerySourceConfig": {
      "tablePath": "bq://[PROJECT_ID].[DATASET_ID].[TABLE_ID]",
      "datapointFieldMapping": {
        "idColumn": "[ID_COLUMN_NAME]",
        "embeddingColumn": "[EMBEDDING_COLUMN_NAME]",
        "restricts": [
          {
            "namespace": "[RESTRICT_NAMESPACE]",
            "allowColumn": ["[RESTRICT_ALLOW_COLUMN_NAME]"],
            "denyColumn": ["[RESTRICT_DENY_COLUMN_NAME]"]
          }
        ],
        "numericRestricts": [
          {
            "namespace": "[RESTRICT_NAMESPACE]",
            "valueColumn": "[RESTRICT_VALUE_COLUMN_NAME]",
            "valueType": "INT"
          }
        ],
        "metadataColumns": ["METADATA_COLUMN1", "METADATA_COLUMN2", ...]
      }
    }
  }
}
  • name: il nome completo della risorsa dell'indice Vector Search in cui vuoi importare i dati.

  • isCompleteOverwrite: un valore booleano che indica se sovrascrivere i dati esistenti nell'indice. Imposta su true per sostituire i dati esistenti.

  • config: contiene la configurazione dell'origine BigQuery.

    • bigquerySourceConfig: specifica i dettagli per la connessione alla tabella BigQuery.

    • tablePath: il percorso completo della tabella BigQuery nel formato bq://[PROJECT_ID].[DATASET_ID].[TABLE_ID].

    • datapointFieldMapping: mappa le colonne della tabella BigQuery ai campi di Vector Search.

      • idColumn: il nome della colonna contenente gli identificatori univoci.

      • embeddingColumn: il nome della colonna contenente gli incorporamenti vettoriali.

      • restricts: (facoltativo) specifica le restrizioni della stringa.

      • namespace: lo spazio dei nomi per la limitazione.

      • allowColumn: l'array contenente i nomi delle colonne per i valori consentiti per la restrizione.

      • denyColumn: l'array contenente i nomi delle colonne per i valori negati per la limitazione.

      • numericRestricts: (facoltativo) specifica le limitazioni numeriche.

      • namespace: lo spazio dei nomi per la limitazione numerica.

      • value_column: il nome della colonna contenente valori numerici.

      • value_type: il tipo di valore numerico, ad esempio INT, FLOAT o DOUBLE.

      • metadataColumns: (facoltativo) i campi dei metadati da includere nell'incorporamento delle funzionalità. Questi campi di metadati possono essere recuperati dai risultati di ricerca dell'indice, ma non influiscono sulla ricerca stessa. Ad esempio, non è possibile eseguire il filtraggio sui campi dei metadati.

Esecuzione dell'importazione

Una volta creato un ImportIndexRequest, invialo all'endpoint API ImportIndex. Viene attivato il processo di importazione, che esporta i dati da BigQuery e li inserisce nell'indice di Vector Search. ImportIndex restituisce un'operazione a lunga esecuzione. Puoi utilizzare l'ID operazione per monitorare l'avanzamento dell'operazione di importazione.

Una volta memorizzati, i dati importati risiedono nell'indice di Vector Search e non sono distinguibili da quelli inseriti con altri metodi. L'indice può continuare a essere gestito utilizzando le API Vector Search standard.

Il seguente esempio di codice mostra un risultato della query con return_full_datapoint impostato su true e la configurazione del connettore BigQuery che specifica una restrizione genre, una restrizione numerica year e le colonne dei metadati title e description.

nearest_neighbors {
  neighbors {
    datapoint {
      datapoint_id: "4"
      feature_vector: 0.7
      feature_vector: 0.8
      restricts {
        namespace: "genre"
        allow_list: "Drama"
      }
      embedding_metadata {
        title: "A Movie"
        description: "The story of A Movie..."
      }
      crowding_tag {
        crowding_attribute: "0"
      }
      numeric_restricts {
        namespace: "year"
        value_int: 1942
      }
    }
    distance: 0.75
  }
}