ScaNN
indice. Vengono inoltre forniti esempi di errori e correzioni consigliate.
Elenco degli errori
Di seguito è riportato un elenco di errori generati quando si tenta di creare un indice ScaNN
. Puoi disabilitare la generazione di questi errori e continuare a generare l'indice. Per ulteriori informazioni, consulta Applicare la creazione dell'indice e ignorare gli errori.
ERRORE: impossibile creare l'indice ScaNN con una tabella vuota
Messaggio di errore
Quando provi a generare un indice in una tabella senza dati o a troncare una tabella con un indice ScaNN
generato al suo interno, 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;
Correzione consigliata
Assicurati che la tabella sia compilata con vettori di embedding prima di generare un indice ScaNN
.
ERRORE: impossibile creare l'indice ScaNN
Messaggio di errore
Quando provi a 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');
Correzione consigliata
Assicurati che la tabella sia compilata con vettori di embedding prima di generare un indiceScaNN
. Ti consigliamo di impostare il numero di righe della tabella su un valore superiore a quello definito nel parametro num_leaves
.
ERRORE: impossibile creare l'indice ScaNN nella tabella della partizione principale.
Messaggio di errore
Se hai creato tabelle partizionate da una tabella principale, la creazione di un indice ScaNN nella 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');
Correzione consigliata
Non puoi generare un indice ScaNN
nella tabella principale di una tabella partizionata.
Devi generare gli indici ScaNN
nella tabella partizionata.
Applica la creazione dell'indice e sopprime gli errori
Puoi imporre ad AlloyDB di generare un indice e di eliminare gli errori. Prima di consentire la generazione dell'indice con questo metodo, tieni presente le seguenti implicazioni:
- Poiché l'indice viene addestrato su dati ridotti o nulli, i centroidi apprendono su dati nulli inducendo un cattivo recupero.
- Anche le prestazioni di scrittura nel database potrebbero essere lente.
Per forzare la generazione dell'indice:
Imposta il parametro
scann.allow_blocked_operations creation
a livello di sessione sutrue
nel database:SET scann.allow_blocked_operations = true;
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.