In diesem Dokument werden Fehler beschrieben, die beim Generieren eines ScaNN-Index auftreten können. Außerdem finden Sie Beispiele für Fehler und empfohlene Korrekturen.
Als allgemeine Problemumgehung können Sie die Generierung dieser Fehler deaktivieren und den Index weiterhin generieren. Weitere Informationen finden Sie unter Indexerstellung für leere oder kleine Tabellen erzwingen.
ScaNN-Index kann nicht mit leerer Tabelle erstellt werden
Beschreibung
Wenn Sie versuchen, einen Index für eine Tabelle ohne Daten zu generieren, oder wenn Sie versuchen, eine Tabelle zu kürzen, für die ein ScaNN-Index generiert wurde, tritt der folgende Fehler auf:
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.
Beispielabfragen, die den Fehler verursachen
Beispielabfrage 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');Beispielabfrage B
truncate t1;
Empfohlene Fehlerbehebung
Achten Sie darauf, dass Ihre Tabelle mit Einbettungsvektoren gefüllt ist, bevor Sie einen ScaNN-Index generieren.
ScaNN-Index kann nicht erstellt werden
Beschreibung
Wenn Sie versuchen, einen Index für eine Tabelle mit wenigen Zeilen zu erstellen, tritt der folgende Fehler auf:
ERROR: Cannot create ScaNN index "[INDEX_NAME]" for table "[TABLE_NAME]", error: INVALID_ARGUMENT: Number of rows ([ACTUAL]) must be larger than ([EXPECTED]).
Beispielabfrage, die den Fehler verursacht
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');
Empfohlene Fehlerbehebung
Achten Sie darauf, dass Ihre Tabelle mit Einbettungsvektoren gefüllt ist, bevor Sie einen ScaNN-Index generieren. Wir empfehlen, dass die Anzahl der Zeilen in der Tabelle größer als der im Parameter num_leaves definierte Wert ist.
ScaNN-Index kann nicht für eine Tabelle mit nur einer Zeile erstellt werden
Beschreibung
Dieser Fehler ist aufgetreten, weil für ScaNN (und die meisten ANN-Indizes wie IVFFlat) ein Trainingsset zum Erstellen der internen Strukturen (Cluster/Blätter) erforderlich ist. Wenn Sie genau eine Zeile einfügen , wird der folgende Fehler angezeigt:
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]"
Beispielabfrage, die den Fehler verursacht
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');
Empfohlene Fehlerbehebung
Achten Sie darauf, dass Ihre Tabelle mit Einbettungsvektoren gefüllt ist, bevor Sie einen ScaNN-Index generieren. Wir empfehlen, dass die Anzahl der Zeilen in der Tabelle so hoch ist:
- Größer als 1
- Größer als der im Parameter
num_leavesdefinierte Wert
ScaNN-Index kann nicht für die übergeordnete Partitionstabelle erstellt werden
Beschreibung
Wenn Sie partitionierte Tabellen aus einer übergeordneten Tabelle erstellt haben, wird beim Erstellen eines ScaNN-Index für die übergeordnete Tabelle der folgende Fehler generiert:
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.
Beispielabfrage, die den Fehler verursacht
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');
Empfohlene Fehlerbehebung
- Sie können keinen
ScaNN-Index für die übergeordnete Tabelle einer partitionierten Tabelle erstellen. - Sie müssen die
ScaNN-Indizes für die partitionierte Tabelle generieren.