Fehler beim ScaNN-Index beheben

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 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;
    

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');

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');

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:

  1. Legen Sie den Parameter scann.allow_blocked_operations creation auf Sitzungsebene in der Datenbank auf true fest:

    SET scann.allow_blocked_operations = true;
    
  2. 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.