Ce guide explique comment importer des données d'index depuis BigQuery dans la recherche vectorielle avec l'API ImportIndex
. Il simplifie le processus de remplissage des index de recherche vectorielle directement à partir de vos tables BigQuery contenant des embeddings vectoriels.
Préparer les données BigQuery pour l'importation
Avant d'importer des données d'index, votre table BigQuery doit comporter les colonnes suivantes :
Identifiants uniques : cette colonne contient des identifiants uniques pour chaque point de données. Il est mappé au champ
id
dans Vector Search.Embeddings vectoriels : cette colonne contient les embeddings vectoriels, représentés sous la forme d'un champ
FLOAT
répété. Il est mappé au champ d'embedding dans Vector Search.
Vous pouvez éventuellement inclure les colonnes suivantes :
Restrictions : il s'agit de colonnes pour les restrictions de chaînes et numériques, qui vous permettent de filtrer vos données lors des recherches.
Métadonnées : colonnes de métadonnées à renvoyer avec les résultats de requête d'index de recherche vectorielle.
Préparer l'index Vector Search pour l'importation
Une fois vos données BigQuery préparées, assurez-vous que l'index de recherche vectorielle de destination :
Existe dans Vector Search au sein de votre projet : cet index sert de destination pour vos données importées. L'index doit être créé dans votre projet.
Est défini sur "Écraser" ou "Ajouter" : lors du processus d'importation, vous avez la possibilité d'écraser les données existantes dans votre index Vector Search ou d'ajouter les données importées depuis BigQuery. L'option "Écraser" remplace les points de données actuels par les données importées. L'ajout permet d'ajouter les nouvelles données à l'index existant.
La dimensionnalité correspond : la dimensionnalité des embeddings stockés dans vos données BigQuery doit être identique à celle configurée pour votre index Vector Search.
Spécifier ImportIndexRequest
Avant d'importer des données depuis BigQuery, créez un objet ImportIndexRequest
qui spécifie l'index cible, si les données existantes doivent être écrasées et la configuration pour la connexion à BigQuery. Envoyez cet objet de requête à l'API ImportIndex
.
Voici un exemple de ImportIndexRequest
au format 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
: nom complet de la ressource de l'index Vector Search dans lequel vous souhaitez importer les données.isCompleteOverwrite
: valeur booléenne indiquant s'il faut écraser les données existantes dans l'index. Définissez la valeur surtrue
pour remplacer les données existantes.config
: contient la configuration de la source BigQuery.bigquerySourceConfig
: spécifie les informations permettant de se connecter à votre table BigQuery.tablePath
: chemin d'accès complet à votre table BigQuery au formatbq://[PROJECT_ID].[DATASET_ID].[TABLE_ID]
.datapointFieldMapping
: mappe les colonnes de votre table BigQuery aux champs de la recherche vectorielle.idColumn
: nom de la colonne contenant les identifiants uniques.embeddingColumn
: nom de la colonne contenant les embeddings vectorielles.restricts
: (facultatif) spécifie les restrictions de chaîne.namespace
: espace de noms de la restriction.allowColumn
: tableau contenant le ou les noms de colonnes pour les valeurs autorisées de la restriction.denyColumn
: tableau contenant le ou les noms de colonnes pour les valeurs refusées pour la restriction.numericRestricts
: (facultatif) spécifie les restrictions numériques.namespace
: espace de noms de la restriction numérique.value_column
: nom de la colonne contenant des valeurs numériques.value_type
: type de la valeur numérique, tel queINT
,FLOAT
ouDOUBLE
.metadataColumns
: (facultatif) champs de métadonnées à inclure dans l'embedding de caractéristiques. Ces champs de métadonnées peuvent être récupérés à partir des résultats de recherche de l'index, mais ils n'ont aucune incidence sur la recherche elle-même. Par exemple, le filtrage ne peut pas être effectué sur les champs de métadonnées.
Exécuter l'importation
Une fois que vous avez créé un ImportIndexRequest
, envoyez-le au point de terminaison de l'API ImportIndex
. Cela déclenche le processus d'importation, qui exporte les données de BigQuery et les ingère dans votre index Vector Search. ImportIndex
renvoie une opération de longue durée. Vous pouvez utiliser l'ID d'opération pour surveiller la progression de l'opération d'importation.
Une fois les données importées stockées, elles résident dans votre index Vector Search et sont indiscernables des données ingérées à l'aide d'autres méthodes. L'index peut continuer à être géré à l'aide des API Vector Search standards.
L'exemple de code suivant illustre un résultat de requête avec return_full_datapoint
défini sur "true" et la configuration du connecteur BigQuery qui spécifie une restriction genre
, une restriction numérique year
et les colonnes de métadonnées title
et 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
}
}