Indexdaten aus BigQuery importieren

In dieser Anleitung wird beschrieben, wie Sie Indexdaten aus BigQuery in Vector Search mit der ImportIndex API importieren. So wird das Einrichten von Vector Search-Indizes direkt aus Ihren BigQuery-Tabellen mit Vektoreinbettungen vereinfacht.

BigQuery-Daten für den Import vorbereiten

Bevor Sie Indexdaten importieren, muss Ihre BigQuery-Tabelle die folgenden Spalten enthalten:

  • Eindeutige Kennzeichnungen: Diese Spalte enthält eindeutige Kennzeichnungen für jeden Datenpunkt. Es wird dem Feld id in der Vektorsuche zugeordnet.

  • Vektoreinbettungen: Diese Spalte enthält die Vektoreinbettungen, die als wiederholtes FLOAT-Feld dargestellt werden. Es wird dem Einbettungsfeld in der Vektorsuche zugeordnet.

Optional können Sie die folgenden Spalten einfügen:

  • Einschränkungen: Dies sind Spalten für String- und numerische Einschränkungen, mit denen Sie Ihre Daten bei der Suche filtern können.

  • Metadaten: Dies sind Spalten mit Metadaten, die mit den Ergebnissen von Indexabfragen der Vektorsuche zurückgegeben werden sollen.

Vektorsuchindex für den Import vorbereiten

Nachdem Sie Ihre BigQuery-Daten vorbereitet haben, müssen Sie dafür sorgen, dass der Ziel-Vektorsuchindex:

  • Ist in Vector Search in Ihrem Projekt vorhanden: Dieser Index dient als Ziel für Ihre importierten Daten. Der Index muss in Ihrem Projekt erstellt werden.

  • Ist so eingestellt, dass Daten überschrieben oder angehängt werden: Während des Importvorgangs haben Sie die Möglichkeit, die vorhandenen Daten in Ihrem Vektorsuchindex zu überschreiben oder die aus BigQuery importierten Daten anzuhängen. Beim Überschreiben werden die aktuellen Datenpunkte durch die importierten Daten ersetzt. Beim Anhängen werden die neuen Daten dem vorhandenen Index hinzugefügt.

  • Übereinstimmung mit Dimensionalität: Die Dimensionalität der in Ihren BigQuery-Daten gespeicherten Einbettungen muss mit der für Ihren Vektorsuchindex konfigurierten Dimensionalität übereinstimmen.

ImportIndexRequest angeben

Bevor Sie Daten aus BigQuery importieren, müssen Sie ein ImportIndexRequest-Objekt erstellen, in dem der Zielindex, die Option zum Überschreiben vorhandener Daten und die Konfiguration für die Verbindung zu BigQuery angegeben werden. Senden Sie dieses Anfrageobjekt an die ImportIndex-API.

Im Folgenden finden Sie ein Beispiel für eine ImportIndexRequest im JSON-Format:

{
  "name": "projects/[PROJECT_ID]/locations/[LOCATION]/indexes/[INDEX_ID]",
  "isCompleteOverwrite": true,
  "config": {
    "bigQuerySourceConfig": {
      "tablePath": "[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: Der vollständige Ressourcenname des Vector Search-Index, in den Sie die Daten importieren möchten.

  • isCompleteOverwrite: Ein boolescher Wert, der angibt, ob vorhandene Daten im Index überschrieben werden sollen. Auf true setzen, um vorhandene Daten zu ersetzen.

  • config: Enthält die Konfiguration für die BigQuery-Quelle.

    • bigquerySourceConfig: Gibt die Details für die Verbindung zu Ihrer BigQuery-Tabelle an.

    • tablePath: Der vollständige Pfad zu Ihrer BigQuery-Tabelle im Format [PROJECT_ID].[DATASET_ID].[TABLE_ID].

    • datapointFieldMapping: Ordnet die Spalten in Ihrer BigQuery-Tabelle den Feldern in Vector Search zu.

      • idColumn: Der Name der Spalte mit eindeutigen Kennungen.

      • embeddingColumn: Der Name der Spalte mit Vektoreinbettungen.

      • restricts: (Optional) Gibt String-Einschränkungen an.

      • namespace: Der Namespace für die Einschränkung.

      • allowColumn: Das Array mit den Spaltennamen für zulässige Werte für die Einschränkung.

      • denyColumn: Das Array mit den Spaltennamen für abgelehnte Werte für die Einschränkung.

      • numericRestricts: (Optional) Gibt numerische Einschränkungen an.

      • namespace: Der Namespace für die numerische Einschränkung.

      • value_column: Der Name der Spalte mit numerischen Werten.

      • value_type: Der Typ des numerischen Werts, z. B. INT, FLOAT oder DOUBLE.

      • metadataColumns: (Optional) Metadatenfelder, die in die Feature-Einbettung aufgenommen werden sollen. Diese Metadatenfelder können aus den Indexsuchergebnissen abgerufen werden, wirken sich aber nicht auf die Suche selbst aus. So ist beispielsweise das Filtern nach Metadatenfeldern nicht möglich.

Import ausführen

Nachdem Sie ein ImportIndexRequest erstellt haben, senden Sie es an den API-Endpunkt ImportIndex. Dadurch wird der Importprozess ausgelöst, bei dem Daten aus BigQuery exportiert und in Ihren Vector Search-Index aufgenommen werden. ImportIndex gibt einen Vorgang mit langer Ausführungszeit zurück. Sie können die Vorgangs-ID verwenden, um den Fortschritt des Importvorgangs zu verfolgen.

Nachdem die importierten Daten gespeichert wurden, befinden sie sich in Ihrem Vektorsuchindex und sind nicht von Daten zu unterscheiden, die mit anderen Methoden aufgenommen wurden. Der Index kann weiterhin mit den Standard-APIs für die Vektorsuche verwaltet werden.

Das folgende Codebeispiel zeigt ein Abfrageergebnis mit return_full_datapoint auf „true“ und die BigQuery-Connector-Konfiguration, die eine genre-Einschränkung, eine numerische year-Einschränkung und die Metadatenspalten title und description angibt.

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
  }
}