Risolvere i problemi relativi all'indice ScaNN

Seleziona una versione della documentazione:

Questo documento descrive gli errori che potresti riscontrare quando generi un indice ScaNN. Vengono forniti anche esempi di errori e correzioni consigliate.

Elenco degli errori

Di seguito è riportato un elenco di errori generati quando provi a creare un indice ScaNN. Puoi disattivare la generazione di questi errori e continuare a generare l'indice. Per saperne di più, consulta Imponi la creazione di indici e sopprimi gli errori.

ERRORE: impossibile creare l'indice ScaNN con una tabella vuota

Messaggio di errore

Quando tenti di generare un indice su una tabella senza dati o di troncare una tabella con un indice ScaNN generato, si verifica il seguente errore:

ERROR: Cannot create ScaNN index with empty table. Once the table is populated with data, create the index. See documentation to bypass this validation.

Query di esempio che causano l'errore

  • Esempio di query A

    create table t1 (a INT, b VECTOR(512));
    CREATE TABLE
    create index on t1 using ScaNN(b cosine) with (num_leaves = 10, quantizer = 'sq8');
    
  • Esempio di query B

    truncate t1;
    

Assicurati che la tabella sia popolata con i vettori di incorporamento prima di generare un indice ScaNN.

ERRORE: impossibile creare l'indice ScaNN

Messaggio di errore

Quando tenti di generare un indice in una tabella con poche righe compilate, si verifica il seguente errore:

Cannot create ScaNN index, error: INVALID_ARGUMENT: Number of row (5) must be larger than (1000).

Query di esempio che causa l'errore

create table t1 (a INT, b VECTOR(512));
CREATE TABLE
insert into t1 select (random()*1e9)::int, random_vector(512) from generate_series(1, 5);
INSERT 0 5
create index on t1 using scann(b cosine) with (num_leaves = 100, quantizer = 'sq8');

Assicurati che la tabella sia compilata con i vettori di incorporamento prima di generare un indice ScaNN. Ti consigliamo che il numero di righe nella tabella sia maggiore del valore definito nel parametro num_leaves.

ERRORE: impossibile creare l'indice ScaNN nella tabella delle partizioni principale.

Messaggio di errore

Se hai creato tabelle partizionate da una tabella principale, la creazione di un indice ScaNN sulla tabella principale genera il seguente errore:

ERROR: Cannot create ScaNN index on parent partition table. Create ScaNN indexes on the child tables instead. See documentation to bypass this validation.

Query di esempio che causa l'errore

create table t1 (a INT, b VECTOR(512)) partition by range(a);
CREATE TABLE
CREATE TABLE t1_one_ten PARTITION of t1 for values from (1) to (10);
CREATE TABLE
insert into t1_one_ten select (random()*1e9)::int, random_vector(512) from generate_series(1, 100);
INSERT 0 100
CREATE TABLE t1_eleven_twenty PARTITION of t1 for values from (11) to (20);
CREATE TABLE
insert into t1_eleven_twenty select (random()*1e9)::int, random_vector(512) from generate_series(1, 100);
INSERT 0 100
create index on t1 using scann(b cosine) with (num_leaves = 10, quantizer = 'sq8');

Non puoi generare un indice ScaNN nella tabella principale di una tabella partizionata. Devi generare gli indici ScaNN nella tabella partizionata.

Forza la creazione dell'indice e sopprimi gli errori

Puoi forzare AlloyDB a generare un indice ed eliminare gli errori. Prima di consentire la generazione dell'indice con questo metodo, considera le seguenti implicazioni:

  • Poiché l'indice viene addestrato su pochi dati o su nessun dato, i centroidi vengono appresi su zero dati, il che porta a un richiamo errato.
  • Anche le prestazioni di scrittura nel database potrebbero essere lente.

Per forzare la generazione dell'indice:

  1. Imposta il parametro a livello di sessione scann.allow_blocked_operations creation su true nel database:

    SET scann.allow_blocked_operations = true;
    
  2. Assegna il privilegio SUPERUSER all'utente che eseguirà queste query sul database:

    CREATE USER USER_NAME WITH SUPERUSER PASSWORD PASSWORD;
    

    Sostituisci quanto segue:

    • USER_NAME: il nome dell'utente a cui vuoi concedere il privilegio.
    • PASSWORD: la password dell'utente.