Ce document décrit les erreurs que vous pouvez rencontrer lorsque vous générez un index ScaNN. Des exemples d'erreurs et de corrections recommandées sont également fournis.
Pour contourner ce problème de manière générale, vous pouvez désactiver la génération de ces erreurs et continuer à générer l'index. Pour en savoir plus, consultez Forcer la création d'index sur des tables vides ou de petite taille.
Impossible de créer un index ScaNN avec une table vide
Description
Lorsque vous essayez de générer un index sur une table sans données ou de tronquer une table sur laquelle un index ScaNN a été généré, l'erreur suivante se produit :
ERROR: Cannot create ScaNN index "[INDEX_NAME]" for table "[TABLE_NAME]", error: FAILED_PRECONDITION: Cannot create ScaNN index "[INDEX_NAME]" with empty table "[TABLE_NAME]". Once the table is populated with data, create the index. See documentation to bypass this validation.
Exemples de requêtes qui génèrent l'erreur
Exemple de requête 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');Exemple de requête B
truncate t1;
Correction recommandée
Assurez-vous que votre table est remplie de vecteurs d'embedding avant de générer un index ScaNN.
Impossible de créer un index ScaNN
Description
Lorsque vous essayez de générer un index sur une table avec peu de lignes renseignées, l'erreur suivante se produit :
ERROR: Cannot create ScaNN index "[INDEX_NAME]" for table "[TABLE_NAME]", error: INVALID_ARGUMENT: Number of rows ([ACTUAL]) must be larger than ([EXPECTED]).
Exemple de requête qui provoque l'erreur
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');
Correction recommandée
Assurez-vous que votre table est remplie de vecteurs d'embedding avant de générer un index ScaNN. Nous vous recommandons de définir un nombre de lignes dans le tableau supérieur à la valeur définie dans le paramètre num_leaves.
Impossible de créer un index ScaNN pour une table ne comportant qu'une seule ligne
Description
Cette erreur s'est produite, car ScaNN (et la plupart des index ANN comme IVFFlat) ont besoin d'un ensemble d'entraînement pour créer leurs structures internes (clusters/feuilles). Lorsque vous insérez une seule ligne , l'erreur suivante s'affiche :
ERROR: Cannot create ScaNN index "[INDEX_NAME]" for table "[TABLE_NAME]", error: INVALID_ARGUMENT: Number of samples "[NUM_SAMPLES]" must be larger than 1 and the number of leaves "[NUM_LEAVES]"
Exemple de requête qui provoque l'erreur
create table t1 (a INT, b VECTOR(512));
CREATE TABLE
insert into t1 select (random()*1e9)::int, random_vector(512) from generate_series(1, 1);
INSERT 0 1
create index on t1 using scann(b cosine) with (num_leaves = 1, quantizer = 'sq8');
Correction recommandée
Assurez-vous que votre table est remplie de vecteurs d'embedding avant de générer un index ScaNN. Nous vous recommandons de définir le nombre de lignes dans le tableau comme suit :
- Supérieur à 1
- Supérieur à la valeur définie dans le paramètre
num_leaves
Impossible de créer un index ScaNN sur la table de partitions parente
Description
Si vous avez créé des tables partitionnées à partir d'une table parente, la création d'un index ScaNN sur la table parente génère l'erreur suivante :
ERROR: Cannot create ScaNN index "[INDEX_NAME]" for parent partition table "[TABLE_NAME]". Create ScaNN indexes on the child tables instead. See documentation to bypass this validation.
Exemple de requête qui provoque l'erreur
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');
Correction recommandée
- Vous ne pouvez pas générer d'index
ScaNNsur la table parente d'une table partitionnée. - Vous devez générer les index
ScaNNsur la table partitionnée.