Indexdaten aus BigQuery importieren

In dieser Anleitung wird beschrieben, wie Sie Indexdaten aus BigQuery mit der ImportIndex API in die Vektorsuche importieren. So können Sie Vektorsuchindizes direkt aus Ihren BigQuery-Tabellen mit Vektoreinbettungen füllen.

BigQuery-Daten für den Import vorbereiten

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

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

  • Vektoreinbettungen: Diese Spalte enthält die Vektoreinbettungen, dargestellt als wiederholtes FLOAT Feld. Sie 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 Suchanfragen filtern können.

  • Metadaten: Dies sind Spalten mit Metadaten, die mit den Abfrageergebnissen des Vektorsuchindex zurückgegeben werden sollen.

Vektorsuchindex für den Import vorbereiten

Nachdem Sie Ihre BigQuery-Daten vorbereitet haben, prüfen Sie, ob der Zielindex der Vektorsuche folgende Voraussetzungen erfüllt:

  • Er ist in der Vektorsuche in Ihrem Projekt vorhanden: Dieser Index dient als Ziel für Ihre importierten Daten. Der Index muss in Ihrem Projekt erstellt werden.

  • Er ist so konfiguriert, dass Daten überschrieben oder angehängt werden: Während des Importvorgangs können Sie entweder die vorhandenen Daten in Ihrem Vektorsuchindex überschreiben oder die aus BigQuery importierten Daten anhängen. Beim Überschreiben werden die aktuellen Datenpunkte durch die importierten Daten ersetzt. Beim Anhängen werden die neuen Daten dem vorhandenen Index hinzugefügt.

  • Die Dimensionalität stimmt überein: 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, erstellen Sie ein ImportIndexRequest-Objekt, 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 sehen Sie ein Beispiel für eine ImportIndexRequest im JSON-Format:

{
  "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: Der vollständige Ressourcenname des Vektorsuchindex, in den Sie die Daten importieren möchten.

  • isCompleteOverwrite: Ein boolescher Wert, der angibt, ob vorhandene Daten im Index überschrieben werden sollen. Setzen Sie ihn auf true, 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 bq://[PROJECT_ID].[DATASET_ID].[TABLE_ID].

    • datapointFieldMapping: Ordnet die Spalten in Ihrer BigQuery-Tabelle den Feldern in der Vektorsuche zu.

      • idColumn: Der Name der Spalte mit eindeutigen IDs.

      • 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 nicht zulässige 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 Suchergebnissen des Index abgerufen werden, haben aber keine Auswirkungen auf die Suche selbst. So kann beispielsweise nicht nach Metadatenfeldern gefiltert werden.

Import ausführen

Nachdem Sie eine ImportIndexRequest erstellt haben, senden Sie sie an den ImportIndex API Endpunkt. Dadurch wird der Importvorgang ausgelöst, bei dem Daten aus BigQuery exportiert und in Ihren Vektorsuchindex 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 der Vektorsuche verwaltet werden.

Das folgende Codebeispiel zeigt ein Abfrageergebnis, bei dem return_full_datapoint auf „true“ gesetzt ist, 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
  }
}