ScaNN
-Index auftreten können. Außerdem finden Sie Beispiele für Fehler und empfohlene Fehlerbehebungen.
Liste der Fehler
Im Folgenden finden Sie eine Liste der Fehler, die beim Erstellen eines ScaNN
-Indexes auftreten. Sie können die Generierung dieser Fehler deaktivieren und mit der Indexerstellung fortfahren. Weitere Informationen finden Sie unter Indexerstellung erzwingen und Fehler unterdrücken.
FEHLER: ScaNN-Index kann nicht mit leerer Tabelle erstellt werden
Fehlermeldung
Wenn Sie versuchen, einen Index für eine Tabelle ohne Daten zu generieren oder eine Tabelle mit einem generierten ScaNN
-Index zu kürzen, wird der folgende Fehler ausgegeben:
ERROR: Cannot create ScaNN index with empty table. 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');
Abfragebeispiel B
truncate t1;
Empfohlene Fehlerbehebung
Achten Sie darauf, dass Ihre Tabelle mit Einbettungsvektoren ausgefüllt ist, bevor Sie einen ScaNN
-Index generieren.
FEHLER: ScaNN-Index kann nicht erstellt werden
Fehlermeldung
Wenn Sie versuchen, einen Index für eine Tabelle mit wenigen Zeilen zu generieren, tritt der folgende Fehler auf:
Cannot create ScaNN index, error: INVALID_ARGUMENT: Number of row (5) must be
larger than (1000).
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 ausgefü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.
FEHLER: ScaNN-Index kann nicht in der übergeordneten Partitionstabelle erstellt werden.
Fehlermeldung
Wenn Sie partitionierte Tabellen aus einer übergeordneten Tabelle erstellt haben, wird beim Erstellen eines SCAN-Indexes für die übergeordnete Tabelle der folgende Fehler ausgegeben:
ERROR: Cannot create ScaNN index on parent partition table. 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 generieren.
Sie müssen die ScaNN
-Indexe für die partitionierte Tabelle generieren.
Indexerstellung erzwingen und Fehler unterdrücken
Sie können AlloyDB erzwingen, einen Index zu generieren und Fehler zu unterdrücken. Bevor Sie die Indexgenerierung mit dieser Methode zulassen, sollten Sie die folgenden Auswirkungen berücksichtigen:
- Da der Index mit weniger oder gar keinen Daten trainiert wird, lernen die Centroide mit null Daten, was zu einer schlechten Wiedererkennung führt.
- Möglicherweise ist auch die Schreibleistung der Datenbank langsam.
So erzwingen Sie die Indexgenerierung:
Legen Sie den Parameter
scann.allow_blocked_operations creation
auf Sitzungsebene in der Datenbank auftrue
fest:SET scann.allow_blocked_operations = true;
Weisen Sie dem Nutzer, der diese Abfragen in der Datenbank ausführen soll, die Berechtigung
SUPERUSER
zu:CREATE USER USER_NAME WITH SUPERUSER PASSWORD PASSWORD;
Ersetzen Sie Folgendes:
USER_NAME
: der Name des Nutzers, dem Sie das Berechtigung gewähren möchten.PASSWORD
: das Passwort des Nutzers.