Importa datos de índices desde BigQuery

En esta guía, se explica cómo importar datos de índices de BigQuery a la Búsqueda de vectores con la API de ImportIndex, lo que agiliza el proceso de propagación de los índices de la Búsqueda de vectores directamente desde tus tablas de BigQuery que contienen incorporaciones de vectores.

Cómo preparar los datos de BigQuery para la importación

Antes de importar datos del índice, tu tabla de BigQuery debe tener las siguientes columnas:

  • Identificadores únicos: Esta columna contiene identificadores únicos para cada punto de datos. Se asigna al campo id en la Búsqueda de vectores.

  • Embeddings de vectores: Esta columna contiene los embeddings de vectores, representados como un campo FLOAT repetido. Se asigna al campo de incorporación en Vector Search.

De manera opcional, puedes incluir las siguientes columnas:

  • Restringe: Son columnas para restricciones numéricas y de cadena, que te permiten filtrar tus datos durante las búsquedas.

  • Metadatos: Son columnas de metadatos que se devolverán con los resultados de la búsqueda en el índice de Vector Search.

Cómo preparar el índice de la Búsqueda de vectores para la importación

Una vez que hayas preparado tus datos de BigQuery, asegúrate de que el índice de Vector Search de destino cumpla con los siguientes requisitos:

  • Existe en la Búsqueda de vectores dentro de tu proyecto: Este índice sirve como destino para tus datos importados. El índice se debe crear dentro de tu proyecto.

  • Se configura para reemplazar o agregar datos: Durante el proceso de importación, tienes la opción de reemplazar los datos existentes en tu índice de Vector Search o agregar los datos importados de BigQuery. Si sobrescribes los datos, se reemplazarán los puntos de datos actuales por los datos importados. La operación de anexar agrega los datos nuevos al índice existente.

  • Coincide con la dimensionalidad: La dimensionalidad de los embeddings almacenados en tus datos de BigQuery debe ser idéntica a la dimensionalidad configurada para tu índice de Vector Search.

Cómo especificar el ImportIndexRequest

Antes de importar datos de BigQuery, crea un objeto ImportIndexRequest que especifique el índice de destino, si se deben reemplazar los datos existentes y la configuración para conectarse a BigQuery. Envía este objeto de solicitud a la API de ImportIndex.

A continuación, se muestra un ejemplo de un ImportIndexRequest en 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: Es el nombre completo del recurso del índice de Vector Search en el que deseas importar los datos.

  • isCompleteOverwrite: Es un valor booleano que indica si se deben reemplazar los datos existentes en el índice. Se establece en true para reemplazar los datos existentes.

  • config: Contiene la configuración de la fuente de BigQuery.

    • bigquerySourceConfig: Especifica los detalles para conectarse a tu tabla de BigQuery.

    • tablePath: Es la ruta de acceso completa a tu tabla de BigQuery en el formato bq://[PROJECT_ID].[DATASET_ID].[TABLE_ID].

    • datapointFieldMapping: Asigna las columnas de tu tabla de BigQuery a los campos de Vector Search.

      • idColumn: Es el nombre de la columna que contiene identificadores únicos.

      • embeddingColumn: Es el nombre de la columna que contiene las incorporaciones de vectores.

      • restricts: (Opcional) Especifica restricciones de cadena.

      • namespace: Es el espacio de nombres de la restricción.

      • allowColumn: Es el array que contiene los nombres de las columnas para los valores permitidos de la restricción.

      • denyColumn: Es el array que contiene los nombres de las columnas para los valores rechazados de la restricción.

      • numericRestricts: (Opcional) Especifica restricciones numéricas.

      • namespace: Es el espacio de nombres de la restricción numérica.

      • value_column: Es el nombre de la columna que contiene valores numéricos.

      • value_type: Es el tipo de valor numérico, como INT, FLOAT o DOUBLE.

      • metadataColumns: (Opcional) Campos de metadatos que se incluirán en la incorporación de la función. Estos campos de metadatos se pueden recuperar de los resultados de la búsqueda del índice, pero no afectan la búsqueda en sí. Por ejemplo, no se pueden filtrar los campos de metadatos.

Cómo ejecutar la importación

Una vez que hayas creado un ImportIndexRequest, envíalo al extremo de la API de ImportIndex. Esto activa el proceso de importación, que exporta datos de BigQuery y los transfiere a tu índice de Vector Search. ImportIndex devuelve una operación de larga duración. Puedes usar el ID de operación para supervisar el progreso de la operación de importación.

Una vez que se almacenan los datos importados, residen en tu índice de Vector Search y no se distinguen de los datos que se incorporan con otros métodos. El índice se puede seguir administrando con las APIs estándar de Vector Search.

En la siguiente muestra de código, se muestra un resultado de la consulta con return_full_datapoint establecido como verdadero y la configuración del conector de BigQuery que especifica un genre, un year numérico y las columnas de metadatos title y 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
  }
}