Mengimpor data indeks dari BigQuery

Panduan ini menjelaskan cara mengimpor data indeks dari BigQuery ke Vector Search dengan API ImportIndex, sehingga menyederhanakan proses pengisian indeks Vector Search langsung dari tabel BigQuery yang berisi embedding vektor.

Menyiapkan data BigQuery untuk diimpor

Sebelum mengimpor data indeks, tabel BigQuery Anda harus memiliki kolom berikut:

  • ID unik: Kolom ini berisi ID unik untuk setiap titik data. Kolom ini dipetakan ke kolom id di Vector Search.

  • Embedding vektor: Kolom ini berisi embedding vektor, yang ditampilkan sebagai kolom FLOAT berulang. Nilai ini dipetakan ke kolom embedding di Vector Search.

Secara opsional, Anda dapat menyertakan kolom berikut:

  • Batasan: Ini adalah kolom untuk batasan string dan numerik, yang memungkinkan Anda memfilter data selama penelusuran.

  • Metadata: Ini adalah kolom metadata yang akan ditampilkan dengan hasil kueri indeks Penelusuran Vektor.

Menyiapkan indeks Vector Search untuk diimpor

Setelah Anda menyiapkan data BigQuery, pastikan indeks Penelusuran Vektor tujuan:

  • Ada di Vector Search dalam project Anda: Indeks ini berfungsi sebagai tujuan untuk data yang diimpor. Indeks harus dibuat dalam project Anda.

  • Disetel untuk menimpa atau menambahkan data: Selama proses impor, Anda memiliki opsi untuk menimpa data yang ada dalam indeks Vector Search atau menambahkan data yang diimpor dari BigQuery. Menimpa akan menggantikan titik data saat ini dengan data yang diimpor. Penambahan akan menambahkan data baru ke indeks yang ada.

  • Dimensi yang cocok: Dimensi embedding yang disimpan di data BigQuery Anda harus sama dengan dimensi yang dikonfigurasi untuk indeks Penelusuran Vektor Anda.

Menentukan ImportIndexRequest

Sebelum mengimpor data dari BigQuery, buat objek ImportIndexRequest yang menentukan indeks target, apakah akan mengganti data yang ada, dan konfigurasi untuk terhubung ke BigQuery. Kirim objek permintaan ini ke API ImportIndex.

Berikut adalah contoh ImportIndexRequest dalam format JSON:

{
  "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: Nama lengkap resource indeks Penelusuran Vektor tempat Anda ingin mengimpor data.

  • isCompleteOverwrite: Boolean yang menunjukkan apakah akan mengganti data yang ada dalam indeks. Tetapkan ke true untuk mengganti data yang ada.

  • config: Berisi konfigurasi untuk sumber BigQuery.

    • bigquerySourceConfig: Menentukan detail untuk terhubung ke tabel BigQuery Anda.

    • tablePath: Jalur lengkap ke tabel BigQuery Anda dalam format [PROJECT_ID].[DATASET_ID].[TABLE_ID].

    • datapointFieldMapping: Memetakan kolom dalam tabel BigQuery ke kolom di Vector Search.

      • idColumn: Nama kolom yang berisi ID unik.

      • embeddingColumn: Nama kolom yang berisi sematan vektor.

      • restricts: (Opsional) Menentukan batasan string.

      • namespace: Namespace untuk pembatasan.

      • allowColumn: Array yang berisi nama kolom untuk nilai yang diizinkan untuk pembatasan.

      • denyColumn: Array yang berisi nama kolom untuk nilai yang ditolak untuk pembatasan.

      • numericRestricts: (Opsional) Menentukan batasan numerik.

      • namespace: Namespace untuk pembatasan numerik.

      • value_column: Nama kolom yang berisi nilai numerik.

      • value_type: Jenis nilai numerik seperti INT, FLOAT, atau DOUBLE.

      • metadataColumns: (Opsional) Kolom metadata yang akan disertakan dengan sematan fitur. Kolom metadata ini dapat diambil dari hasil penelusuran indeks, tetapi tidak memengaruhi penelusuran itu sendiri. Misalnya, pemfilteran tidak dapat dilakukan pada kolom metadata.

Menjalankan impor

Setelah membuat ImportIndexRequest, kirimkan ke endpoint API ImportIndex. Hal ini akan memicu proses impor, yang mengekspor data dari BigQuery dan memasukkannya ke dalam indeks Vector Search Anda. ImportIndex menampilkan operasi yang berjalan lama. Anda dapat menggunakan ID operasi untuk memantau progres operasi impor.

Setelah data yang diimpor disimpan, data tersebut berada dalam indeks Vector Search Anda dan tidak dapat dibedakan dari data yang dimasukkan menggunakan metode lain. Indeks dapat terus dikelola menggunakan Vector Search API standar.

Contoh kode berikut menunjukkan hasil kueri dengan return_full_datapoint disetel ke benar dan konfigurasi konektor BigQuery yang menentukan pembatasan genre, pembatasan numerik year, serta kolom metadata title dan 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
  }
}